Expdp導出數據
1:查看現有的邏輯備份目錄
SQL> col DIRECTORY_PATH for a50
SQL> set linesize 300
SQL> select * from dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------------------ ------------------------------ --------------------------------------------------
SYS DUMP_DIR /home/dump
SYS XMLDIR /u01/oracle/11g/rdbms/xml
SYS ORACLE_OCM_CONFIG_DIR /u01/oracle/11g/ccr/hosts/dg-master/state
SYS DATA_PUMP_DIR /u01/oracle/admin/orcl/dpdump/
SYS ORACLE_OCM_CONFIG_DIR2 /u01/oracle/11g/ccr/state
2:自定導出的物理目錄
[root@mail ~]# cd /home
[root@mail home]# mkdir backup
[root@mail home]# ls -l
total 72
drwxr-xr-x. 2 oracle oinstall 4096 May 9 16:28 archivelog
drwxr-xr-x. 2 root root 4096 Sep 21 11:48 backup
-rw-r--r--. 1 oracle oinstall 1572 Jun 28 17:50 crs.txt
[root@mail home]# chown oracle:oinstall backup
[root@mail home]# ls -l
total 72
drwxr-xr-x. 2 oracle oinstall 4096 May 9 16:28 archivelog
drwxr-xr-x. 2 oracle oinstall 4096 Sep 21 11:48 backup
-rw-r--r--. 1 oracle oinstall 1572 Jun 28 17:50 crs.txt
3:創建oracle導出的邏輯目錄並給導出用戶服務讀寫權限
SQL> create directory backup as '/home/backup';
Directory created.
SQL> grant write,read on directory backup to test;
Grant succeeded.
SQL> set linesize 300
SQL> col DIRECTORY_PATH for a50
SQL>select * from dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------------------ ------------------------------ --------------------------------------------------
SYS BACKUP /home/backup
SYS DUMP_DIR /home/dump
SYS XMLDIR /u01/oracle/11g/rdbms/xml
SYS ORACLE_OCM_CONFIG_DIR /u01/oracle/11g/ccr/hosts/dg-master/state
SYS DATA_PUMP_DIR /u01/oracle/admin/orcl/dpdump/
SYS ORACLE_OCM_CONFIG_DIR2 /u01/oracle/11g/ccr/state
4:用expdp導出test這個schema的數據
[oracle@mail ~]$ expdp test/test schemas=test directory=BACKUP dumpfile=test.dmp logfile=test.log
******************************************************************************
Dump file set for TEST.SYS_EXPORT_SCHEMA_01 is:
/home/backup/test.dmp
Job "TEST"."SYS_EXPORT_SCHEMA_01" successfully completed at Thu Sep 21 11:59:08 2017 elapsed 0 00:01:00
查看備份文件
[root@mail backup]# ls
test.dmp test.log
Impdp導入數據
1:創建導入目錄和導入的目標用戶
[root@mail home]# mkdir impdpdir
[root@mail impdpdir]# pwd
/home/impdpdir
[root@mail impdpdir]# chown oracle:oinstall /home/impdpdir
SQL> create directory imp_dir as '/home/impdpdir';
Directory created.
SQL> create user test2 identified by test2;
User created.
SQL> grant dba to test2;
Grant succeeded.
SQL> grant write,read on directory imp_dir to test2;
Grant succeeded.
2:查詢源數據庫test用戶的表空間
SQL> select tablespace_name from user_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
TBS_ODS
6 rows selected.
4:計算表空間的使用大小(導入的庫建立對應的表空間或者給remap的表空間添加對應大小的數據文件)
select b.file_id 文件ID號,
b.tablespace_name 表空間名,
b.bytes / 1024 / 1024 || 'M' 字節數,
(b.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024 || 'M' 已使用,
sum(nvl(a.bytes, 0)) / 1024 / 1024 || 'M' 剩餘空間,
100 - sum(nvl(a.bytes, 0)) / (b.bytes) * 100 佔用百分比
from dba_free_space a, dba_data_files b
where a.file_id = b.file_id
group by b.tablespace_name, b.file_id, b.bytes
order by b.file_id;
3:imp導入數據(我這裏使用remap_tablespace參數把所有的表重指定到users,因爲一個users數據文件最大擴展到32G。所以在這沒有給users添加數據文件)
[oracle@mail backup]$ cd /home/impdpdir/
[oracle@mail impdpdir]$ ls
test.dmp
[oracle@mail impdpdir]$ impdp test2/test2 remap_schema=test:test2 dumpfile=test.dmp directory=imp_dir logfile=imp.log
報錯
ORA-39083: Object type JOB failed to create with error:
ORA-00001: unique constraint (SYS.I_JOB_JOB) violated
Job導入失敗(這是因爲我測試本地導入本地另外一個用戶)
跳過job導入
SQL> drop user test2 cascade;
User dropped.
SQL> create user test2 identified by test;
User created.
SQL> grant write,read on directory imp_dir to test2;
Grant succeeded.
[oracle@mail impdpdir]$ impdp test2/test2 remap_schema=test:test2 dumpfile=test.dmp directory=imp_dir logfile=imp.log table_exists_action=replace exclude=job
ORA-31684: Object type USER:"TEST2" already exists(此問題可以忽略,因爲我們在導入之前已經創建了test2用戶。)
導入導出完畢。Expdp/impdp較之imp/exp的方式更爲靈活,只是需要手工建數據文件或者表空間
重定向表空間爲Remap_tablespaces=tbs1:users,tbs2:users,tbs3:users .....