Oracle備份與還原(實用版)


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能否連上。
 
 

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;

該值設置后只對后面新增的表產生作用,對之前建立的空表不起作用。該值設置后只對后面新增的表產生作用,對之前建立的空表不起作用。

 


免責聲明!

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



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