expdp/impdp導入導出數據

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;

 

 

3imp導入數據(我這裏使用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 .....

 

 

 

 

 

 

 

發佈了64 篇原創文章 · 獲贊 51 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章