oracle expdp导致system表空间满

今天下午,项目经理反馈有套11204版本数据库无法使用了,立刻登录检查环境发现SYSTEM表空间使用率99.99%了

TABLESPACE_NAME    MAXSIZE_MB ACTUALSIZE_MB  USED_MB   FREESPACE_MB  SPACE USAGE
----------------- ---------- ------------- ---------- ------------ -------------
SYSTEM            32767        32767            32766          1               99.99%

到这里以为是审计数据太大导致的,但查询发现没开审计,如下图,第一次遇到该种情况

SYS > show parameter audit_trail

NAME           TYPE         VALUE
------------- -------     ----------
audit_trail      string     NONE
SYS>
 
 
SYS > select count(*) sum from AUD$;

       SUM
----------
        0

 查看SYSTEM表空间下面大表

SQL>  set pagesize 199 linesize 199;
 col SEGMENT_NAME for a30;
 select * from (Select Segment_Name,Sum(bytes)/1024/1024/1024 From dba_Extents where TABLESPACE_NAME='SYSTEM' Group By Segment_Name order by 2 desc ) WHERE ROWNUM <= 10 ;  

SEGMENT_NAME                               SUM(BYTES)/1024/1024/1024
------------------------------                         -------------------------
SYS_LOB0000261488C00045$$              .432617188
SYS_LOB0000269830C00045$$              .432617188
SYS_LOB0000275177C00045$$              .430664063
SYS_LOB0000270224C00045$$              .4296875
SYS_LOB0000264343C00045$$              .4296875
SYS_LOB0000260763C00045$$              .4296875
SYS_LOB0000274880C00045$$              .4296875
SYS_LOB0000268850C00045$$              .4296875
SYS_LOB0000259802C00045$$              .4296875
SYS_LOB0000277331C00045$$              .4296875

10 rows selected.

 继续排查,发现应该expdp备份失败导致的问题

SQL>select owner,table_name from dba_lobs where SEGMENT_NAME='SYS_LOB0000261488C00045$$';

OWNER                   TABLE_NAME
------------------------------ ----------------------------------------
SYS                   SYS_EXPORT_FULL_46

 查看expdp备份的log,确实是备份失败导致的

[root@hydb1 ~]# tail -30 /tmp/expdp_orcl20230615.log
ORA-39171: Job is experiencing a resumable wait.
ORA-01691: unable to extend lob segment SYS.SYS_LOB0000277473C00045$$ by 1024 in tablespace SYSTEM
ORA-39171: Job is experiencing a resumable wait.
ORA-01691: unable to extend lob segment SYS.SYS_LOB0000277473C00045$$ by 1024 in tablespace SYSTEM
ORA-39171: Job is experiencing a resumable wait.
ORA-01691: unable to extend lob segment SYS.SYS_LOB0000277473C00045$$ by 1024 in tablespace SYSTEM
ORA-39171: Job is experiencing a resumable wait.
ORA-01691: unable to extend lob segment SYS.SYS_LOB0000277473C00045$$ by 1024 in tablespace SYSTEM
ORA-39126: Worker unexpected fatal error in KUPW$WORKER.CREATE_OBJECT_ROWS [TABLE]
TABLE:"XGFW"."STD_TS_ZSJX"
ORA-30032: the suspended (resumable) statement has timed out
ORA-01691: unable to extend lob segment SYS.SYS_LOB0000277473C00045$$ by 1024 in tablespace SYSTEM

ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
ORA-06512: at "SYS.KUPW$WORKER", line 9721

----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
0x42d2b08d0     21979  package body SYS.KUPW$WORKER
0x42d2b08d0      9742  package body SYS.KUPW$WORKER
0x42d2b08d0      8638  package body SYS.KUPW$WORKER
0x42d2b08d0     11712  package body SYS.KUPW$WORKER
0x42d2b08d0      2808  package body SYS.KUPW$WORKER
0x42d2b08d0     10422  package body SYS.KUPW$WORKER
0x42d2b08d0      1824  package body SYS.KUPW$WORKER
0x3c7e83b50         2  anonymous block

Job "SYS"."SYS_EXPORT_FULL_70" stopped due to fatal error at Thu Jun 15 21:42:28 2023 elapsed 0 02:02:22

 把所有备份失败所产生的表清理干净,释放了SYSTEM表空间

SQL> drop table sys.SYS_EXPORT_FULL_01 purge;
..........
..........
..........
SQL> drop table sys.SYS_EXPORT_FULL_70 purge;

查看定时任务,确实sys用户备份的

 expdp \"/ as sysdba\"  directory=dir_dump dumpfile=orcl_20230609_022001.dmp logfile=expdp_orcl_"$DAY".log full=y
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Oracle expdp命令可以用于导出数据库中的数据和对象,但是如果只想导出表数据,可以使用以下命令: expdp username/password@database_name tables=table_name directory=directory_name dumpfile=filename.dmp 其中,table_name是要导出的表名,directory_name是导出文件的目录,filename.dmp是导出文件的名称。 需要注意的是,如果要导出多个表的数据,可以在tables参数中使用逗号分隔多个表名。另外,如果需要导出表的结构和数据,可以使用full参数。 ### 回答2: Oracle expdpOracle数据库中用于进行数据导出的工具,它可以将指定的数据从数据库中导出,可以实现表、视图、索引、存储过程等多种数据的导出操作。 然而,expdp只导出表数据,而不导出其他数据库对象的数据,这是因为expdp是基于表空间进行导出的。在导出数据时,可以通过指定tablespace参数来指定需要导出的表空间,然后expdp会将该表空间中的所有表进行导出,但是其他的数据库对象则无法被导出。 因此,如果需要导出其他数据库对象的数据,必须使用其他的导出工具或者手动编写SQL语句进行导出。比如,可以使用exp进行全库导出,或者使用impdp进行数据导入,导入时可以选择需要导入的对象类型。同时,也可以手动编写SQL语句进行数据导出,从而实现对其他数据库对象数据的导出。 总之,expdp只能导出表数据,对于其他的数据库对象需要使用其他的导出工具或自行编写SQL语句进行导出。同时,导出数据时务必注意数据格式和关联关系,以免造成数据丢失或错误。 ### 回答3: Oracle的Data Pump是一种强大的工具,可以在Oracle数据库之间转移数据并备份和还原数据库。有两种方式进行数据的传输:使用traditional export/import 或使用Data Pump工具。本文将会着重介绍Data Pump onData Pump是在Oracle 10g后引入的。它提供了一种高效且可定制的数据传输方式,比传统的导入/导出工具要高效得多。它可以在数据库之间快速地传输大量数据,而不会消耗大量的IO资源和时间。Data Pump可以轻松地导出和导入表、模式、用户和数据库。 在这个背景下,我们来看一下expdp只导出表数据这个问题。expdp命令是Data Pump工具的一部分,它的作用是将指定的数据导出到一个文件中。默认情况下,expdp命令只会导出表数据。expdp命令还可以导出其他数据库对象,例如:程序包、函数、触发器、视图等,但是需要显式地指定参数。如果只想导出表数据,expdp命令是非常适合的。使用expdp命令只导出表数据是指,导出的文件中只包含指定表的数据,而不包含表的结构、索引和其他数据库对象。 expdp命令的语法如下: expdp username/password@connect_identifier tables=table_name directory=data_pump_dir dumpfile=dump_file_name 其中,username、password和connect_identifier是使用数据库链接所需的凭证,tables参数指定要导出数据的表名称,directory参数指定要存储输出文件的目录,dumpfile参数指定要使用的输出文件的名称。这个命令将只导出指定的表的数据,而不是表的结构信息。 综上所述,当我们需要快速地备份指定表的数据时,可以使用expdp命令。虽然Data Pump工具提供了更广泛的导出和导入选项,但expdp命令可提供快速、定制化的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值