數據庫遷移、重組、備份、恢復可以有如下幾種處理方式:
1.導出、導入用戶
?1.1導出用戶
??exp
system/oracle@orcl
file=c:\ies20101009.dmp log=c:\ies20101009_exp.log owner=(ies) buffer=655000 compress=y
?1.2導入用戶
??connect
system/oracle@orcl
;
??--刪除用戶--
??drop user ies cascade;
??--刪除表空間--
??drop tablespace iests including contents;
??--創建表空間--
??create tablespace iests datafile 'D:\oracle\oradata\orcl\iests.dbf' size 200m reuse autoextend on next 50m;
??--創建用戶并授權--
??create user ies identified by oracle default tablespace iests;
??grant resource,connect to ies;
??grant select any dictionary to ies;
??grant select any sequence to ies;
??grant create any table,alter any table,drop any table to ies;
??grant select any table,insert any table,update any table,delete any table to ies;
??grant create any trigger,alter any trigger,drop any trigger to ies;
??grant create any procedure,alter any procedure,drop any procedure,execute any procedure to ies;
??grant create any view,drop any view to ies;
??grant create any synonym to ies;
??grant create any snapshot to ies;
??--導入dmp--
??imp
system/oracle@orcl
fromuser=(ies) touser=(ies) buffer=655000 ignore=y file=c:\ies20101008.dmp log=c:\ies20101008_imp.log
?1.3總結
?????????? 導出、導入用戶的操作是備份、恢復的主要方法,該方法非常穩定,一般不會產生異常或報錯的信息。
?????????? 需要注意的是在oracle不同版本之間備份和恢復時,導入、導出需要是同一個版本的數據庫,即需要將10g的數據庫備份到9i時,需要用9i的客戶端連接10g的數據庫進行導出,然后在用9i進行導入。
導入、導出常遇到的問題有:1.字符集不匹配,一般使用NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK,2.客戶端版本不對,10.0.2.0.1不能導入到10.0.2.0.3的數據庫中。
在數據庫恢復時(導入),需要停止web服務,是數據庫處于不被連接的狀態,否則用戶刪除時報錯,不能被刪除。
如果不刪除用戶,只刪除表空間,將導致用戶下的object不能被刪除(object包括function,procedure,synonym,package,Javasource,javaclass等),同樣object不能被導入。
2.導出、導入表
?2.1 導出表
??exp
ies/oracle@orcl
tables=(YJ_FDKKX,YJ_FDQYCWYB,YJ_FDQYCWZB,YJ_FDQYDLSCQKB) file=c:\ies_tables20101009.dmp log=c:\ies_tables20101009_exp.log compress=n direct=y
?2.2 導入表
??????????? 2.2.1 刪除表中數據(是否需要刪除表中數據需要依據實際情況而定)
??truncate table YJ_FDKKX;
??truncate table YJ_FDQYCWYB;
??truncate table YJ_FDQYCWZB;
??truncate table YJ_FDQYDLSCQKB;
??提示:
??truncate table YJ_FDQYCWZB;
??ORA-02266: 表中的唯一/主鍵被啟用的外部關鍵字引用?
??delete from YJ_FDQYCWZB;
??--12 rows deleted
??結論:
??truncate 不能夠用于刪除父表中的數據,delete則可以在滿足外鍵約束的情況下刪除父表中的數據。
?????????? 2.2.2 導入可能存在的問題
??imp
ies/oracle@orcl
tables=(YJ_FDKKX,YJ_FDQYCWYB,YJ_FDQYCWZB,YJ_FDQYDLSCQKB) file=c:\ies_tables20101009.dmp log=c:\ies_tables20101009_imp.log ignore=y
??導入時要注意表之間的外鍵關系,需要先導父表,再導子表
??imp
ies/oracle@orcl
tables=(YJ_FDKKX,YJ_FDQYCWZB,YJ_FDQYCWYB,YJ_FDQYDLSCQKB) file=c:\ies_tables20101009.dmp log=c:\ies_tables20101009_imp.log ignore=y
??導入時即使注意到表之間的外鍵關系,需要先導父表,再導子表,同樣導子表時也會提示違反完整性約束,即導入的順序由導出順序決定。
??imp
ies/oracle@orcl
tables=(YJ_FDQYCWYB) file=c:\ies_tables20101009.dmp log=c:\ies_tables20101009_imp.log ignore=y
??導入子表時提示違反完整性約束,可以二次單獨導入子表,導入正常。
?????????? 2.2.3 導入問題的處理
??調整導出順序:先導父表,再導子表
??exp
ies/oracle@orcl
tables=(YJ_FDKKX,YJ_FDQYCWZB,YJ_FDQYCWYB,YJ_FDQYDLSCQKB) file=c:\ies_tables20101009.dmp log=c:\ies_tables20101009_exp.log compress=n direct=y
??imp
ies/oracle@orcl
tables=(YJ_FDKKX,YJ_FDQYCWZB,YJ_FDQYCWYB,YJ_FDQYDLSCQKB) file=c:\ies_tables20101009.dmp log=c:\ies_tables20101009_imp.log ignore=y
??導入正常。
?2.3 總結
??????????????? 對表的導出導入不像對用戶的導出導入那樣穩定,主要是因為表之間存在著外鍵關系,表中字段也存在著約束,還有唯一索引的約束。
??????????????? 對于導入實在困難時可以考慮數據優先,即先刪除或失效這些約束,導入數據后,再重建或啟用這些約束;在重建或啟用些約束時,如果數據不滿足條件,需要具體考慮數據的修復問題。將約束失效的操作包括將相關觸發器失效和將外鍵約束失效。
3.直接路徑插入
?直接路徑插入是通過已有表及表中數據構建新的表,
???????????? 該功能只能創建表結構及生成表中的數據,不能創建表的主鍵、外鍵、約束等
?create table YJ_FDKKX_temp as select * from YJ_FDKKX;
?create table YJ_FDQYCWYB_temp as select * from YJ_FDQYCWYB;
?create table YJ_FDQYCWZB_temp as select * from YJ_FDQYCWZB;
?create table YJ_FDQYDLSCQKB_temp as select * from YJ_FDQYDLSCQKB;
?commit;
4.sql*loader?
?4.1 sql*loader作用:用于將少量文本型數據加載到數據庫中(對于字符型、數字型該方法適用,對于日期型、大對象型不適用該方法)
?4.2 sql*loader命令:sqlldr scott/tiger control=ulcase6.ctl log=ulcase6.log direct=true;?
??????? 4.3 ulcase6.ctl是控制文件,需要手工編寫,分為兩種情況:
??????????? 4.3.1 將數據一起寫在控制文件中
?????? load data
?????? infile *
?????? insert into table scott.dept?
??????? fields terminated by ',' optionally enclosed by '"'
??????? (deptno,dname,loc)
?????? begindata
??????? 10,account,new york
??????? 20,research,dallas
??????? 30,sales,chigago
??????????? 4.3.2 數據文件與控制文件分開(ulcase6.dat是數據文件)
?????? load data
?????? infile 'ulcase6.dat'
?????? insert into table emp
??????? (empno position(01:04) integer external nullif empno=blanks,...)
??????? 4.4 限制
???????????? 4.4.1 sql*loader? insert 時表必須為空。
????sqlldr
ies/oracle@orcl
control=C:\temp\YJ_FDQYCWYB_TEMP.ctl log=C:\temp\YJ_FDQYCWYB_TEMP.log direct=true;
????sql*loader? insert 時表必須為空。
????delete from YJ_FDQYCWYB_TEMP;
????commit;
???????????? 4.4.2 sql*loader 只能將少量文本型數據加載到數據庫中,不能處理日期類型
????sqlldr
ies/oracle@orcl
control=C:\temp\YJ_FDQYCWYB_TEMP.ctl log=C:\temp\YJ_FDQYCWYB_TEMP.log direct=true;
????表 YJ_FDQYCWYB_TEMP 的列 CDATE 出現錯誤。
????ORA-01861: 文字與格式字符串不匹配
????select cdate from YJ_FDQYCWYB where id='375E892B4D0F4B8081D61C518A14E6C2'
????2010-12-1
????update YJ_FDQYCWYB set cdate=2010-12-1 where id='375E892B4D0F4B8081D61C518A14E6C2';
??????? 4.5 總結
??????????? sql*loader 不能加載日期類型導致其處理功能十分有限,且整理控制文件和數據文件也相對比較麻煩,一般不建議使用。
???????????
5.將execl中數據導入到oracle中
? 步驟:
??? 1.生成execl文件
????????? 對于不存在的數據:手動編輯execl文件;
????????? 對于數據庫中存在的數據:在pl/sql developer的sql windows 窗口查詢數據,并copy to Execl,刪除首列行序號的信息,
????????????????????????????????? 如果某列被進行了科學計數法,則將該列選中,點格式-》單元格-》數字-》數值-》-1234 即可。
??? 2.把Excel文件另存為文本文件(制表符分隔)(*.txt)
??? 3.用pl/sql developer工具導入文本文件
????? 3.1 打開pl/sql developer->tools->Text Importer,選中要導入的文本文件,
????? 3.2 在data to oracle 中維護 用戶名、表名,在fields中可以看到文本文件中的列與數據字段進行了對應,對日期類型的屬性要單獨選中維護格式轉換
????? 3.3 但看到import與 import to Script 可以操作時,便可以用import將數據導入到數據庫中(切記:該按鈕只能點一次,多次點擊可能導致數據被重復導入);
????????? import to Script 不能直接將數據導入到數據庫中,而是生成insert 語句。建議生成insert語句,在執行insert語句可以加入spool記錄日志信息。
??? 4.總結:
????? pl/sql developer->tools->Text Importer工具封裝擴展了sql*loader的功能,解決了sql*loader只能導入文本型數據的限制。
????? pl/sql developer->tools->Text Importer工具可以實現單表的數據備份功能,為數據遷移提供的一種可選途徑(對于大對象仍需要單獨處理)。
????? 可以支持單獨導數據,不導表結構的功能,補充了exp導出表的缺陷。
?????
6.pl/sql developer工具用途(單獨導庫結構)
????? 1.pl/sql developer->tools->Export User Objects 導出整個用戶的所有對象(如果選中單個對象『如:表X_RY』,便可以導出單個對象的結構),將數據庫結構(導成腳本)????
????? 2.pl/sql developer->tools->Find Database Objects 查找數據庫對象
????? 3.pl/sql developer->tools->Compile invalid Objects 編譯對象(有效)
????? 4.pl/sql developer->tools->Compare User Objects?? 對比數據庫對象(適用于對比兩個數據庫中相同對象的區別)
????? 5.pl/sql developer->tools->Sessions?????????????? 看起來很有用,隨后研究
????? 6.pl/sql developer->tools->Export Tables????????? 導出表(1.oracle export 調用的oracle的exp命令,生成dmp文件。2.sql inserts 將表結構、約束、相關主鍵、外鍵、觸發器、及數據全部導出成腳本。3.pl/sql developer 導出文件是pde格式,pde格式文件只能在import tables-->pl/sql developer中使用,且沒有sql inserts功能強大,不建議使用。)
????? 7.pl/sql developer->tools->Import Tables 有三個窗口?? oracle import 選中oracle的dmp文件調用的oracle的imp命令;
???????????????????????????? sql inserts 選中*.sql文件,并執行該文件;pl/sql developer 需要選中pl/sql developer的導出文件(pde文件),*.dmp、*.sql文件均不能選擇。
????? 8.pl/sql developer->tools->Compare Table Data?? 對比表中數據(適用于對比兩個數據庫中相同表的數據的區別) 與4比較類似
7.自行構造抽數據的sql(單獨導數據)
??? 7.1 功能:將數據抽成insert語句,保存在文件中
??? 7.2 寫法(語句)
??set heading off;
??spool c:\temp\6-data.sql;
??select 'insert into TX_BMZJ (ID,MC,SJBM,ZZLJ,XTML) values ('''||ID||''','''||MC||''','''||SJBM||''','''||ZZLJ||''','''||XTML||''');' from TX_BMZJ;
??select 'insert into TX_RY (ID,MC,XB,ZW,BGDH,YDDH,QYMC,SSMB) values ('''||ID||''','''||MC||''','''||XB||''','''||ZW||''','''||BGDH||''','''||YDDH||''','''||QYMC||''','''||SSMB||''');' from TX_RY;
??select 'insert into XT_BM (ID,FID,MC,BZ) values ('''||ID||''','''||FID||''','''||MC||''','''||BZ||''');' from XT_BM;
??select 'insert into XT_JS (ID,MC,BZ) values ('''||ID||''','''||MC||''','''||BZ||''');' from XT_JS;
??select 'insert into XT_XTCS (ID,FZM,CSM,CSZ,BZ) values ('''||ID||''','''||FZM||''','''||CSM||''','''||CSZ||''','''||BZ||''');' from XT_XTCS;
??spool off;
??set heading on;
?7.3 限制
???? 必須清楚表結構,需要手工構造,生成的文件中包含沒有用的信息
?7.4 總結
???? 正在試圖通過存貯過程將手工構造的限制取消掉。
????
8.對于大對象的單獨導入、導出
?oracle操作文件
9.建數據庫連接并同步數據
???? 9.1 建數據庫連接
??create database link ies207 connect to "ies" identified by "ies2010"? using 'ies207';
???? 9.2 用A數據庫同步B數據中的表的數據
--??select * from
ies.yj_dmxxrb@ies207
where rownum<3;
--??select * from yj_dmxxrb where rownum<3;
??delete from
ies.yj_dmxxrb@ies207
;
??insert into
ies.yj_dmxxrb@ies207
(ID,DCID,ZZJRL,JZGC,FDL,GML,HML,DMKC,KYTS,QMTJTS,QMTJRL,CDATE ) select ID,DCID,ZZJRL,JZGC,FDL,GML,HML,DMKC,KYTS,QMTJTS,QMTJRL,CDATE? from yj_dmxxrb;
??? 9.3 限制
??drop table
ies.yj_dmxxrb@ies207
;
??create table
ies.yj_dmxxrb@ies207
as select * from yj_dmxxrb;
??ORA-02021: 不允許對遠程數據庫進行 DDL 操作
?? 9.4 總結
??????? 對于多個數據庫而言數據庫連接是很有效的,
??????? 對于復雜的功能可以用存貯過程同步,再用job定時觸發。
10. 可傳輸的表空間
?
知識點:
1.mstsc 遠程連接
? regedit 注冊表
? regsvr32 /s AUTOMENU.DLL 注冊dll
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
