Oracle備份與還原
EXP和IMP是客戶端工具程式,它們既可以在客戶端使用,也可以在服務端使用,
EXPDP和IMPDP是服務端的工具程式,他們只能在ORACLE服務端使用,不能在客戶端使用,
IMP只適用于EXP匯出的檔案,不適用于EXPDP匯出檔案;IMPDP只適用于EXPDP匯出的檔案,而不適用于EXP匯出檔案,
expdp或impdp命令時,可暫不指出用戶名/密碼@實體名 as 身份,然后根據提示再輸入,如:
expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
exp/imp
在cmd的dos命令提示符下執行,而不是在sqlplus里面,但是格式一定要類似于:
Dos視窗連接Oracle
# 進入sqlplus提示符
sqlplus /nolog
-- 通過賬號登錄
connect scott/123456
-- 管理員
conn / as sysdba
-- 遠程連接
sqlplus usr/pwd@//host:port/sid
system/h1w2D3B4@//10.71.105.216:1526/i2kdb
-- 查看本用戶所有表,視圖等
select * from user_tab_comments;
imp/exp 用戶名/密碼@service_name或oracle_sid full=y file=C:\匯出檔案名稱.dmp ignore=y
imp 命令是在dos提示符下執行的,直接cmd后執行而不是在sql下執行的
exp(資料匯出)
在oracle賬號下直接使用,無須進入sqlplus模式
-- 將資料庫中system用戶與sys用戶的表匯出
exp wlj/wlj@orcl file=d:exportoracle.dmp owner=(system,sys)
-- 將資料庫中的表inner_notify、notify_staff_relat匯出
exp wlj/wlj@orcl file= d:exportoracle.dmp tables=(inner_notify,notify_staff_relat)
-- 將資料庫中的表table1中的欄位filed1以"00"打頭的資料匯出
exp wlj/wlj@orcl file=d:exportoracle.dmp tables=(table1) query=" where filed1 like '00%'"
上面是常用的匯出,對于壓縮,既用winzip把dmp檔案可以很好的壓縮,
也可以在上面命令后面 加上 compress=y 來實作,
Linux下該命令中的小括號比較敏感,需要加上雙引號
執行命令后如果報錯誤或寫錯誤,那就是oracle賬號對檔案夾沒有操作權限,切換到具有的權限檔案夾,匯出到該檔案夾下即可
imp(資料匯入)
1 將d:exportoracle.dmp 中的資料匯入 TEST資料庫中, imp wlj/wlj@orcl file=d:exportoracle.dmp full=y imp wlj/wlj@orcl full=y file=d:exportoracle.dmp ignore=y 如果出現問題,可能是因為有的表已經存在,然后它就報錯,對該表就不進行匯入, 在后面加上 ignore=y 就可以了, 2 將d:exportoracle.dmp中的表table1 匯入 imp wlj/wlj@orcl file=d:exportoracle.dmp tables=(table1) 注意:基本上上面的匯入匯出夠用了,不少情況要先是將表徹底洗掉,然后匯入, 注意:1、操作者要有足夠的權限,權限不夠它會提示, 2、資料庫是可以連上的,可以用tnsping orcl 來獲得資料庫orcl能否連上, 具體參考:https://www.cnblogs.com/1175429393wljblog/p/9529334.htmlexpdp/impdp
expdp(資料匯出)
1、創建邏輯目錄,該命令不會在作業系統創建真正的目錄,最好以sysdba等管理員身份創建,
本次操作為SQL
create directory dpdata1 as '/home/oracle/temp/dump';
注意:當前為邏輯目錄,所以需要自己在系統上新建一個對應的檔案目錄(oracle用戶可讀寫的檔案)
mkdir -p /home/oracle/temp/dump
2、查看管理員目錄
select * from dba_directories;
同時查看作業系統中該目錄是否存在,Oracle并不關心該目錄是否存在,如果不存在,則在匯出是會報錯
3、給用戶賦予在指定目錄的讀寫權限
最好以sysdba身份進行賦予
-- 給 market用戶賦予dpdata1 邏輯目錄的讀寫權限
grant read,write on directory dpdata1 to market;

4、匯出資料
1)按用戶匯出
expdp market/xxw12345w@orcl schemas=market dumpfile=expdpmarket.dmp DIRECTORY=dpdata1;
2)并行行程parallel
expdp market/xswewf1234@orcl dumpfile=expdpmarket.dmp DIRECTORY=dpdata1 parallel=40 job_name=market;
3) 按表名匯出
expdp market/xswewf1234@orcl tables=emp,dept dumpfile=expdpmarket.dmp DIRECTORY=dpdata1;
4)按查詢條件匯出
expdp market/xswewf1234@orcl dumpfile=expdpmarket.dmp DIRECTORY=dpdata1 tables=emp query='where deptno=12';
5)按照表空間匯出
expdp system/manager dumpfile=expdpmarket.dmp DIRECTORY=dpdata1 tablespaces=user,temp;
6)匯出整個資料庫
expdp system/manager dumpfile=expdpmarket.dmp DIRECTORY=dpdata1 full=y;
impdp(資料匯入)
1)按用戶匯入
impdp market/xxw12345w@orcl schemas=market dumpfile=expdpmarket.dmp DIRECTORY=dpdata1;
2)改變表的owner
impdp system/manager dumpfile=expdpmarket.dmp DIRECTORY=dpdata1 tables=scott.dept REMAP_SCHEMA=scott:system;
3)匯入表空間
impdp system/manager dumpfile=expdpmarket.dmp DIRECTORY=dpdata1 tablespaces=users;
4)匯入資料庫
impdp system/manager dumpfile=expdpmarket.dmp DIRECTORY=dpdata1 full=y;
5)追加資料
impdp system/manager dumpfile=expdpmarket.dmp DIRECTORY=dpdata1 schemas=market TABLE_EXISTS_ACTION;
資料泵impdp引數:
1.REMAP_DATAFILE
該選項用于將源資料檔案名轉變為目標資料檔案名,在不同平臺之間搬移表空間時需要該選項.
REMAP_DATAFILE=source_datafie:target_datafile
2.REMAP_SCHEMA
該選項用于將源方案的所有物件裝載到目標方案中.
REMAP_SCHEMA=source_schema:target_schema
3.REMAP_TABLESPACE
將源表空間的所有物件匯入到目標表空間中
REMAP_TABLESPACE=source_tablespace:target:tablespace
4.REUSE_DATAFILES
該選項指定建立表空間時是否覆寫已存在的資料檔案.默認為N
REUSE_DATAFIELS={Y | N}
5.SKIP_UNUSABLE_INDEXES
指定匯入是是否跳過不可使用的索引,默認為N
6,sqlfile 引數允許創建DDL 腳本檔案
impdp scott/tiger directory=dump_scott dumpfile=a1.dmp sqlfile=c.sql
默認放在directory下,因此不要指定絕對路徑
7.STREAMS_CONFIGURATION
指定是否匯入流元資料(Stream Matadata),默認值為Y.
8.TABLE_EXISTS_ACTION
該選項用于指定當表已經存在時匯入作業要執行的操作,默認為SKIP
TABBLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | REPLACE }
當設定該選項為SKIP時,匯入作業會跳過已存在表處理下一個物件;
當設定為APPEND時,會追加資料;
當設定為TRUNCATE時,匯入作業會截斷表,然后為其追加新資料;
當設定為REPLACE時,匯入作業會洗掉已存在表,重建表并追加資料;
注意,TRUNCATE選項不適用與簇表和NETWORK_LINK選項
注意:Oracle11G默認對空表不進行匯出
快速解決方法:直接給空表加上一條記錄即可
在sqlplus中,執行如下命令:
alter system set deferred_segment_creation=false;
查看:
show parameter deferred_segment_creation;
該值設定后只對后面新增的表產生作用,對之前建立的空表不起作用,該值設定后只對后面新增的表產生作用,對之前建立的空表不起作用,
無論風雨,和自己一決勝負吧
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/462966.html
標籤:Oracle
上一篇:MySQL 回表
