業務場景:
在工作中,涉及到oracle數據庫遷移,使用navicat等其他工具 容易報錯,一系列問題很麻煩,今天記錄一下操作流程及個人理解(文章參考了很多文檔和博客);
EXPDP數據導出
請自行修改目錄路徑和自定義的表名,否則出現錯誤很難查找~
一般expdp流程:
一、新建邏輯目錄
最好以system等管理員創建邏輯目錄,Oracle不會自動創建實際的物理目錄“D:\oracleData”(務必手動創建此目錄),僅僅是進行定義邏輯路徑dump_dir;
忘記sys用戶密碼的可以去下如何修改sys用戶密碼;
建議使用pl、navicat等oracle操作工具來操作;
登陸後sql執行:
create directory mydata as '邏輯目錄路徑';
例如:
create directory mydata as '/data/oracle/oradata/mydata';
二、查看邏輯目錄是否創建成功
執行sql:
sql>select * from dba_directories
三、用expdp導出數據
用法及解釋:
expdp 用戶名/密碼@ip地址/實例 [屬性]
ip地址不寫默認就是本地
userid=test/test --導出的用戶,本地用戶!!
directory=dmpfile --導出的邏輯目錄,一定要在oracle中創建完成的,並且給用戶授權讀寫權限
dumpfile=xx.dmp --導出的數據文件的名稱,如果想在指定的位置的話可以寫成dumpfile=/home/oracle/userxx.dmp
logfile=xx.log --日誌文件,如果不寫這個參數的話默認名稱就是export.log,可以在本地的文件夾中找到
schemas=userxx --使用dblink導出的用戶不是本地的用戶,需要加上schema來確定導出的用戶,類似於exp中的owner,但還有一定的區別
EXCLUDE=TABLE:"IN('T1','T2','T3')" --exclude 可以指定不導出的東西,table,index等,後面加上不想導出的表名
network_link=db_local --這個參數是使用的dblink來遠程導出,需要指定dblink的名稱
列出一些場景:
1)導出用戶及其對象
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp directory=dump_dir logfile=expdp.log;
2)導出指定表
expdp scott/tiger@orcl tables=emp,dept dumpfile=expdp.dmp directory=dump_dir logfile=expdp.log;
3)按查詢條件導
expdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp tables=empquery='where deptno=20' logfile=expdp.log;
4)按表空間導
expdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmp tablespaces=temp,example logfile=expdp.log;
5)導整個數據庫
expdp scott/[email protected]/orcl directory=dump_dir dumpfile=ly.dmp full=y logfile=expdp.log;
一般用的都是導出整個數據庫,本人使用的代碼:
//包含所有用戶的表、視圖、索引等
expdp JCPT/[email protected]/orcl directory=mydata dumpfile=ly.dmp full=y logfile=expdp.log;
//指定用戶的表、視圖、索引等
expdp JCPT/[email protected]/orcl directory=mydata schemas=jcpt dumpfile=ly.dmp logfile=expdp.log;
導出完成後:邏輯目錄生成了一個 dmp文件;
IMPDP數據導入
在正式導入數據前,要先確保要導入的用戶已存在,如果沒有存在,請先用下述命令進行新建用戶
流程:
一、創建表空間
使用system登錄oracle,執行sql
格式: create tablespace 表間名 datafile '數據文件名' size 表空間大小
create tablespace data_test datafile 'e:\oracle\oradata\test\test.dbf' size 2000M;
(*數據文件名 包含全路徑, 表空間大小 2000M 表是 2000兆)
二、創建用戶並授權
格式: create user 用戶名 identified by 密碼 default tablespace 表空間表;
create user study identified by study default tablespace data_test;
(*我們創建一個用戶名爲 study,密碼爲 study, 表空間爲 madate-這是在上一步建好的.)
授權給 用戶 study ,執行sql
#給用戶邏輯目錄讀寫權限
sql>grant read,write on directory mydata to study;
#給用戶表空間權限
sql>grant dba,resource,unlimited tablespace to study;
三、impdp導入
命令在cmd或者控制檯輸入,不是sql語句
寫法:
impdp 用戶名/密碼@ip地址/實例 [屬性]
ip地址不寫默認就是本地
註釋:
1)導入用戶(從用戶scott導入到用戶scott)
impdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp schemas=scott logfile=impdp.log;
2)導入表(從scott用戶中把表dept和emp導入到system用戶中)
impdp system/manager@orcl directory=dump_dir dumpfile=expdp.dmp tables=scott.dept,scott.emp remap_schema=scott:system logfile=impdp.log table_exists_action=replace (表空間已存在則替換);
3)導入表空間
impdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmp tablespaces=example logfile=impdp.log;
4)導入整個數據庫
impdb system/manager@orcl directory=dump_dir dumpfile=full.dmp full=y logfile=impdp.log;
日常使用的:
把用戶jcpt中所有的表導入到lyxt用戶下
impdp lyxt/[email protected]/orcl directory=mydata dumpfile=LY.DMP remap_schema=jcpt:lyxt logfile=ims20171122.log table_exists_action=replace
5)追加數據
impdp system/manager@orcl directory=dump_dir dumpfile=expdp.dmp schemas=systemtable_exists_action logfile=impdp.log;