欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Oracle重建表(rename)注意事項總結(jié)

http://www.cnblogs.com/ljbguanli/p/6752029.html

一、概述
前一段時間,有一個DBA朋友在完畢重建表(rename)工作后,第二天早上業(yè)務(wù)無法正常執(zhí)行,出現(xiàn)數(shù)據(jù)無法插入的限制和錯誤,后來分析才發(fā)現(xiàn),錯誤的原因是使用rename方式重建表以后,其他引用這個表的外鍵約束指向沒有又一次定義到這個重建的新表中,從而導(dǎo)致這些表在插入新數(shù)據(jù)時,違反數(shù)據(jù)完整性約束,導(dǎo)致數(shù)據(jù)無法正常插入。

影響了業(yè)務(wù)大概有1個多小時,真是一次血淋淋的教訓(xùn)啊。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供魏都企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計、成都做網(wǎng)站H5建站、小程序制作等業(yè)務(wù)。10年已為魏都眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進行中。

使用rename方式重建表是我們?nèi)粘BA維護工作中常常使用的一種方法,由于CTAS+rename這樣的配合方式。非常有用和高效。

非常多DBA朋友應(yīng)該也都是用過rename方式重建表。并且重建完畢以后也都一切正常,沒有引起過問題。可是,我想說的是,使用rename重建表后。詳細須要完畢哪些掃尾工作你真的清楚嗎??

這篇文章主要就是歸納當(dāng)我們使用rename方式重建表后。須要進行哪些掃尾工作,假設(shè)你還不是非常清楚。一定要細致閱讀這篇文章。同一時候在以后的重建表工作中矯正過來。否則。問題遲早有一天會降臨到你的身邊!

二、重建表的方式
這里先不談其他,只說一下重建表的方法,例如以下
1、為了確保全部表字段、字段類型、長度全然一樣,我一般不建議使用CTAS方式來重建表。
2、一般我都是使用以下兩種方法中的一個,來抽取表的定義
  • select dbms_metadata.get_ddl('TABLE',upper('&i_table_name'),upper('&i_owner')) from dual;
  • 使用PL/SQL developer類似這種工具,來查看表定義語句
3、又一次建一張_old類型的表(依據(jù)上面的抽取的表定義),然后使用insert /*+ append */ xx select xxx 方式完畢數(shù)據(jù)的轉(zhuǎn)換
4、最后使用rename方式倒換這兩張表的名字


三、重建表注意事項
索引重建:這里最關(guān)鍵的是,重建后索引的名字是否必須和曾經(jīng)的一樣,假設(shè)須要一樣。則必須將當(dāng)前使用的索引名字先rename,否則創(chuàng)建的時候會出現(xiàn)索引名字已經(jīng)存在的錯誤

例如以下查詢當(dāng)前表的索引并改名sql:
select 'alter index ' || owner || '.' || index_name || ' rename to ' ||
       substr(index_name, 1, 26) || '_old;'
  from dba_indexes a
 where a.table_owner = 'DBMON'
   AND A.table_name = 'DH_T';  

依賴對象重建:一般能夠使用例如以下方式完畢
select 'alter '||decode(type,'PACKAGE BODY','PACKAGE',type)||' '||owner||'.'||name||' compile;'
  from dba_dependencies a
 where a.referenced_name = 'DH_T'
   and a.referenced_owner = 'DBMON';  

注意:
1、這里重建的僅僅是直接依賴對象,必須考慮那些間接依賴的對象(比如 view1依賴A表,view2依賴view1),查找方法和上面幾乎相同
2、假設(shè)這些依賴對象中存在一些私有對象(比如dblink等)。我們用DBA用戶編譯是會出現(xiàn)編譯錯誤,對于這樣的對象。必須以相應(yīng)對象的所屬者才能編譯成功。(也可用用10g以后新出現(xiàn)的代理權(quán)限來完畢這類任務(wù)!)
針對PL/SQL代碼(包、函數(shù)、過程等),是否存在私有對象的查找方法,例如以下:
select *
  from dba_source a
 where (a.owner, a.name) in
       (select owner, name
          from dba_dependencies b
         where b.referenced_name = 'DH_T'
           and b.referenced_owner = 'DBMON')
   and a.TEXT like '%@%';
  

針對視圖中是否存在私有對象的查找方法,例如以下(因為是long類型。必須得一個一個查看):
select *
  from dba_views a
 where (a.owner, a.view_name) in
       (select owner, name
          from dba_dependencies b
         where b.referenced_name = 'DH_T'
           and b.referenced_owner = 'DBMON'
           and b.type = 'VIEW')  

權(quán)限重建:能夠使用例如以下語句
select 'grant ' || PRIVILEGE || ' on ' || owner || '.' || table_name ||
       ' to ' || grantee || ';'
  from dba_tab_privs
 where table_name = upper('&i_table_name')
   and owner = upper('&i_owner');

外鍵重建:對于外鍵,如今的業(yè)務(wù)數(shù)據(jù)邏輯非常多都是在應(yīng)用層來實現(xiàn)。因此表上的外鍵可能都非常少,因此。導(dǎo)致非常多DBA都忘記須要檢查和重建這一部分了,從而導(dǎo)致業(yè)務(wù)出現(xiàn)故障,本章最開始說的故障案例就是由于沒有重建外鍵而引起,因此我們一定要提高警惕。

能夠使用以下語句查看,哪些表引用了重建表

select a.table_name,
       a.owner,
       a.constraint_name,
       a.constraint_type,
       a.r_owner,
       a.r_constraint_name,  --被外鍵引用的約束名
       b.table_name          --被外鍵引用的表名
  from dba_constraints a, dba_constraints b
 where a.constraint_type = 'R'
   and a.r_constraint_name = b.constraint_name
   and a.r_owner = b.owner
   and b.table_name = 'FSPARECEIVEBILLTIME'
   and b.owner='';

物化視圖:另外一個很重要的依賴對象就是物化視圖,一般來說,rename表以后,物化視圖是不會有問題的,再次刷新時會自己主動編譯,可是這可能會影響優(yōu)化其選擇運行計劃。因此,建議手工直接編譯這些失效的物化視圖,如下:
alter MATERIALIZED VIEW DH_T_MV compile; 
備注。事實上這步已經(jīng)包括在依賴對象重建部分了。單獨拿出來是由于這個依賴對象很重要,不容有不論什么意外

物化視圖日志:物化視圖日志是為了高速刷新準(zhǔn)備的。并且從dba_dependencies 這張依賴表中無法查找出來的。可是,對于這個對象。我們一定要保持慎重和敬畏,由于假設(shè)表上存在物化視圖日志對象的話,那么這張表無法完畢rename(在一個變更的晚上,其他什么都OK了,突然遇到一個這種問題。還得找開發(fā)確認。是非常被動的,整個變更非常有可能由于這個無法確認而取消)。會直接報錯。查找表上的物化視圖日志對象方法例如以下:
select master,log_table
 from user_mview_logs a
where master in ('DH_T');  

備注:
  1. 我們可能還須要關(guān)注表字段類型,那些LOB、long字段都是我們重建表是須要考慮的
  2. 還有就是重建表是我們可能都會使用parallel+nologging模式來加高速度,一定要記得在重建完畢后將這些屬性改動回來。(曾經(jīng)遇到過一個案例,未將parallel屬性改回來,導(dǎo)致運行計劃選用并行,終于導(dǎo)致資源非常快耗盡,CPU100%)
  3. 另一些同步機制。假設(shè)同步依賴rowid,因為重建表rowid會該表。可能造成實時同步失敗,這些都是我們須要考慮的
  4. 最后。在工作完畢后,檢查一下全部對象的有效性是一個不錯的方案。(建議在重建前保存快照。重建后與前面的快照比較)
  5. 上面講述的都是一些我們最經(jīng)常使用的對象,其他一些非常少使用的對象這里就不概述了

分享名稱:Oracle重建表(rename)注意事項總結(jié)
網(wǎng)頁路徑:http://www.chinadenli.net/article2/gejjoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站自適應(yīng)網(wǎng)站軟件開發(fā)移動網(wǎng)站建設(shè)外貿(mào)建站手機網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)