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%'"
imp(數據導入)
expdp/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;
該值設置后只對后面新增的表產生作用,對之前建立的空表不起作用。該值設置后只對后面新增的表產生作用,對之前建立的空表不起作用。