Oracle的特权管理用户终止其他用户发起的数据泵作业

2026年6月12日 作者 XiaofeiHuangfu

适用范围
适用于Oracle 11g及以上版本
方案概述
在生产运维过程中,按照用户管理要求,进行了权限分离,执行数据泵的expdp/impdp使用dumper发起数据泵作业,需要终止数据泵作业时使用数据库管理用户来执行终止操作。
实施步骤
1、创建执行数据泵expdp/impdp作业的用户并授权

登录cdb然后切换到hrpdb创建用户
[oracle@19cdb01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jun 10 18:05:32 2026
Version 19.27.0.0.0

Copyright (c) 1982, 2024, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.27.0.0.0


Hello
------------------------------------------------
Welcome! you are connected to CDB19C database


CONNAME
--------------------------------------------------------------------------------
CDB$ROOT

SYS@cdb19c(CDB$ROOT)> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 HRPDB                          READ WRITE NO
         6 RCATPDB                        READ WRITE NO
SYS@cdb19c(CDB$ROOT)> alter session set container=hrpdb;

Session altered.

SYS@cdb19c(CDB$ROOT)> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 HRPDB                          READ WRITE NO
SYS@cdb19c(CDB$ROOT)>

SYS@cdb19c(CDB$ROOT)> create user dumper identified by password;

User created.

SYS@cdb19c(CDB$ROOT)> grant DATAPUMP_EXP_FULL_DATABASE,DATAPUMP_IMP_FULL_DATABASE to dumper;

Grant succeeded.

SYS@cdb19c(CDB$ROOT)> alter user dumper quota unlimited on users;

User altered.

SYS@cdb19c(CDB$ROOT)>

创建执行数据泵expdp/impdp作业的dumper用户并授权。
2、使用dumper用户执行expdp数据泵作业

[oracle@19cdb01 ~]$ expdp dumper/password@hrpdb directory=IMP_DIR dumpfile=full_cdb19c.dumpfilemp full=y logfile=expfull_cdb19c_20260610.log logtime=all

Export: Release 19.0.0.0.0 - Production on Wed Jun 10 15:13:29 2026
Version 19.27.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
10-JUN-26 15:13:36.639: Starting "DUMPER"."SYS_EXPORT_FULL_01":  dumper/password@hrpdb directory=IMP_DIR dumpfile=full_cdb19c.dumpfilemp full=y logfile=expfull_cdb19c_20260610.log logtime=all
10-JUN-26 15:13:43.158: Processing object type DATABASE_EXPORT/EARLY_OPTIONS/VIEWS_AS_TABLES/TABLE_DATA
10-JUN-26 15:13:44.467: Processing object type DATABASE_EXPORT/NORMAL_OPTIONS/TABLE_DATA
10-JUN-26 15:13:45.791: Processing object type DATABASE_EXPORT/NORMAL_OPTIONS/VIEWS_AS_TABLES/TABLE_DATA
10-JUN-26 15:13:47.312: Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
10-JUN-26 15:13:47.692: Processing object type DATABASE_EXPORT/SCHEMA/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
10-JUN-26 15:13:47.918: Processing object type DATABASE_EXPORT/SCHEMA/TABLE/INDEX/STATISTICS/FUNCTIONAL_INDEX/INDEX_STATISTICS
10-JUN-26 15:13:48.043: Processing object type DATABASE_EXPORT/SCHEMA/TABLE/INDEX/STATISTICS/BITMAP_INDEX/INDEX_STATISTICS
10-JUN-26 15:13:48.199: Processing object type DATABASE_EXPORT/SCHEMA/TABLE/STATISTICS/TABLE_STATISTICS
10-JUN-26 15:13:54.145: Processing object type DATABASE_EXPORT/STATISTICS/MARKER
10-JUN-26 15:13:54.468: Processing object type DATABASE_EXPORT/PRE_SYSTEM_IMPCALLOUT/MARKER
10-JUN-26 15:13:54.501: Processing object type DATABASE_EXPORT/PRE_INSTANCE_IMPCALLOUT/MARKER
10-JUN-26 15:13:54.648: Processing object type DATABASE_EXPORT/TABLESPACE
10-JUN-26 15:13:54.783: Processing object type DATABASE_EXPORT/PROFILE
10-JUN-26 15:13:54.877: Processing object type DATABASE_EXPORT/SCHEMA/USER
10-JUN-26 15:13:55.029: Processing object type DATABASE_EXPORT/ROLE
10-JUN-26 15:13:55.091: Processing object type DATABASE_EXPORT/RADM_FPTM
10-JUN-26 15:13:55.480: Processing object type DATABASE_EXPORT/GRANT/SYSTEM_GRANT/PROC_SYSTEM_GRANT
10-JUN-26 15:13:55.560: Processing object type DATABASE_EXPORT/SCHEMA/GRANT/SYSTEM_GRANT
10-JUN-26 15:13:55.636: Processing object type DATABASE_EXPORT/SCHEMA/ROLE_GRANT
10-JUN-26 15:13:55.708: Processing object type DATABASE_EXPORT/SCHEMA/DEFAULT_ROLE
10-JUN-26 15:13:55.779: Processing object type DATABASE_EXPORT/SCHEMA/ON_USER_GRANT
10-JUN-26 15:13:55.904: Processing object type DATABASE_EXPORT/SCHEMA/TABLESPACE_QUOTA
10-JUN-26 15:13:55.967: Processing object type DATABASE_EXPORT/RESOURCE_COST
10-JUN-26 15:13:56.163: Processing object type DATABASE_EXPORT/TRUSTED_DB_LINK
10-JUN-26 15:13:56.261: Processing object type DATABASE_EXPORT/SCHEMA/SEQUENCE/SEQUENCE
10-JUN-26 15:13:58.100: Processing object type DATABASE_EXPORT/DIRECTORY/DIRECTORY
10-JUN-26 15:13:59.362: Processing object type DATABASE_EXPORT/DIRECTORY/GRANT/OWNER_GRANT/OBJECT_GRANT
10-JUN-26 15:14:01.131: Processing object type DATABASE_EXPORT/SCHEMA/SYNONYM
10-JUN-26 15:14:01.375: Processing object type DATABASE_EXPORT/SCHEMA/TYPE/INC_TYPE
10-JUN-26 15:14:02.298: Processing object type DATABASE_EXPORT/SCHEMA/TYPE/TYPE_SPEC
10-JUN-26 15:14:02.984: Processing object type DATABASE_EXPORT/SCHEMA/TYPE/GRANT/OWNER_GRANT/OBJECT_GRANT
10-JUN-26 15:14:03.984: Processing object type DATABASE_EXPORT/SYSTEM_PROCOBJACT/PRE_SYSTEM_ACTIONS/PROCACT_SYSTEM
10-JUN-26 15:14:04.388: Processing object type DATABASE_EXPORT/SYSTEM_PROCOBJACT/PROCOBJ
Export> status

Job: SYS_EXPORT_FULL_01
  Operation: DUMPER
  Mode: FULL
  State: EXECUTING
  Bytes Processed: 0
  Current Parallelism: 1
  Job Error Count: 0
  Job heartbeat: 1
  Dump File: /home/oracle/full_cdb19c.dump
    bytes written: 4,096

Worker 1 Status:
  Instance ID: 1
  Instance name: cdb19c
  Host name: 19cdb01
  Object start time: Wednesday, 10 June, 2026 16:22:20
  Object status at: Wednesday, 10 June, 2026 16:22:21
  Process Name: DW00
  State: EXECUTING

3、检查数据泵作业

在hrpdb中执行
col OWNER_NAME for a20
col job_name for a20
col OPERATION for a15
col state for a15
select OWNER_NAME,JOB_NAME,OPERATION,state,CON_ID from cdb_datapump_jobs;
OWNER_NAME           JOB_NAME             OPERATION       STATE               CON_ID
-------------------- -------------------- --------------- ------------
DUMPER       SYS_EXPORT_FULL_01   EXPORT   EXECUTING              3

expdp作业名称为SYS_EXPORT_FULL_01,作业正在执行中,con_id是3,即hrdpb。
4、检查数据泵后台进程

[oracle@19cdb01 ~]$  ps -ef | grep -v grep | grep ora_dm
oracle   12414     1 45 17:47 ?        00:00:03 ora_dm00_cdb19c
[oracle@19cdb01 ~]

5、使用数据库管理用户sys来终止数据泵作业

[oracle@19cdb01 ~]$ expdp '"sys/password@hrpdb as sysdba"' attach=SYS_EXPORT_FULL_01

Export: Release 19.0.0.0.0 - Production on Wed Jun 10 15:38:20 2026
Version 19.27.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.


Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
ORA-31626: job does not exist
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 79
ORA-06512: at "SYS.KUPV$FT", line 421
ORA-31638: cannot attach to job SYS_EXPORT_FULL_01 for user SYS
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: at "SYS.KUPV$FT", line 414
ORA-31632: master table "SYS.SYS_EXPORT_FULL_01" not found, invalid, or inaccessible
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: at "SYS.KUPV$FT", line 406
ORA-00942: table or view does not exist
ORA-06512: at "SYS.KUPV$FT_INT", line 2847
ORA-06512: at "SYS.KUPV$FT", line 210

使用sys用户attach方式进行expdp命令行交互模式,ORA-31632 master table “SYS.SYS_EXPORT_FULL_01” not found,sys用户下没有找到SYS_EXPORT_FULL_01状态表。

[oracle@19cdb01 ~]$  expdp '"sys/password@hrpdb as sysdba"' attach=dumper.SYS_EXPORT_FULL_01

Export: Release 19.0.0.0.0 - Production on Wed Jun 10 15:40:47 2026
Version 19.27.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Job: SYS_EXPORT_FULL_01
  Owner: DUMPER
  Operation: DUMPER
  Creator Privs: TRUE
  GUID: 53E25B880FB21261E065DDCE3A0EF6FC
  Start Time: Wednesday, 10 June, 2026 15:40:29
  Mode: FULL
  Instance: cdb19c
  Max Parallelism: 1
  Timezone: +00:00
  Timezone version: 32
  Endianness: LITTLE
  NLS character set: AL32UTF8
  NLS NCHAR character set: AL16UTF16
  EXPORT Job Parameters:
  Parameter Name      Parameter Value:
     CLIENT_COMMAND        dumper/password@hrpdb directory=IMP_DIR dumpfile=full_cdb19c.dump full=y logfile=expfull_cdb19c_20260610.log logtime=all
     LOGTIME               ALL
     TRACE                 0
  State: EXECUTING
  Bytes Processed: 0
  Current Parallelism: 1
  Job Error Count: 0
  Job heartbeat: 2
  Dump File: /home/oracle/full_cdb19c.dump
    bytes written: 49,152

Worker 1 Status:
  Instance ID: 1
  Instance name: cdb19c
  Host name: 19cdb01
  Object start time: Wednesday, 10 June, 2026 15:40:45
  Object status at: Wednesday, 10 June, 2026 15:40:45
  Process Name: DW00
  State: EXECUTING

Export>
Export> kill_job
Are you sure you wish to stop this job ([yes]/no): yes

attach=dumper.SYS_EXPORT_FULL_01进入到了expdp命令行交互模式,可以使用sys用户通过kill_job终止expdp作业。
6、检查expdp作业状态

在hrpdb中执行
col OWNER_NAME for a20
col job_name for a20
col OPERATION for a15
col state for a15
select OWNER_NAME,JOB_NAME,OPERATION,state,CON_ID from cdb_datapump_jobs;
OWNER_NAME           JOB_NAME             OPERATION       STATE               CON_ID
-------------------- -------------------- --------------- ------------
DUMPER          SYS_EXPORT_FULL_01   EXPORT    STOPPING              3

此时SYS_EXPORT_FULL_01 作业时STOPPING。
如果状态表长时间没有自动清理,可以使用以下命令

SQL>DROP TABLE dumper.SYS_EXPORT_FULL_01;

–数据库日志

...
2026-06-10T16:21:59.026649+08:00
HRPDB(3):DM00 stopped with pid=61, OS id=7187, job DUMPER.SYS_EXPORT_FULL_01
2026-06-10T16:22:09.701715+08:00
HRPDB(3):DM00 started with pid=69, OS id=7217, job DUMPER.SYS_EXPORT_FULL_01
2026-06-10T16:22:14.281822+08:00
HRPDB(3):
HRPDB(3):DW00 started with pid=71, OS id=7223, wid=1, job DUMPER.SYS_EXPORT_FULL_01
2026-06-10T16:23:46.750429+08:00
HRPDB(3):DM00 stopped with pid=69, OS id=7217, job DUMPER.SYS_EXPORT_FULL_01
...

数据库日志中也可也看到DM00进程stopped。

【小结】
用户权限分离是好多客户生产环境中的常见需求和审计重点内容,用户分离后我们要非常清楚每个用户在权限内能够执行的操作,确保生产环境安全稳定。