邏輯備份中的EXP/IMP備份


一、備份方式分類

 邏輯備份提取數據庫的數據內容,而不是備份數據塊;物理備份是拷貝整個的數據文件。

 

二、備份策略

 

三、邏輯備份與恢復

1、三種模式

a、用戶模式:導出用戶所有對象以及對象中的數據

b、表模式:導出用戶所有表或指定的表

c、整個數據庫:導出數據庫的所有對象

 

2、exp/imp和expdp/impdp的區別

a、imp只適用於exp導出的文件,不適用於expdp導出的文件;impdp只是用與expdp導出的文件,不適用於exp導出的文件。

b、exp和imp工具是傳統的導出和導入,在10g之前使用;10g后提供數據泵expdp和impdp工具

c、exp和imp是客戶端工具程序,既可以在客戶端也可以在服務器端使用(即電腦上有數據庫的服務器端,或者擁有遠程服務器的TNSNAME),效率低;expdp和impdp是服務端的工具程序,只能在服務端使用(電腦上要有數據庫的服務器端),效率高。

 

3、exp

查看相關參數講解

exp help=y

 

a、常用相關參數項

USERID              --用戶名/口令
FULL                --導出整個文件
BUFFER              --數據緩沖區的大小
OWNER               --導出指定的所有者用戶名列表
FILE                --輸出文件
TABLE               --導出指定的表名列表
GRANTS              --導出權限
ROWS                --導出數據行
LOG --屏幕輸出的日志文件
INDEXES --導出索引
INCTYPE --增量導入導出類型,有complete(默認,完全增量導出,全備)、cumulative(累積型增量導出,導出自上次完全增量導出后變化的數據)、incremental(增量型增量導出,導出上一次備份后變化的結果)三種
COMPRESS --是否壓縮導出的文件
FEEDBACK --顯示每x行的進度 TABLESPACES
--導出指定的表空間列表

 

b、查詢可以導出的數據庫

select account_status,username from dba_users order by 1;
--查看用戶狀態
--狀態是OPEN的用戶可以導出

 

這樣顯示不簡潔,可以通過SQL語句進行調整。

set linesize 300;
--修改顯示列數,set這三個英文字符占了3列
set pagesize 100;
--修改顯示行數
col col_name for a50;
--col_name列占50列,這里col_name=account_status或username,其中for相當於format

 

c、創建目錄

①首先在主機某目錄下創建一個實體文件夾(D盤下的expTest文件夾),用管理員身份登錄數據庫,創建邏輯目錄。

create directory expTest as 'D:\expTest';
--邏輯目錄是expTest,導出的文件存儲在D盤下的expTest目錄下
--如果沒有在主機下創建一個實體文件夾,會出現"exp-00028無法打開文件進行寫入"的警告,而且導出的文件也不知道在哪找

 

②查看管理員目錄

select * from dba_directories;

 

d、導出

(導入導出數據語句執行是在系統層面,而不是在數據庫層面)

①完全模式(整個數據庫)

EXP CMH/123456 FILE=D:\expTest\all.dmp log=D:\expTest\all.log FULL=Y;
--EXP USERID FILE=LOCATION.DMP LOG=LOCATION.LOG FULL=Y
--USERID=CMH/123456,CMH是用戶名,123456是密碼
--LOCATION.DMP=D:\expTest\all.dmp,LOCATION.LOG=D:\expTest\all.log,備份文件和日志保存在D盤expTest文件夾
--FULL=Y將整個數據庫全部導出,如果沒有full=y則將模式CMH下的所有數據庫對象
--(用戶與模式一一對應,用戶是用連接數據庫和訪問數據庫對象的,模式是管理對象的)

 

 

 出現EXP-00091問題,導出成功終止,但出現警告。查詢相關解答之后發現是“字符集不匹配”的原因。

select * from nls_database_parameters;
--查詢數據庫的字符集
--NLS_LANGUAGE指定服務器消息的語言,影響提示信息是中文還是英文
--NLS_TERRITORY指定服務器的日期和數字格式
--NLS_CHARACTERSET指定服務器的字符集
--也可用select * from v$nls_parameters;

 

查看主機環境變量的NLS_LANG。cmd輸入regedit,在HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_OraDb11g_home1

 

在命令窗口設置nls_lang與服務器保持一致,后導出成功且沒有警告

set nls_lang=american_america.al32utf8
--方法二:statistics=none顯示的不進行統計量導出;
--方法三:直接使用Data Pump工具

全導出出現EXP-00107錯誤原因:VirTual columns是ORACLE Database 11g開始支持的feature,傳統的exp和imp工具不支持

 

②用戶模式

EXP CMH/123456 FILE=D:\expTest\USER.DMP log=D:\expTest\user.log OWNER=(CMH,scott);
--EXP USERID FILE=LOCATION.DMP LOG=LOCATION.LOG OWNER=(USER);
--USERID=CMH/123456,CMH是用戶名,123456是密碼
--LOCATION.DMP=D:\expTest\USER.DMP,備份到D盤expTest文件夾下的USER.DMP文件
--OWNER=(CMH,scott);表示備份某用戶下的所有表

 

③表模式

EXP CMH/123456 FILE=D:\expTest\TABLES.DMP LOG=D:\expTest\table.log TABLES=(ACCU,ATEST);
--EXP USERID FILE=LOCATION.DMP OWNER=(TABLE1,TABLE2);
--USERID=CMH/123456,CMH是用戶名,123456是密碼
--LOCATION.DMP=D:\expTest\TABLES.DMP,備份到D盤expTest文件夾下的TABLES.DMP文件
--TABLES=(ACCU,ATEST);表示備份指定的ACCU\ATEST表

 

 

4、imp

查看相關參數項

imp help=y

 

a、常用相關參數項

USERID       --用戶名/口令
FULL         --導入整個文件
BUFFER       --數據緩沖區大小
FILE         --輸入文件
FROMUSER --導入某用戶下的數據
TOUSER --將FROMUSER用戶下的數據導到TOUSER用戶下 TABLES
--需要導入的表名列表 COMMIT --提交數組插入 ROWS --導入數據行 LOG --屏幕輸出的日志文件

b、導入

imp cmh/123456 file=D:\expTest\all.dmp log=D:\expTest\imp-all.log full=y;

 執行之后會出現錯誤IMP-00015:由於對象已存在,下列語句失敗

這是因為庫里面已經有該用戶和該表,導入不會覆蓋原來的對象,可以將用戶刪除之后再導入,但是full=y是全導入,刪除所有用戶很難實現,可以刪除某用戶之后再導入該用戶

drop user cmh cascade;
--刪除用戶cmh
create user cmh identified by 123456;
--創建用戶cmh
grant create session to cmh;
--給用戶cmh授權create session權限
imp cmh/123456 file=D:\expTest\all.dmp log=D:\expTest\imp-all.log fromuser=cmh
--如果后面是用戶名就不要加上 ; 分號,否則會出現IMP-00034:警告:在導出文件中未找到 FromUser "CMH;"

導入特定用戶之后會出現IMP-00013: 只有 DBA 才能導入由其他 DBA 導出的文件

解決方法是grant  dba to cmh

 

參考連接:完全備份、差異備份以及增量備份1

                 完全備份、差異備份以及增量備份2

                 邏輯備份exp/imp方式1

                 邏輯備份exp/imp方式2

                 邏輯備份exp/imp方式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM