日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一次Oracle数据迁移

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一次Oracle数据迁移 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目標數據庫:Oracle?Database?10g Enterprise Edition Release 10.2.0.3.0?

源數據庫 ?:?Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

?

1.首先想到的是用expdp,impdp。

?通過交流發現無法得到源數據庫的操作系統密碼,這樣一來expdp,impdp就不好使了。

?

2.其次想到的是用plsql developer 來導出數據,但是導出的時候報錯了。

放棄此種方法。

3.由于數據量不是很大,考慮使用數據庫鏈的方式來完成。

?a.在目標數據庫上創建數據庫鏈,鏈接到目標數據庫。

create public database linkto_168_bi22 connect to "bi41" identified by "bi41" using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST =172.21.1.68)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl)))';

?b.得到用戶對象的定義語句?dbms_metadata.get_ddl('TABLE','ACT_GE_BYTEARRAY')

?在此糾結了一下,是直接用過程腳本來創建表,還是先生成建表語句,之后再循環灌數據。

c.選擇先創建用戶對象,之后再插入數據。

?這個選擇給后續的數據插入帶來了一些麻煩,就是索引和約束,特別是外鍵約束。

在腳本中加入了禁用約束的語句

FOR i IN (SELECT table_name, constraint_name --disable first the foreign keyFROM user_constraintsWHERE constraint_type = 'R'AND status = 'ENABLED') LOOPEXECUTE IMMEDIATE 'alter table "' || i.table_name || '" disable constraint ' ||i.constraint_name;END LOOP i;FOR i IN (SELECT table_name, constraint_name -- then disable all constraintsFROM user_constraintsWHERE status = 'ENABLED') LOOPEXECUTE IMMEDIATE 'alter table "' || i.table_name || '" disable constraint ' ||i.constraint_name;END LOOP i;

感覺OK的時候,又報錯了。

?ERROR: ?ORA-22992:?cannot?use?LOB?locators?selected?from?remote?tables?

原來表中有些是LOB字段,無法通過數據鏈訪問直接訪問。

最后想到用Oracle的全局臨時表的方式將數據抽取過來。

這里也有一個小插曲,就是有50多個表都是有lob字段的。

想寫一個循環利用動態SQL來創建global temporary table,并且每次創建之前刪除掉改全局臨時表。

v_sql := 'create global temporary table table1 ON COMMIT PRESERVE ROWS asselect * from ' || v_table_name;execute immediate v_sql;v_sql := 'insert into table1 ' || 'select * from ' || v_table_name || '@to_168_bi';execute immediate v_sql;
v_sql := 'insert into ' || v_table_name || 'select * from table1';execute immediate v_sql;

commit;

?

這樣創建的臨時表默認是?COMMIT delete ROWS 的。

發現數據沒有抽取過來,初步懷疑是動態執行SQL的時候自動提交了,這里有些沒有想清楚。

之后創建全局臨時表的時候加上了ON COMMIT PRESERVE ROWS。

數據是抽過來了,但是drop的時候會報錯:ORA-14452: 試圖創建, 變更或刪除正在使用的臨時表中的索引

declarev_table_name varchar2(32);v_sql varchar2(2000);v_cnt number;cursor cur isselect t.TABLE_NAMEfrom user_tables twhere t.TABLE_NAMEin (select st.table_namefrom user_tab_columns stwhere st.DATA_TYPE in ('CLOB', 'BLOB'))order by t.TABLE_NAME;beginfor i in cur loopv_table_name := i.table_name;v_sql := 'truncate table ' || v_table_name;execute immediate v_sql;select count(1) into v_cnt from user_tables t where t.TABLE_NAME=upper('table1');if v_cnt >0 thenexecute immediate 'drop table table1';end if; v_sql := 'create global temporary table table1 ON COMMIT PRESERVE ROWS as' || 'select * from ' || v_table_name ||'@to_168_bi';execute immediate v_sql;v_sql := 'insert into ' || v_table_name || 'select * from table1';execute immediate v_sql;commit;end loop;exceptionwhen others thendbms_output.put_line(v_table_name || ':' || sqlcode || ':' || sqlerrm);end get_data_from168; View Code

之后測試了一下,

SQL> create global temporary table table1 as select * from employees;Table created.SQL> drop table table1;Table dropped.SQL> create global temporary table table1 on commit preserve rows as select * from employees;Table created.SQL> drop table table1; drop table table1* ERROR at line 1: ORA-14452: attempt to create, alter or drop an index on temporary table already in use

實驗證明創建glob temporary table 的時候如果添加了on commit preserve rows在session沒有退出的情況下是沒發drop的。

之后這樣寫在SQLplus 中執行卻沒什么問題,plsql developer 的test procedure的方式是多session?

declarev_table_name varchar2(32);v_sql varchar2(2000);v_cnt number;cursor cur isselect t.TABLE_NAMEfrom user_tables twhere t.TABLE_NAMEin (select st.table_namefrom user_tab_columns stwhere st.DATA_TYPE in ('CLOB', 'BLOB'))order by t.TABLE_NAME;beginfor i in cur loopv_table_name := i.table_name;v_sql := 'truncate table ' || v_table_name;execute immediate v_sql;select count(1) into v_cnt from user_tables t where t.TABLE_NAME=upper('table1');if v_cnt >0 thenexecute immediate 'drop table table1';end if; /* v_sql := 'create global temporary table table1 ON COMMIT PRESERVE ROWS as' || 'select * from ' || v_table_name ||'@to_168_bi';execute immediate v_sql;*/v_sql := 'create global temporary table table1as' || 'select * from ' || v_table_name;execute immediate v_sql;execute immediate ('insert into table1 select * from '||v_table_name||'@to_168_bi');v_sql := 'insert into ' || v_table_name || 'select * from table1';execute immediate v_sql;commit;end loop;exceptionwhen others thendbms_output.put_line(v_table_name || ':' || sqlcode || ':' || sqlerrm);end get_data_from168; View Code

后來想想,如果用Kettle的話會更方便,結果用Kettle測試了一下,Kettle對于lob字段處理的也非常好。

之后Kettle會自動生成每個表對應的轉換。

測試運行也沒什么問題,非常方便。

?

轉載于:https://www.cnblogs.com/Alex-Zeng/p/3988504.html

總結

以上是生活随笔為你收集整理的一次Oracle数据迁移的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91久久精品www人人做人人爽 | 人人爽视频 | 亚洲人视频在线 | 日日噜噜夜夜狠狠久久丁香五月 | 精品少妇一区二区三区在线观看 | 超碰在线亚洲 | 亚洲国产精品suv | www.欧美色图 | 一级女性全黄久久生活片免费 | 在线观看网站污 | 姑娘第5集高清在线观看 | 亚欧日韩av | 波多野结衣视频免费观看 | 日本三级欧美三级 | 超级变态重口av番号 | av免费播放| 亚洲少妇一区二区三区 | 成人国产三级 | 免费观看国产视频 | 538精品一线 | 日韩大胆人体 | 成人免费影院 | 91嫩草视频在线观看 | 美女毛片在线观看 | 亚洲综合影视 | 欧美激情久久久久久久 | 国产精品欧美一区二区 | 尤物一区 | 草色噜噜噜av在线观看香蕉 | 日本久久精品 | 美国一级片网站 | 亚洲影音先锋 | 性欧美一级 | ww成人| 极品白嫩丰满少妇无套 | 在线观看中文字幕一区二区 | 欧美一级啪啪 | 美日韩在线 | 国产熟妇一区二区三区aⅴ网站 | 97欧美视频 | 天堂av在线电影 | 精品无码国产污污污免费网站 | 久久亚洲一区二区 | 黄色一级录像片 | 五月导航 | se在线观看 | 国产呦系列 | 大屁股白浆一区二区 | xxxxhdvideos| 精品一区二区在线播放 | 天堂中文在线网 | 免播放器在线视频 | 天天射美女 | 日韩视频免费在线播放 | 国产让女高潮的av毛片 | 国产特黄aaaaa毛片 | 日本大胆裸体做爰视频 | www.国产在线视频 | 国产香蕉97碰碰碰视频在线观看 | 色婷婷av一区二区三区软件 | 亚洲免费中文字幕 | 免费av在线网站 | 亚洲欧美日韩精品在线观看 | 一区二区乱码 | 男人肌肌桶女人肌肌 | 在线青草 | 天天射天天干天天操 | 亚洲不卡免费视频 | 激情综合文学 | 国产乱淫av片免费 | 亚洲欧美视频二区 | 成人夜色视频 | 国产精选91 | 日韩a级片在线观看 | 欧美日韩系列 | 99精品视频在线 | 波多野结衣不卡视频 | 国内三级在线 | 国产精品久久午夜夜伦鲁鲁 | 波多野结衣中文字幕在线 | 狠狠爱亚洲| 中国少妇初尝黑人巨大 | 国产日本精品视频 | 午夜一级视频 | 美女日批网站 | 色干网| 神秘电影永久入口 | 国产黑丝一区二区 | 在线免费观看亚洲视频 | 中文字母av| 少妇激情网 | 老司机深夜视频 | 国产伦精品一区二区三区高清 | 粉嫩av一区二区三区免费观看 | 樱花草av| 韩国日本欧美一区 | 少妇一边呻吟一边说使劲视频 | 无码aⅴ精品一区二区三区浪潮 | 国产一级影片 |