好吊妞人成视频在线观看,中文字幕一区二区人妻性色,亚洲日本在线电影,夜夜未满十八勿进的爽爽影院,在线观看国产成人av天堂

告別ORA-00955錯(cuò)誤的實(shí)用指南

2024-12-17 09:12:42

ORA-00955 錯(cuò)誤是什么?

80143937-4ab1-4b36-a794-80a2c4e0e968.jpg

ORA-00955 錯(cuò)誤指的是 “名稱已由現(xiàn)有對(duì)象使用”。簡(jiǎn)單來(lái)說(shuō),就是當(dāng)你在 Oracle 數(shù)據(jù)庫(kù)中進(jìn)行創(chuàng)建操作,比如創(chuàng)建表、視圖、存儲(chǔ)過(guò)程、同義詞等各類對(duì)象時(shí),如果使用的名稱已經(jīng)被數(shù)據(jù)庫(kù)里其他對(duì)象占用了,就會(huì)出現(xiàn)這個(gè)錯(cuò)誤提示,導(dǎo)致創(chuàng)建操作無(wú)法順利完成。例如,你想創(chuàng)建一個(gè)名為 “student2” 的存儲(chǔ)過(guò)程,可數(shù)據(jù)庫(kù)里已經(jīng)存在了同名的表或者其他類型的對(duì)象叫 “student2”,那這時(shí)就會(huì)觸發(fā) ORA-00955 錯(cuò)誤啦。了解這個(gè)錯(cuò)誤的基本含義,是我們后續(xù)尋找解決辦法的第一步哦。

常見(jiàn)引發(fā) ORA-00955 錯(cuò)誤的場(chǎng)景

建表時(shí)出現(xiàn)該錯(cuò)誤

在創(chuàng)建新表的時(shí)候,常常容易觸發(fā) ORA-00955 錯(cuò)誤。比如,當(dāng)我們想要?jiǎng)?chuàng)建一個(gè)結(jié)構(gòu)相似的測(cè)試表時(shí),可能就會(huì)遇到這種情況。有時(shí)候我們覺(jué)得只要表名不重復(fù)就沒(méi)問(wèn)題了,但其實(shí)不然,像主鍵名等等重復(fù)了也會(huì)引發(fā)該錯(cuò)誤。例如,之前有用戶在數(shù)據(jù)庫(kù)建表時(shí),更換了表名稱,可依然出現(xiàn) “ORA-00955: 名稱已由現(xiàn)有對(duì)象使用” 這樣的提示語(yǔ),經(jīng)過(guò)一番排查后發(fā)現(xiàn),是在增加唯一值約束名的時(shí)候,和以前的相同了,從而導(dǎo)致無(wú)法進(jìn)行創(chuàng)建。再比如,在建表的過(guò)程中設(shè)置主鍵約束時(shí),如果使用的約束名稱與數(shù)據(jù)庫(kù)里已有的其他對(duì)象的名稱沖突,哪怕表本身的名稱是獨(dú)一無(wú)二的,同樣會(huì)觸發(fā)這個(gè)錯(cuò)誤,使得建表操作不能順利完成呀。

修改主鍵時(shí)出現(xiàn)該錯(cuò)誤

對(duì)表的主鍵進(jìn)行修改操作時(shí),也很容易出現(xiàn) ORA-00955 錯(cuò)誤。以藥庫(kù)的 drug_stock 表為例,若需要在主鍵中增加一個(gè)字段,如 PUTINSTORAGE_DATE,原來(lái)的主鍵名是 PK_DRUG_STOCK,鍵值為 DRUG_CODE、DRUG_SPEC、FIRM_ID、PACKAGE_SPEC、BATCH_NO、STORAGE,修改后要變?yōu)榘略鲎侄蔚男问健T趫?zhí)行刪除原主鍵的操作 “ALTER TABLE PHARMACY.DRUG_STOCK DROP PK_DRUG_STOCK;” 以及后續(xù)相關(guān)刪除主鍵索引等操作后,準(zhǔn)備添加新主鍵時(shí),如果新添加主鍵的相關(guān)名稱,像主鍵名或者與之關(guān)聯(lián)的索引名等,和數(shù)據(jù)庫(kù)中已有的其他對(duì)象名稱產(chǎn)生沖突,就會(huì)出現(xiàn) ORA-00955 錯(cuò)誤,導(dǎo)致主鍵修改無(wú)法成功完成。又或者要添加的主鍵列名,在表中的數(shù)據(jù)存在重復(fù)情況,那在執(zhí)行添加主鍵語(yǔ)句時(shí),也會(huì)報(bào)添加主鍵失敗,同時(shí)也可能引發(fā) ORA-00955 錯(cuò)誤提示呢,只有把重復(fù)的數(shù)據(jù)刪除掉,再執(zhí)行添加主鍵的 SQL 語(yǔ)句,才有可能順利完成主鍵的修改呀。

解決 ORA-00955 錯(cuò)誤的方法

檢查重復(fù)對(duì)象并處理

當(dāng)遇到 ORA-00955 錯(cuò)誤時(shí),首先要做的就是檢查是否存在重復(fù)對(duì)象。我們可以通過(guò)一些查詢語(yǔ)句來(lái)查找與報(bào)錯(cuò)相關(guān)的重復(fù)對(duì)象,像是同名的表、約束、索引等等。例如,使用 “select a.OBJECT_type,a.* from all_objects a where upper (a.OBJECT_NAME) ='[具體對(duì)象名稱]';” 這樣的語(yǔ)句來(lái)進(jìn)行查詢(這里的 “[具體對(duì)象名稱]” 替換為你實(shí)際創(chuàng)建時(shí)報(bào)錯(cuò)提示重復(fù)的那個(gè)名稱哦)。如果通過(guò)查詢找到了重復(fù)對(duì)象,那就要根據(jù)實(shí)際情況來(lái)決定是對(duì)其進(jìn)行刪除還是更改名稱等處理辦法啦。要是創(chuàng)建表時(shí)報(bào)錯(cuò),發(fā)現(xiàn)有重復(fù)的視圖或者其他同名稱對(duì)象,就可以選擇修改當(dāng)前要?jiǎng)?chuàng)建對(duì)象的名稱,使其具有唯一性,或者刪掉那個(gè)與之重名的已有對(duì)象。比如創(chuàng)建 “temp_aud” 臨時(shí)表時(shí)報(bào)錯(cuò) ORA-00955,查詢發(fā)現(xiàn)有一個(gè)視圖和該表重名了,這時(shí)就可以把臨時(shí)表名稱改掉或者刪除那個(gè)重名的視圖來(lái)解決問(wèn)題呢。而如果是在修改主鍵等操作時(shí)出現(xiàn)該錯(cuò)誤,同樣先查詢相關(guān)的主鍵、索引等是否存在重名情況。先通過(guò) “select * from user_cons_conlumns c where c.table_name=‘[表名]’;” 查詢表中的主鍵,確定要?jiǎng)h除的主鍵名稱后,執(zhí)行 “alter table [表名] drop constraint ‘主鍵名稱’” 語(yǔ)句來(lái)刪除原主鍵,再查詢是否有同名稱的主鍵索引,若有就用 “drop index [表名].‘主鍵索引名稱’” 語(yǔ)句刪除掉,之后就可以嘗試重新添加主鍵啦??傊?,仔細(xì)排查并妥善處理重復(fù)對(duì)象是解決 ORA-00955 錯(cuò)誤的重要一步哦。

調(diào)整命名策略

合理的命名在避免 ORA-00955 錯(cuò)誤方面起著至關(guān)重要的作用呢。在給數(shù)據(jù)庫(kù)中的各類對(duì)象命名時(shí),遵循一定的規(guī)則和約定能減少很多不必要的麻煩哦。當(dāng)給表命名時(shí),典型的命名約定是給它一個(gè)描述性的名稱,并且最好總是使它成為單數(shù)冠詞(比如 “customer” 或 “facility” )或復(fù)數(shù)冠詞(比如 “customers” 或 “facilities”)并保持一致呀。對(duì)于列命名來(lái)說(shuō),同樣要賦予它一個(gè)描述性的名稱哦。除非受到字符限制,否則盡量不要使用縮寫(要是使用了縮寫,可以在該列上添加注釋來(lái)提供完整的詳細(xì)信息),而且通常不需要在列名中包括表名,畢竟這屬于多余的信息,不然開發(fā)人員每次使用該列時(shí)都得多鍵入額外的字符呢。在命名約束時(shí),也要給它一個(gè)能標(biāo)識(shí)其位置和內(nèi)容的描述性名稱哦。這往往涉及到包括約束的類型(因?yàn)楸淼囊涣锌梢杂卸鄠€(gè)約束)、表名(由于可能存在多個(gè)表且每個(gè)表有相同的列名)以及列名(因?yàn)樵谕粋€(gè)表中,不同的列上可能有多個(gè)相同類型的約束)等要素呀。約束名稱常見(jiàn)的公式可能是 “tablename_columnname_(pk|fk|u|nn|chk)” 或 “(pk|fk|u|nn|chk)_tablename_columnname”(具體選擇哪種取決于在搜索約束時(shí)是希望將表名還是約束類型作為對(duì)約束進(jìn)行排序的主要標(biāo)準(zhǔn)哦)。不過(guò),無(wú)論采用哪種命名約定,都一定要確保在整個(gè)數(shù)據(jù)庫(kù)中能一致地應(yīng)用它,這樣才能有效避免因命名問(wèn)題而引發(fā) ORA-00955 錯(cuò)誤呀。

處理臨時(shí)表相關(guān)報(bào)錯(cuò)情況

在處理臨時(shí)表出現(xiàn) ORA-00955 錯(cuò)誤且被鎖等特殊情況時(shí),需要一些針對(duì)性的解決步驟哦。比如在執(zhí)行創(chuàng)建臨時(shí)表語(yǔ)句,像 “create global temporary table temp_aud on commit preserve rows as select * from sys.dba_audit_trail;” 這樣的語(yǔ)句時(shí)報(bào)錯(cuò) ORA-00955,原因是有一個(gè)視圖和該臨時(shí)表重名了,那首先要查看重名的對(duì)象,通過(guò) “select a.OBJECT_type,a.* from all_objects a where upper (a.OBJECT_NAME) ='[臨時(shí)表名稱]';” 語(yǔ)句來(lái)查找(這里 “[臨時(shí)表名稱]” 替換為實(shí)際報(bào)錯(cuò)的臨時(shí)表名哦),找到后可以選擇修改臨時(shí)表名稱或者刪掉那個(gè)重復(fù)的對(duì)象呀。但要是在刪除這個(gè)臨時(shí)表時(shí)報(bào)錯(cuò) ORA-14452(試圖創(chuàng)建、變更或刪除正在使用的臨時(shí)表中的索引,意味著這張臨時(shí)表被鎖了,有其它 session 正在使用它呢),這時(shí)解決辦法就是殺掉正在使用該表的 session 哦。先通過(guò) “select sid,serial# from v lock where id1 =(select object_id from user_objects where object_name=upper (' [臨時(shí)表名稱]')));” 語(yǔ)句查找還在使用臨時(shí)表的會(huì)話(同樣 “[臨時(shí)表名稱]” 替換為實(shí)際的哦),不過(guò)可能因?yàn)橛卸鄠€(gè),需要分步查詢,先查出 “object_id”,再通過(guò) “object_id” 查 “sid”,最后根據(jù) “sid” 查出 “sid” 和 “serial#”,然后執(zhí)行 “alter system kill session'sid,serial#';” 殺掉進(jìn)程呀。要是殺掉進(jìn)程后出現(xiàn) ORA-00031(標(biāo)記要終止的會(huì)話,說(shuō)明在數(shù)據(jù)庫(kù)級(jí)不能殺掉該死鎖進(jìn)程),那就需要到操作系統(tǒng)級(jí)來(lái)處理了哦。利用 “select spid, osuser, s.program from v process p where s.paddr = p.addr and s.sid = [對(duì)應(yīng)的 sid 值];” 語(yǔ)句查出這個(gè) session 的 “spid”,接著在數(shù)據(jù)庫(kù)服務(wù)器上 kill 掉查出的系統(tǒng)進(jìn)程,并用 root 用戶下 kill 掉這個(gè)進(jìn)程,之后再去嘗試刪除臨時(shí)表等操作,就能解決臨時(shí)表相關(guān)的 ORA-00955 錯(cuò)誤及連帶的一些問(wèn)題啦。

預(yù)防 ORA-00955 錯(cuò)誤的小技巧

提前做好對(duì)象名稱規(guī)劃

在日常進(jìn)行數(shù)據(jù)庫(kù)操作前,就應(yīng)該對(duì)各類要?jiǎng)?chuàng)建的對(duì)象名稱有一個(gè)整體的規(guī)劃。比如,在開展一個(gè)新項(xiàng)目,涉及到多張數(shù)據(jù)表、多個(gè)存儲(chǔ)過(guò)程等對(duì)象創(chuàng)建時(shí),先梳理出一個(gè)命名清單,按照一定的規(guī)則來(lái)給不同類型的對(duì)象命名,避免隨意命名導(dǎo)致后續(xù)出現(xiàn)名稱沖突。可以根據(jù)業(yè)務(wù)模塊來(lái)劃分命名范圍,例如涉及用戶模塊的表統(tǒng)一以 “user_” 開頭來(lái)命名,這樣能從源頭上減少出現(xiàn) ORA-00955 錯(cuò)誤的可能性哦。

及時(shí)記錄已用名稱

養(yǎng)成一個(gè)好習(xí)慣,每當(dāng)成功創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)對(duì)象后,就將其名稱記錄下來(lái)??梢詫iT建立一個(gè)文檔或者使用電子表格來(lái)記錄,標(biāo)注好對(duì)象類型、創(chuàng)建時(shí)間等關(guān)鍵信息。這樣在后續(xù)創(chuàng)建新對(duì)象時(shí),就能快速對(duì)照查看是否存在重名情況啦。例如,團(tuán)隊(duì)成員 A 創(chuàng)建了名為 “product_info” 的表用于存儲(chǔ)產(chǎn)品基本信息,記錄下來(lái)后,其他成員在創(chuàng)建相關(guān)視圖或者存儲(chǔ)過(guò)程等對(duì)象時(shí),如果要用到類似名稱,就能提前知曉并更換,防止觸發(fā) ORA-00955 錯(cuò)誤呀。

定期清理無(wú)用對(duì)象

定期對(duì)數(shù)據(jù)庫(kù)中那些不再使用的對(duì)象進(jìn)行清理。有些時(shí)候,可能之前做測(cè)試或者臨時(shí)搭建環(huán)境創(chuàng)建了很多對(duì)象,后來(lái)項(xiàng)目結(jié)束了,這些對(duì)象就閑置在數(shù)據(jù)庫(kù)里,它們占用了名稱資源,很容易導(dǎo)致后續(xù)創(chuàng)建新對(duì)象時(shí)出現(xiàn)名稱沖突。像通過(guò) “drop table [表名];” 語(yǔ)句來(lái)刪除無(wú)用的表,“drop procedure [存儲(chǔ)過(guò)程名];” 來(lái)清理不再需要的存儲(chǔ)過(guò)程等。例如,之前為了測(cè)試某個(gè)功能創(chuàng)建了一批臨時(shí)表,測(cè)試結(jié)束后及時(shí)用相應(yīng)的刪除語(yǔ)句把它們清理掉,就能避免后續(xù)創(chuàng)建正式表時(shí)出現(xiàn)名稱重復(fù)報(bào)錯(cuò)的問(wèn)題哦。

利用命名規(guī)范工具或插件(如果有)

現(xiàn)在市面上有些數(shù)據(jù)庫(kù)管理工具或者開發(fā)工具的插件,具備命名規(guī)范檢查和提示功能哦。在創(chuàng)建對(duì)象時(shí),它們可以根據(jù)預(yù)設(shè)的命名規(guī)則來(lái)提醒你是否存在潛在的名稱沖突風(fēng)險(xiǎn)。如果所在的開發(fā)團(tuán)隊(duì)使用了這類工具,那一定要充分利用起來(lái)呀。比如在某款常用的數(shù)據(jù)庫(kù)開發(fā) IDE 中,安裝了對(duì)應(yīng)的


聲明:此篇為墨韻科技原創(chuàng)文章,轉(zhuǎn)載請(qǐng)標(biāo)明出處鏈接: http://m.nlzm.net.cn/news/4521.html
  • 網(wǎng)站建設(shè)
  • SEO
  • 信息流
  • 短視頻
合作伙伴
在線留言
服務(wù)熱線

服務(wù)熱線

15879069746

微信咨詢
返回頂部
在線留言