exp/imp詳解

1、基本命令
1. 獲取幫助
$ exp help=y
$ imp help=yhtml


2.三種工做方式數據庫

(1)交互式方式windows

$ exp 直接回車 ,而後按提示按唄oracle

(2)命令行方式app

$exp username/passwd@dbname file=/u01/backup/xxx.dmp full=yide

(3)參數文件方式函數

$exp parfile=xxx.parspa

參數文件操作系統

userid=username/passwd命令行

buffer=8192000
compress=n
grants=y
file=/oracle/test.dmp
full=y


3.三種模式

(1)表方式,將指定表的數據導出/導入。

導出:
導出一張或幾張表:
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1,table2
導出某張表的部分數據
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1 query=\」where col1=\’…\’
and col2 \<…\」
導入:
導入一張或幾張表
$ imp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1,table2 fromuser=dbuser
touser=dbuser2 commit=y ignore=y


(2)用戶方式,將指定用戶的全部對象及數據導出/導入。
導出:
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log owner=(xx,yy)
只導出數據對象,不導出數據(rows=n )
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log owner=user rows=n
導入:
$ imp user/pwd file=/dir/xxx.dmp log=xxx.log fromuser=dbuser touser=dbuser2
commit=y ignore=y

(3)全庫方式,將數據庫中的全部對象導出/導入
導出:
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log full=y commit=y ignore=y
導入:
$ imp user/pwd file=/dir/xxx.dmp log=xxx.log fromuser=dbuser touser=dbuser2


2、高級選項

一、分割成多個文件

以多個固定大小文件方式導出:這種作法一般用在表數據量較大,單個dump 文件可能
會超出文件系統的限制的狀況
$ exp user/pwd file=1.dmp,2.dmp,3.dmp,… filesize=1000m log=xxx.log full=y
以多個固定大小文件方式導入
$ imp user/pwd file=1.dmp,2.dmp,3.dmp,… filesize=1000m tables=xxx fromuser=dbuser
touser=dbuser2 commit=y ignore=y


2. 增量導出/導入
// oracle 9i 之後exp 再也不支持inctype
必須爲 SYS 或SYSTEM 纔可執行增量導出導入
增量導出: 包括三個類型:
(1)「徹底」增量導出(Complete) // 備份整個數據庫
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=complete
(2)「增量型」增量導出導出上一次備份後改變的數據。
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=incremental
(3) 「累計型」增量導出(Cumulative) 只導出自上次「徹底」導出以後數據庫中變化
了的信息。
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=cumulative
增量導入:
$ imp usr/pwd FULL=y inctype=system/restore/inctype
其中:
SYSTEM: 導入系統對象
RESTORE: 導入全部用戶對象


3. 以SYSDBA進行導出/導入

$ imp \’usr/pwd@instance as sysdba\’ tablespaces=xx transport_tablespace=y
file=xxx.dmp datafiles=xxx.dbf
$ imp file=expdat.dmp userid=」」」sys/password as sysdba」」」 transport_tablespace=y
「datafile=(c:tempapp_data,c:tempapp_index)」


4. 表空間傳輸 (速度快)

空間傳輸是8i 新增長的一種快速在數據庫間移動數據的一種辦法,是把一個數
據庫上的格式數據文件附加到另一個數據庫中,而不是把數據導出成dmp 文件,這
在有些時候是很是管用的,由於傳輸表空間移動數據就象複製文件同樣快。
1.關於傳輸表空間有一些規則(10g前):
源數據庫和目標數據庫必須運行在相同的硬件平臺上。

源數據庫與目標數據庫必須使用相同的字符集。
源數據庫與目標數據庫必定要有相同大小的數據塊
目標數據庫不能有與遷移表空間同名的表空間
SYS的對象不能遷移
必須傳輸自包含的對象集
有一些對象,如物化視圖,基於函數的索引等不能被傳輸
(同字節序文件的跨平臺能夠用更換數據文件的文件頭的方法)
(10g 支持跨平臺的表空間傳輸,只要操做系統字節順序相同,就能夠進行表空間
傳輸。須要使用RMAN 轉換文件格式,略)
2. 檢測一個表空間是否符合傳輸標準的方法:
SQL > exec sys.dbms_tts.transport_set_check(‘tablespace_name’,true);
SQL > select * from sys.transport_set_violations;
若是沒有行選擇,表示該表空間只包含表數據,而且是自包含的。對於有些非自包
含的表空間,如數據表空間和索引表空間,能夠一塊兒傳輸。


3. 簡要使用步驟:
若是想參考詳細使用方法,也能夠參考ORACLE 聯機幫助。
1.設置表空間爲只讀(假定表空間名字爲APP_Data 和APP_Index)
SQL > alter tablespace app_data read only;
SQL > alter tablespace app_index read only;
2.發出EXP 命令
SQL> host exp userid=」」」sys/password as sysdba」」」 transport_tablespace=y
tablespaces=(app_data, app_index)
以上須要注意的是
·爲了在SQL中執行EXP,USERID 必須用三個引號,在UNIX 中也必須注意
避免「/」的使用
·在816 和之後,必須使用sysdba 才能操做
·這個命令在SQL中必須放置在一行(這裏是由於顯示問題放在了兩行)
3.拷貝.dbf數據文件(以及.dmp 文件)到另外一個地點,即目標數據庫
能夠是cp(unix)或copy(windows)或經過ftp 傳輸文件(必定要在bin方式)
4.把本地的表空間設置爲讀寫
$ alter tablespace app_data read write;
$ alter tablespace app_index read write;
5.在目標數據庫附加該數據文件 (直接指定數據文件名)
(表空間不能存在,必須創建相應用戶名或者用fromuser/touser)
$ imp file=expdat.dmp userid=」」」sys/password as sysdba」」」
transport_tablespace=y datafiles=(「c:\app_data.dbf,c:\app_index.dbf」)
tablespaces=app_data,app_index tts_owners=hr,oe
6.設置目標數據庫表空間爲讀寫
$ alter tablespace app_data read write;
$ alter tablespace app_index read write;


總結的不錯,轉過來以做收藏查閱

出自:http://blog.sina.com.cn/s/blog_4e961b7d010103ef.html

相關文章
相關標籤/搜索