數(shù)據(jù)庫遷移、重組、備份、恢復(fù)可以有如下幾種處理方式:
1.導(dǎo)出、導(dǎo)入用戶
?1.1導(dǎo)出用戶
??exp
system/oracle@orcl
file=c:\ies20101009.dmp log=c:\ies20101009_exp.log owner=(ies) buffer=655000 compress=y
?1.2導(dǎo)入用戶
??connect
system/oracle@orcl
;
??--刪除用戶--
??drop user ies cascade;
??--刪除表空間--
??drop tablespace iests including contents;
??--創(chuàng)建表空間--
??create tablespace iests datafile 'D:\oracle\oradata\orcl\iests.dbf' size 200m reuse autoextend on next 50m;
??--創(chuàng)建用戶并授權(quán)--
??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;
??--導(dǎo)入dmp--
??imp
system/oracle@orcl
fromuser=(ies) touser=(ies) buffer=655000 ignore=y file=c:\ies20101008.dmp log=c:\ies20101008_imp.log
?1.3總結(jié)
?????????? 導(dǎo)出、導(dǎo)入用戶的操作是備份、恢復(fù)的主要方法,該方法非常穩(wěn)定,一般不會(huì)產(chǎn)生異常或報(bào)錯(cuò)的信息。
?????????? 需要注意的是在oracle不同版本之間備份和恢復(fù)時(shí),導(dǎo)入、導(dǎo)出需要是同一個(gè)版本的數(shù)據(jù)庫,即需要將10g的數(shù)據(jù)庫備份到9i時(shí),需要用9i的客戶端連接10g的數(shù)據(jù)庫進(jìn)行導(dǎo)出,然后在用9i進(jìn)行導(dǎo)入。
導(dǎo)入、導(dǎo)出常遇到的問題有:1.字符集不匹配,一般使用NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK,2.客戶端版本不對(duì),10.0.2.0.1不能導(dǎo)入到10.0.2.0.3的數(shù)據(jù)庫中。
在數(shù)據(jù)庫恢復(fù)時(shí)(導(dǎo)入),需要停止web服務(wù),是數(shù)據(jù)庫處于不被連接的狀態(tài),否則用戶刪除時(shí)報(bào)錯(cuò),不能被刪除。
如果不刪除用戶,只刪除表空間,將導(dǎo)致用戶下的object不能被刪除(object包括function,procedure,synonym,package,Javasource,javaclass等),同樣object不能被導(dǎo)入。
2.導(dǎo)出、導(dǎo)入表
?2.1 導(dǎo)出表
??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 導(dǎo)入表
??????????? 2.2.1 刪除表中數(shù)據(jù)(是否需要?jiǎng)h除表中數(shù)據(jù)需要依據(jù)實(shí)際情況而定)
??truncate table YJ_FDKKX;
??truncate table YJ_FDQYCWYB;
??truncate table YJ_FDQYCWZB;
??truncate table YJ_FDQYDLSCQKB;
??提示:
??truncate table YJ_FDQYCWZB;
??ORA-02266: 表中的唯一/主鍵被啟用的外部關(guān)鍵字引用?
??delete from YJ_FDQYCWZB;
??--12 rows deleted
??結(jié)論:
??truncate 不能夠用于刪除父表中的數(shù)據(jù),delete則可以在滿足外鍵約束的情況下刪除父表中的數(shù)據(jù)。
?????????? 2.2.2 導(dǎo)入可能存在的問題
??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
??導(dǎo)入時(shí)要注意表之間的外鍵關(guān)系,需要先導(dǎo)父表,再導(dǎo)子表
??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
??導(dǎo)入時(shí)即使注意到表之間的外鍵關(guān)系,需要先導(dǎo)父表,再導(dǎo)子表,同樣導(dǎo)子表時(shí)也會(huì)提示違反完整性約束,即導(dǎo)入的順序由導(dǎo)出順序決定。
??imp
ies/oracle@orcl
tables=(YJ_FDQYCWYB) file=c:\ies_tables20101009.dmp log=c:\ies_tables20101009_imp.log ignore=y
??導(dǎo)入子表時(shí)提示違反完整性約束,可以二次單獨(dú)導(dǎo)入子表,導(dǎo)入正常。
?????????? 2.2.3 導(dǎo)入問題的處理
??調(diào)整導(dǎo)出順序:先導(dǎo)父表,再導(dǎo)子表
??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
??導(dǎo)入正常。
?2.3 總結(jié)
??????????????? 對(duì)表的導(dǎo)出導(dǎo)入不像對(duì)用戶的導(dǎo)出導(dǎo)入那樣穩(wěn)定,主要是因?yàn)楸碇g存在著外鍵關(guān)系,表中字段也存在著約束,還有唯一索引的約束。
??????????????? 對(duì)于導(dǎo)入實(shí)在困難時(shí)可以考慮數(shù)據(jù)優(yōu)先,即先刪除或失效這些約束,導(dǎo)入數(shù)據(jù)后,再重建或啟用這些約束;在重建或啟用些約束時(shí),如果數(shù)據(jù)不滿足條件,需要具體考慮數(shù)據(jù)的修復(fù)問題。將約束失效的操作包括將相關(guān)觸發(fā)器失效和將外鍵約束失效。
3.直接路徑插入
?直接路徑插入是通過已有表及表中數(shù)據(jù)構(gòu)建新的表,
???????????? 該功能只能創(chuàng)建表結(jié)構(gòu)及生成表中的數(shù)據(jù),不能創(chuàng)建表的主鍵、外鍵、約束等
?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作用:用于將少量文本型數(shù)據(jù)加載到數(shù)據(jù)庫中(對(duì)于字符型、數(shù)字型該方法適用,對(duì)于日期型、大對(duì)象型不適用該方法)
?4.2 sql*loader命令:sqlldr scott/tiger control=ulcase6.ctl log=ulcase6.log direct=true;?
??????? 4.3 ulcase6.ctl是控制文件,需要手工編寫,分為兩種情況:
??????????? 4.3.1 將數(shù)據(jù)一起寫在控制文件中
?????? 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 數(shù)據(jù)文件與控制文件分開(ulcase6.dat是數(shù)據(jù)文件)
?????? 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 時(shí)表必須為空。
????sqlldr
ies/oracle@orcl
control=C:\temp\YJ_FDQYCWYB_TEMP.ctl log=C:\temp\YJ_FDQYCWYB_TEMP.log direct=true;
????sql*loader? insert 時(shí)表必須為空。
????delete from YJ_FDQYCWYB_TEMP;
????commit;
???????????? 4.4.2 sql*loader 只能將少量文本型數(shù)據(jù)加載到數(shù)據(jù)庫中,不能處理日期類型
????sqlldr
ies/oracle@orcl
control=C:\temp\YJ_FDQYCWYB_TEMP.ctl log=C:\temp\YJ_FDQYCWYB_TEMP.log direct=true;
????表 YJ_FDQYCWYB_TEMP 的列 CDATE 出現(xiàn)錯(cuò)誤。
????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 總結(jié)
??????????? sql*loader 不能加載日期類型導(dǎo)致其處理功能十分有限,且整理控制文件和數(shù)據(jù)文件也相對(duì)比較麻煩,一般不建議使用。
???????????
5.將execl中數(shù)據(jù)導(dǎo)入到oracle中
? 步驟:
??? 1.生成execl文件
????????? 對(duì)于不存在的數(shù)據(jù):手動(dòng)編輯execl文件;
????????? 對(duì)于數(shù)據(jù)庫中存在的數(shù)據(jù):在pl/sql developer的sql windows 窗口查詢數(shù)據(jù),并copy to Execl,刪除首列行序號(hào)的信息,
????????????????????????????????? 如果某列被進(jìn)行了科學(xué)計(jì)數(shù)法,則將該列選中,點(diǎn)格式-》單元格-》數(shù)字-》數(shù)值-》-1234 即可。
??? 2.把Excel文件另存為文本文件(制表符分隔)(*.txt)
??? 3.用pl/sql developer工具導(dǎo)入文本文件
????? 3.1 打開pl/sql developer->tools->Text Importer,選中要導(dǎo)入的文本文件,
????? 3.2 在data to oracle 中維護(hù) 用戶名、表名,在fields中可以看到文本文件中的列與數(shù)據(jù)字段進(jìn)行了對(duì)應(yīng),對(duì)日期類型的屬性要單獨(dú)選中維護(hù)格式轉(zhuǎn)換
????? 3.3 但看到import與 import to Script 可以操作時(shí),便可以用import將數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中(切記:該按鈕只能點(diǎn)一次,多次點(diǎn)擊可能導(dǎo)致數(shù)據(jù)被重復(fù)導(dǎo)入);
????????? import to Script 不能直接將數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中,而是生成insert 語句。建議生成insert語句,在執(zhí)行insert語句可以加入spool記錄日志信息。
??? 4.總結(jié):
????? pl/sql developer->tools->Text Importer工具封裝擴(kuò)展了sql*loader的功能,解決了sql*loader只能導(dǎo)入文本型數(shù)據(jù)的限制。
????? pl/sql developer->tools->Text Importer工具可以實(shí)現(xiàn)單表的數(shù)據(jù)備份功能,為數(shù)據(jù)遷移提供的一種可選途徑(對(duì)于大對(duì)象仍需要單獨(dú)處理)。
????? 可以支持單獨(dú)導(dǎo)數(shù)據(jù),不導(dǎo)表結(jié)構(gòu)的功能,補(bǔ)充了exp導(dǎo)出表的缺陷。
?????
6.pl/sql developer工具用途(單獨(dú)導(dǎo)庫結(jié)構(gòu))
????? 1.pl/sql developer->tools->Export User Objects 導(dǎo)出整個(gè)用戶的所有對(duì)象(如果選中單個(gè)對(duì)象『如:表X_RY』,便可以導(dǎo)出單個(gè)對(duì)象的結(jié)構(gòu)),將數(shù)據(jù)庫結(jié)構(gòu)(導(dǎo)成腳本)????
????? 2.pl/sql developer->tools->Find Database Objects 查找數(shù)據(jù)庫對(duì)象
????? 3.pl/sql developer->tools->Compile invalid Objects 編譯對(duì)象(有效)
????? 4.pl/sql developer->tools->Compare User Objects?? 對(duì)比數(shù)據(jù)庫對(duì)象(適用于對(duì)比兩個(gè)數(shù)據(jù)庫中相同對(duì)象的區(qū)別)
????? 5.pl/sql developer->tools->Sessions?????????????? 看起來很有用,隨后研究
????? 6.pl/sql developer->tools->Export Tables????????? 導(dǎo)出表(1.oracle export 調(diào)用的oracle的exp命令,生成dmp文件。2.sql inserts 將表結(jié)構(gòu)、約束、相關(guān)主鍵、外鍵、觸發(fā)器、及數(shù)據(jù)全部導(dǎo)出成腳本。3.pl/sql developer 導(dǎo)出文件是pde格式,pde格式文件只能在import tables-->pl/sql developer中使用,且沒有sql inserts功能強(qiáng)大,不建議使用。)
????? 7.pl/sql developer->tools->Import Tables 有三個(gè)窗口?? oracle import 選中oracle的dmp文件調(diào)用的oracle的imp命令;
???????????????????????????? sql inserts 選中*.sql文件,并執(zhí)行該文件;pl/sql developer 需要選中pl/sql developer的導(dǎo)出文件(pde文件),*.dmp、*.sql文件均不能選擇。
????? 8.pl/sql developer->tools->Compare Table Data?? 對(duì)比表中數(shù)據(jù)(適用于對(duì)比兩個(gè)數(shù)據(jù)庫中相同表的數(shù)據(jù)的區(qū)別) 與4比較類似
7.自行構(gòu)造抽數(shù)據(jù)的sql(單獨(dú)導(dǎo)數(shù)據(jù))
??? 7.1 功能:將數(shù)據(jù)抽成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 限制
???? 必須清楚表結(jié)構(gòu),需要手工構(gòu)造,生成的文件中包含沒有用的信息
?7.4 總結(jié)
???? 正在試圖通過存貯過程將手工構(gòu)造的限制取消掉。
????
8.對(duì)于大對(duì)象的單獨(dú)導(dǎo)入、導(dǎo)出
?oracle操作文件
9.建數(shù)據(jù)庫連接并同步數(shù)據(jù)
???? 9.1 建數(shù)據(jù)庫連接
??create database link ies207 connect to "ies" identified by "ies2010"? using 'ies207';
???? 9.2 用A數(shù)據(jù)庫同步B數(shù)據(jù)中的表的數(shù)據(jù)
--??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: 不允許對(duì)遠(yuǎn)程數(shù)據(jù)庫進(jìn)行 DDL 操作
?? 9.4 總結(jié)
??????? 對(duì)于多個(gè)數(shù)據(jù)庫而言數(shù)據(jù)庫連接是很有效的,
??????? 對(duì)于復(fù)雜的功能可以用存貯過程同步,再用job定時(shí)觸發(fā)。
10. 可傳輸?shù)谋砜臻g
?
知識(shí)點(diǎn):
1.mstsc 遠(yuǎn)程連接
? regedit 注冊(cè)表
? regsvr32 /s AUTOMENU.DLL 注冊(cè)dll
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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