10G数据泵可以单独导出JOB

SQL> CONN / AS SYSDBA
已连接。
SQL> CREATE USER JOBA IDENTIFIED BY JOBA;
用户已创建。
SQL> GRANT CONNECT,RESOURCE TO JOBA;
授权成功。
SQL> CONN JOBA/JOBA
已连接。
SQL> CREATE TABLE T AS SELECT * FROM USER_TABLES;
表已创建。
SQL> SELECT * FROM TAB;
TNAME                     TABTYPE          CLUSTERID
--------------------   ------------------ -------------- 
T                         TABLE
SQL> DECLARE
  2    jobid NUMBER;
  3  BEGIN
  4    FOR X IN 1..10 LOOP
  5      DBMS_JOB.SUBMIT(jobid,'NULL;',SYSDATE,'SYSDATE+1');
  6    END LOOP;
  7    COMMIT;
  8  END;
  9  /
PL/SQL 过程已成功完成。
SQL> COL WHAT FORMAT A20
SQL> COL PRIV_USER FORMAT A20
SQL> SELECT JOB,PRIV_USER,WHAT FROM USER_JOBS;
       JOB PRIV_USER            WHAT
---------- -------------------- --------------------
       161 JOBA                 NULL;
       162 JOBA                 NULL;
       163 JOBA                 NULL;
       164 JOBA                 NULL;
       165 JOBA                 NULL;
       166 JOBA                 NULL;
       167 JOBA                 NULL;
       168 JOBA                 NULL;
       169 JOBA                 NULL;
       170 JOBA                 NULL;
已选择10行。
现在开始导出JOBA用户里的所有JOB:

C:\>expdp joba/joba directory=data_pump_dir dumpfile=joba.dp include=job content=metadata_only  
Export: Release 10.2.0.1.0 - Production on 星期一, 18 1月, 2010 22:54:54
Copyright (c) 2003, 2005, Oracle.  All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
启动 "JOBA"."SYS_EXPORT_SCHEMA_01":  joba/******** directory=data_pump_dir dumpf
ile=joba.dp include=job
正在使用 BLOCKS 方法进行估计...
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 0 KB
处理对象类型 SCHEMA_EXPORT/JOB
已成功加载/卸载了主表 "JOBA"."SYS_EXPORT_SCHEMA_01"
******************************************************************************
JOBA.SYS_EXPORT_SCHEMA_01 的转储文件集为:
  C:\ORACLE\PRODUCT\10.2.0\DB_1\RDBMS\LOG\JOBA.DP
作业 "JOBA"."SYS_EXPORT_SCHEMA_01" 已于 22:55:05 成功完成。
此时删除JOBA用户下的所有JOB。
SQL> SHOW USER

USER 为 "JOBA"

SQL> CREATE PROCEDURE REMOVE_ALL_JOB
  2  IS
  3  BEGIN
  4    FOR X IN (SELECT JOB FROM USER_JOBS) LOOP
  5       DBMS_JOB.REMOVE(X.JOB);
  6    END LOOP;
  7    COMMIT;
  8  END;
  9  /
过程已创建。
SQL> EXEC REMOVE_ALL_JOB;
PL/SQL 过程已成功完成。
SQL>  SELECT JOB,PRIV_USER,WHAT FROM USER_JOBS;
未选定行
导入用户JOBA的所有JOB:
在导入之前需要给用户JOBA授予一定的权限,否则会报错。如下:
C:\>impdp joba/joba directory=data_pump_dir dumpfile=joba.dp
Import: Release 10.2.0.1.0 - Production on 星期一, 18 1月, 2010 23:00:06
Copyright (c) 2003, 2005, Oracle.  All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
ORA-31655: 尚未为作业选择数据或元数据对象
ORA-39154: 外部方案中的对象已从导入中删除
已成功加载/卸载了主表 "JOBA"."SYS_IMPORT_FULL_01"
启动 "JOBA"."SYS_IMPORT_FULL_01":  joba/******** directory=data_pump_dir dumpfil
e=joba.dp
作业 "JOBA"."SYS_IMPORT_FULL_01" 已于 23:00:13 成功完成。
由于不是很清楚到底授予的最低权限是多少。直接先授予JOBA DBA角色,导入完成后,回收JOBA的DBA角色。

SQL> CONN / AS SYSDBA

已连接。

SQL> GRANT DBA TO JOBA;
授权成功。
C:\>impdp joba/joba directory=data_pump_dir dumpfile=joba.dp include=job  
Import: Release 10.2.0.1.0 - Production on 星期一, 18 1月, 2010 23:00:42
Copyright (c) 2003, 2005, Oracle.  All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已成功加载/卸载了主表 "JOBA"."SYS_IMPORT_FULL_01"
启动 "JOBA"."SYS_IMPORT_FULL_01":  joba/******** directory=data_pump_dir dumpfil
e=joba.dp
处理对象类型 SCHEMA_EXPORT/JOB
作业 "JOBA"."SYS_IMPORT_FULL_01" 已于 23:00:53 成功完成
C:\>sqlplus joba/joba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 1月 18 23:04:06 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> SELECT JOB,LOG_USER,PRIV_USER,SCHEMA_USER,WHAT FROM USER_JOBS;
       JOB LOG_USER   PRIV_USER  SCHEMA_USE WHAT
---------- ---------- ---------- ---------- --------------------
       161 JOBA       JOBA       JOBA       NULL;
       162 JOBA       JOBA       JOBA       NULL;
       163 JOBA       JOBA       JOBA       NULL;
       164 JOBA       JOBA       JOBA       NULL;
       165 JOBA       JOBA       JOBA       NULL;
       166 JOBA       JOBA       JOBA       NULL;
       167 JOBA       JOBA       JOBA       NULL;
       168 JOBA       JOBA       JOBA       NULL;
       169 JOBA       JOBA       JOBA       NULL;
       170 JOBA       JOBA       JOBA       NULL;
已选择10行。
SQL> CONN / AS SYSDBA

已连接。
SQL> REVOKE DBA FROM JOBA;
撤销成功。
至此,JOB导入完成。
注意,如果要把JOBA用户下的JOB导入到其他用户下,在IMPDP的过程用,需要以目标用户登录。看下面的一个例子:
SQL> SHOW USER

USER 为 "JOBA"

SQL> EXEC REMOVE_ALL_JOB;
PL/SQL 过程已成功完成。
SQL> SELECT JOB,LOG_USER,PRIV_USER,SCHEMA_USER,WHAT FROM USER_JOBS;
未选定行
SQL> CONN / AS SYSDBA

已连接。

SQL> GRANT CONNECT,RESOURCE TO JOBB IDENTIFIED BY JOBB;
授权成功。
SQL> CONN JOBB/JOBB

已连接。

SQL> SELECT JOB,LOG_USER,PRIV_USER,SCHEMA_USER,WHAT FROM USER_JOBS;
未选定行
SQL> CONN / AS SYSDBA

已连接。

SQL> GRANT DBA TO JOBA;
授权成功。
SQL> HOST
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:\>impdp joba/joba directory=data_pump_dir dumpfile=joba.dp remap_schema=(joba:jobb)
Import: Release 10.2.0.1.0 - Production on 星期一, 18 1月, 2010 23:30:41
Copyright (c) 2003, 2005, Oracle.  All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
ORA-39146: 方案 "JOBA" 不存在
已成功加载/卸载了主表 "JOBA"."SYS_IMPORT_FULL_01"
启动 "JOBA"."SYS_IMPORT_FULL_01":  joba/******** directory=data_pump_dir dumpfle=joba.dp remap_schema=
(joba:jobb)
处理对象类型 SCHEMA_EXPORT/JOB
作业 "JOBA"."SYS_IMPORT_FULL_01" 已于 23:32:56 成功完成

C:\>exit
SQL> SHOW USER
USER 为 "SYS"
SQL> CONN JOBB/JOBB
已连接。
SQL> SELECT JOB,LOG_USER,PRIV_USER,SCHEMA_USER,WHAT FROM USER_JOBS;
未选定行
可以看见JOB并且没有导入用户JOBB下。
此时连接到用户JOBA下。
SQL> CONN JOBA/JOBA
已连接。
SQL> SELECT JOB,LOG_USER,PRIV_USER,SCHEMA_USER,WHAT FROM USER_JOBS;
       JOB LOG_USER   PRIV_USER  SCHEMA_USE WHAT
---------- ---------- ---------- ---------- ----------
       161 JOBA       JOBA       JOBA       NULL;
       162 JOBA       JOBA       JOBA       NULL;
       163 JOBA       JOBA       JOBA       NULL;
       164 JOBA       JOBA       JOBA       NULL;
       165 JOBA       JOBA       JOBA       NULL;
       166 JOBA       JOBA       JOBA       NULL;
       167 JOBA       JOBA       JOBA       NULL;
       168 JOBA       JOBA       JOBA       NULL;
       169 JOBA       JOBA       JOBA       NULL;
       170 JOBA       JOBA       JOBA       NULL;
已选择10行。
JOB被导入到了JOBA用户下,REMAP_SCHEMA没起作用。如果导入用下面的命令
impdp system/oracle directory=data_pump_dir dumpfile=joba.dp remap_schema=(joba:jobb) 则JOB将会被导入到SYSTEM用户下。这是因为JOB在导出过程中,并不会附带模式名。所以JOB在导入过程中如果加了remap_schema=(joba:jobb),将会报ORA-39164。

SQL> SHOW USER
USER 为 "JOBA"
SQL> EXEC REMOVE_ALL_JOB;
PL/SQL 过程已成功完成。
SQL> CONN / AS SYSDBA
已连接。
SQL> REVOKE DBA FROM JOBA;
撤销成功。
SQL> GRANT DBA TO JOBB;
授权成功。
SQL> HOST
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:\>impdp jobb/jobb directory=data_pump_dir dumpfile=joba.dp
Import: Release 10.2.0.1.0 - Production on 星期一, 18 1月, 2010 23:40:57
Copyright (c) 2003, 2005, Oracle.  All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已成功加载/卸载了主表 "JOBB"."SYS_IMPORT_FULL_01"
启动 "JOBB"."SYS_IMPORT_FULL_01":  jobb/******** directory=data_pump_dir dumpfil
e=joba.dp
处理对象类型 SCHEMA_EXPORT/JOB
作业 "JOBB"."SYS_IMPORT_FULL_01" 已于 23:41:08 成功完成

C:\>exit
SQL> SHOW USER
USER 为 "SYS"
SQL> CONN JOBB/JOBB
已连接。
SQL> SELECT JOB,LOG_USER,PRIV_USER,SCHEMA_USER,WHAT FROM USER_JOBS;
       JOB LOG_USER   PRIV_USER  SCHEMA_USE WHAT
---------- ---------- ---------- ---------- ----------
       161 JOBB       JOBB       JOBB       NULL;
       162 JOBB       JOBB       JOBB       NULL;
       163 JOBB       JOBB       JOBB       NULL;
       164 JOBB       JOBB       JOBB       NULL;
       165 JOBB       JOBB       JOBB       NULL;
       166 JOBB       JOBB       JOBB       NULL;
       167 JOBB       JOBB       JOBB       NULL;
       168 JOBB       JOBB       JOBB       NULL;
       169 JOBB       JOBB       JOBB       NULL;
       170 JOBB       JOBB       JOBB       NULL;
已选择10行。
SQL> CONN / AS SYSDBA
已连接。
SQL> REVOKE DBA FROM JOBB;
撤销成功。

可见,可见JOB的导入过程中REMAP_SCHEMP不起作用(JOB导出的转存文件中不附带模式名),JOB将会导入到执行导入操作的用户下。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章