oracel數據導出導入
一、導出模式(三種模式)及命令格式
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、 當把數據加載到一張已存在的表中,必須使用參數IGNORE = Y
2、 如何在導出表時加入條件
Exp 用戶名/密碼@網絡服務名 file=路徑\文件名.dmp tables=(表名) query = \”條件\”
3、
八、全庫導入時包含的系統對象
配置文件profiles
公共數據庫鏈接
同義詞
角色
會滾段的定義
system audit options
系統權限
表空間定義
tablespace quotas
用戶定義
目錄別名
九、導入工具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生成的文件
十、 從一個賬戶導出,另一個賬戶導入
導出表模式示例:
1 從dbo_pwcdb 賬號導出 PRNBSN_CONTENTTEMPLATE,PRNBSN_RELINFOCONTENT 兩個表,不帶數據
exp dbo_pwcdb/dbo_pwcdb@BSY2-NQQX-IP50 file=d:\daochu_noData.dmp tables=
(PRNBSN_CONTENTTEMPLATE,PRNBSN_RELINFOCONTENT) rows=n;
2 導入 dbo_smydb 賬戶
imp dbo_smydb/dbo_smydb@BSY2-SMY-IP11 full=y file=d:\daochu_noData.dmp touser=dbo_smydb ignore=y;
十一、 借助PL/SQL Developer 工具 導出導入 觸發器,存儲過程,序列,索引等對象。
1 A賬戶登錄PL/SQL Developer 工具,在菜單中選擇 工具--->導出用戶對象
2 以導出存儲過程為示例,選擇如下圖:
在procedure 對象中,選擇需要導出的存儲過程對象,設置輸出文件名字,點擊導出。
3 如果在需要導入的oracle庫中,是同一個名字的賬戶,可以直接新建一個命令窗口,然後復制剛才導出fun_proc.sql的內容,粘貼到 命令窗口中,就自動執行了;相當於通過sql腳本進行導入;
如果需要導入的oracle庫中,是另外一個名字的賬戶,比如B賬戶。那麼需要打開fun_proc.sql 文件,查找所有A賬戶名全部替換為B賬戶,然後再用B賬戶登錄PL/SQL Developer 工具,新建命令窗口,粘貼文件內容,執行。
注意:生成的存儲過程名字會如下形式 Create procedure 賬戶A.存儲過程名 所以需要替換為 Create procedure 賬戶B.存儲過程名. 打開看下就明白了。
其他對象的導入參照存儲過程對象導入方式。