比較常用的一些參數:
exp:導出(imp導入)常用的參數
icdmain/icd:當前用戶名和密碼(如:oracle默認用戶scott/tiger)
rows=y:具體的行
indexes=n:索引數
compress=n:壓縮數
buffer=65536 :緩存數
file=exp_icdmain_csd_yyyymmdd.dmp:導出數存放地址和文件名(你自己定義導出的文件叫什么名字,隨意)
log:exp_icdmain_csd_yyyymmdd.log:導出日志文件名(也是自己定義)
tables:你要導出的表(如:emp,dept可以導一張表,也可以同時導出多表)
注意:這些關鍵詞不是說要全部寫,比如要導出表,不需要寫索引數等其他東東了。
exp參數詳解:
以下表中為全部參數:
關鍵字 | 備注 |
USERID | 用戶名/口令 |
FULL | 導出整個文件 (N) |
BUFFER | 數據緩沖區的大小 |
OWNER | 所有者用戶名列表 |
FILE | 輸出文件 (EXPDAT.DMP) |
TABLES | 表名列表 |
COMPRESS | 導入一個范圍 (Y) |
RECORDLENGTH | IO 記錄的長度 |
GRANTS | 導出權限 (Y) |
INCTYPE | 增量導出類型 |
INDEXES | 導出索引 (Y) |
RECORD | 跟蹤增量導出 (Y) |
ROWS | 導出數據行 (Y) |
PARFILE | 參數文件名 |
CONSTRAINTS | 導出限制 (Y) |
CONSISTENT | 交叉表一致性 |
LOG | 屏幕輸出的日志文件 |
STATISTICS | 分析對象 (ESTIMATE) |
DIRECT | 直接路徑 (N) |
TRIGGERS | 導出觸發器 (Y) |
FEEDBACK | 顯示每 x 行 (0) 的進度 |
FILESIZE | 各轉儲文件的最大尺寸 |
QUERY | 選定導出表子集的子句 |
下列關鍵字僅用於可傳輸的表空間 | |
TRANSPORT_TABLESPACE | 導出可傳輸的表空間元數據 (N) |
TABLESPACES | 將傳輸的表空間列表 |
IMP參數詳解:
使用的格式是:IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
其中USERID是必須的且為第一個參數
關鍵字 | 備注 |
USERID | 用戶名/口令 |
FULL | 導入整個文件(N) |
BUFFER | 數據緩沖區大小 |
FROMUSER | 所有者用戶名列表 |
TOUSER | 用戶名列表 |
FILE | 輸入文件 (EXPDAT.DMP) |
SHOW | 只列出文件內容(N) |
TABLES | 表名列表 |
IGNORE | 忽略創建錯誤 (N) |
RECORDLENGTH | IO 記錄的長度 |
GRANTS | 導入權限 (Y) |
INCTYPE | 增量導入類型 |
INDEXES | 導入索引 (Y) |
COMMIT | 提交數組插入 (N) |
ROWS | 導入數據行 (Y) |
PARFILE | 參數文件名 |
LOG | 屏幕輸出的日志文件 |
CONSTRAINTS | 導入限制 (Y) |
DESTROY | 覆蓋表空間數據文件 (N) |
INDEXFILE | 將表/索引信息寫入指定的文件 |
SKIP_UNUSABLE_INDEXES | 跳過不可用索引的維護 (N) |
FEEDBACK | 每 x 行顯示進度 (0) |
TOID_NOVALIDATE | 跳過指定類型 ID 的驗證 |
FILESIZE | 每個轉儲文件的最大大小 |
STATISTICS | 始終導入預計算的統計信息 |
RESUMABLE | 在遇到有關空間的錯誤時掛起 (N) |
RESUMABLE_NAME | 用來標識可恢復語句的文本字符串 |
RESUMABLE_TIMEOUT | RESUMABLE 的等待時間 |
COMPILE | 編譯過程, 程序包和函數 (Y) |
STREAMS_CONFIGURATION | 導入流的一般元數據 (Y) |
STREAMS_INSTANTIATION | 導入流實例化元數據 (N) |
下列關鍵字僅用於可傳輸的表空間 | |
TRANSPORT_TABLESPACE | 導入可傳輸的表空間元數據 (N) |
TABLESPACES | 將要傳輸到數據庫的表空間 |
DATAFILES | 將要傳輸到數據庫的數據文件 |
TTS_OWNERS | 擁有可傳輸表空間集中數據的用戶 |
以上內容為表格描述,可以讓人一目了然,接下來用文字描述:
一、導出模式(三種模式)及命令格式
1、 全庫模式
exp 用戶名/密碼@網絡服務名 full=y file=路徑\文件名.dmp log=路徑\文件名.log
2、 用戶模式(一般情況下采用此模式)
exp 用戶名/密碼@網絡服務名 owners=(用戶1,用戶2,用戶3,…) file=路徑\文件名.dmp log=路徑\文件名.log
3、 表模式
exp 用戶名/密碼@網絡服務名 tables=(表名1,表名2,表名3,…)file=路徑\文件名.dmp log=路徑\文件名.log
4、 另外,還可以只導出某個表空間
exp 用戶名/密碼@網絡服務名 tablespaces=(表空間1,表空間2,表空間3,…) file=路徑\文件名.dmp log=路徑\文件名.log
二、導入模式(三種模式)及命令格式
1、 全庫模式
imp 用戶名/密碼@網絡服務名 full=y file=路徑\文件名.dmp log=路徑\ds110.log
2、 用戶模式(一般情況下采用此模式)
imp 用戶名/密碼@網絡服務名 file=路徑\文件名.dmp fromuser=導出的用戶名 touser=導入的用戶名 log=路徑\ds110.log
3、 表模式
imp 用戶名/密碼@網絡服務名 tables=(表名1,表名2,表名3,…)file=路徑\文件名.dmp fromuser=導出的用戶名 touser=導入的用戶名 log=路徑\ds110.log
4、 另外,還可以只導入某個表空間
imp 用戶名/密碼@網絡服務名 tablespaces=(表空間1,表空間2,表空間3,…) file=路徑\文件名.dmp fromuser=導出的用戶名 touser=導入的用戶名 log=路徑\ds110.log
三、導入的命令參數說明
USERID 用戶名/密碼
FULL 是否全庫導入 (Y 或 N),默認為 N
BUFFER 數據緩沖的大小
FROMUSER 導出的用戶列表,即導入文件是從哪個用戶導出的
TOUSER 導入的用戶列表,即要到哪個用戶中
FILE 導入文件,是dmp文件
SHOW 只列出文件內容 (Y 或 N) ,默認為 N
TABLES 要導入的表名列表
IGNORE 在導入過程中是否忽略錯誤 , 默認為 N
RECORDLENGTH 記錄的長度,默認為operating system-dependent
GRANTS 導入權限 (Y 或 N),默認為Y
INCTYPE 導入的類型是否為遞增(Y 或 N),默認為 N
INDEXES 導入索引 (Y 或 N) ,默認為Y
COMMIT 在導入過程中,是否導入一行數據,提交一行 (Y 或 N)默認為N,即在每個表導入后,進行提交
ROWS 導入行數據 (Y 或 N) ,默認為 Y
PARFILE 參數文件名
LOG 輸出的日志文件
DESTROY 是否覆蓋表空間上的數據文件 (Y 或 N) 默認為N
INDEXFILE 將表或索引信息寫到指定的文件中
CHARSET 導出文件的字符集,默認為 NLS_LANG
ANALYZE 在導入時執行ANALYZE語句 (Y 或 N) 默認為 Y
FEEDBACK 在導入時每個幾行顯示進度,默認為0
四、導出的命令參數說明
USERID 用戶名/密碼
FULL 是否全庫導入 (Y 或 N),默認為 N
BUFFER 數據緩沖的大小
OWNER 導出的用戶列表
FILE 導出文件,是dmp文件
TABLES 要導出的表名列表
COMPRESS 是否壓縮(Y 或 N), 默認為Y
RECORDLENGTH 輸入輸出記錄的長度,默認為operating system-dependent
GRANTS 導出權限 (Y 或 N),默認為Y
INCTYPE 導出的類型是否為遞增(Y 或 N),默認為 N
INDEXES 導出索引 (Y 或 N) ,默認為Y
RECORD 是否在系統SYS.INCEXP, SYS.INCFIL中記錄一個遞增或累計的導出(Y 或 N) , 默認為Y
ROWS 導出行數據 (Y 或 N) ,默認為 Y
PARFILE 參數文件名
CONSTRAINTS 是否導出約束,(Y 或 N) ,默認為 Y
CONSISTENT 在執行導出操作時是否加事務(Y 或 N),默認為 N
LOG 輸出的日志文件
STATISTICS 在導出時執行ANALYZE語句 (Y 或 N) 默認為 Y
DIRECT direct path (N)
FEEDBACK 在導出時每個幾行顯示進度,默認為0
五、導出的對象
1、 全庫模塊
可以導出除sys用戶擁有的所有數據庫對象,包括:表空間的定義、配置文件、用戶定義、角色、系統權限授權、角色授權、默認角色、resource costs、會滾段的定義、數據庫鏈接、虛列、所有目錄別名、所有外部函數庫、所有對象類型、所有簇定義;對於每個表,還可導出表使用的對象類型定義、表定義、表數據、嵌套表數據、表索引、表約束、表授權、分析表、列和表注釋、審核信息、所有引用的完整性約束、所有同義詞、所有視圖、所有存儲過程、包、函數、所有觸發器、分析簇、快照、job、all refresh groups and children
2、 用戶模塊
對象類型、數據庫鏈路、序列、簇定義,對於每個表,還可導出表使用的對象類型定義、表定義、表數據、嵌套表數據、表索引、表約束、表授權、分析表、列和表注釋、審核信息、屬於當前用戶的表所引用的完整性約束、同義詞、視圖、存儲過程、包、函數、觸發器、分析簇、快照、job、refresh groups
3、 表模式
可導出表使用的對象類型定義、表定義、表數據、嵌套表數據、表索引、表約束、表授權、分析表、列和表注釋、審核信息、表引用的完整性約束、觸發器,還可導出其他用戶擁有的觸發器、其他用戶用戶的索引
六、導入時的順序
1、 字符集
2、 表定義
3、 表數據
4、 表索引
5、 完整性約束、觸發器、bitmap索引
6、 視圖、函數、過程
7、 包
七、給你舉幾個栗子:
數據導出:
1、 將數據庫TEST完全導出,用戶名system 密碼manager 導出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2、 將數據庫中system用戶與sys用戶的表導出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3、 將數據庫中的表table1 、table2導出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4、 將數據庫中的表table1中的字段filed1以"00"打頭的數據導出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
上面是常用的導出,對於壓縮我不太在意,用winzip把dmp文件可以很好的壓縮。
不過在上面命令后面 加上 compress=y 就可以了
數據的導入
1、將D:\daochu.dmp 中的數據導入 TEST數據庫中。
imp system/manager@TEST file=d:\daochu.dmp
上面可能有點問題,因為有的表已經存在,然后它就報錯,對該表就不進行導入。
在后面加上 ignore=y 就可以了。
2 將d:\daochu.dmp中的表table1 導入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
基本上上面的導入導出夠用了。不少情況我是將表徹底刪除,然后導入。
八、對於備份數據庫而言:
備份某個用戶模式下的所有對象。業務數據庫通常采用這種備份方式。
若備份到本地文件,使用如下命令:
exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=exp_icdmain_yyyymmdd.dmp
log=exp_icdmain_yyyymmdd.log
若直接備份到磁帶設備,使用如下命令:
exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=/dev/rmt0
log=exp_icdmain_yyyymmdd.log
注:如果磁盤有空間,建議備份到磁盤,然后再拷貝到磁帶。如果數據庫數據量較小,可采用這種辦法備份。
導入時會出現的問題:
九、導入工具imp可能出現的問題
1、數據庫對象已經存在
一般情況, 導入數據前應該徹底刪除目標數據下的表, 序列, 函數/過程,觸發器等;數據庫對象已經存在, 按缺省的imp參數, 則會導入失敗;如果用了參數ignore=y, 會把exp文件內的數據內容導入;如果表有唯一關鍵字的約束條件, 不合條件將不被導入,如果表沒有唯一關鍵字的約束條件, 將引起記錄重復
2、 數據庫對象有主外鍵約束
這發生在將幾個包含表的DMP文件分別導入數據庫時,不符合主外鍵約束, 數據便會導入失敗;解決辦法: 先導入主表, 再導入依存表;disable目標
導入對象的主外鍵約束, 導入數據后, 再enable它們
3、 權限不夠
如果要把A用戶的數據導入B用戶下, 做導入操作的用戶需要有imp_full_database權限
4、 導入大表( 大於80M ) 時, 存儲分配失敗
默認的EXP時, compress = Y, 也就是把所有的數據壓縮在一個數據塊上,導入時, 如果不存在連續一個大數據塊, 則會導入失敗,導出80M以上的大
表時, 記得compress= N, 則不會引起這種錯誤.
5、 imp和exp使用的字符集不同
如果字符集不同, 導入會失敗, 可以改變unix環境變量或者NT注冊表里NLS_LANG相關信息,導入完成后再改回來.
6、 imp和exp版本不能往上兼容
imp可以成功導入低版本exp生成的文件, 不能導入高版本exp生成的文件
以下鏈接還有詳解,部分出自以下鏈接: https://www.cnblogs.com/iampkm/archive/2013/02/27/2934927.html