iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >数据库中删除表空间出现ORA-22868错误怎么办
  • 738
分享到

数据库中删除表空间出现ORA-22868错误怎么办

2023-06-06 02:06:22 738人浏览 独家记忆
摘要

这篇文章主要介绍了数据库中删除表空间出现ORA-22868错误怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。  在测试CONVERT DATABAS

这篇文章主要介绍了数据库中删除表空间出现ORA-22868错误怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

 

 

测试CONVERT DATABASE迁移命令时,没有迁移其中一个OFFLINE的表空间,因为这个表空间中的内容已经无法恢复了。

迁移完成后,发现表空间和数据文件信息还保留在数据字典中,因此想要清除掉这些信息,而引发了这个错误。

sql> select name from v$tablespace;

NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
EXAMPLE
YANGTK
MGMT_TABLESPACE
TEST
MGMT_ECM_DEPOT_TS
USERS
TEMP

10 rows selected.

SQL> select name from v$datafile;

NAME
------------------------------------------------------------------------------
/data/oradata/ytktran/SYSTEM01.DBF
/data/oradata/ytktran/UNDOTBS01.DBF
/data/oradata/ytktran/SYSAUX01.DBF
/opt/ora10g/product/10.2.0/db_1/dbs/MISSING00004
/data/oradata/ytktran/EXAMPLE01.DBF
/data/oradata/ytktran/YANGTK01.DBF
/data/oradata/ytktran/MGMT.DBF
/data/oradata/ytktran/YANGTK02.DBF
/data/oradata/ytktran/TEST01.DBF
/data/oradata/ytktran/MGMT_ECM_DEPOT1.DBF

10 rows selected.

SQL> select file_name      
  2  from dba_data_files
  3  where tablespace_name = 'USERS';

FILE_NAME
--------------------------------------------------------------------------------
/opt/ora10g/product/10.2.0/db_1/dbs/MISSING00004

显然USERS表空间是要删除的表空间:

SQL> drop tablespace users;
drop tablespace users
*
ERROR at line 1:
ORA-01549: tablespace not empty, use INCLUDING CONTENTS option


SQL> drop tablespace users including contents;
drop tablespace users including contents
*
ERROR at line 1:
ORA-22868: table with LOBs contains segments in different tablespaces

由于表空间不为空,因此需要INCLUDING CONTENTS方式删除表空间,但是这时出现了ORA-22868错误。

错误信息很明确,应该是USERS表空间中包含了LOB表,而LOB表中的LOB对象存储在USERS表空间之外的地方。

只需要找到这些对象并删除就可以解决这个问题:

SQL> col owner fORMat a15                                      
SQL> col tablespace_name format a15
SQL> col column_name format a30
SQL> select a.owner, a.table_name, b.column_name, b.tablespace_name
  2  from dba_tables a, dba_lobs b
  3  where a.owner = b.owner
  4  and a.table_name = b.table_name
  5  and a.tablespace_name = 'USERS'
  6  and b.tablespace_name != 'USERS';

no rows selected

SQL> select a.owner, a.table_name, b.column_name, b.tablespace_name
  2  from dba_tables a, dba_lobs b
  3  where a.owner = b.owner
  4  and a.table_name = b.table_name
  5  and a.tablespace_name = 'USERS';

no rows selected

奇怪的是,并没有符合表处于USERS表空间中,而LOB对象在USERS表空间之外的LOB对象,事实上,所有包含LOB的表,都不在USERS表空间中。

那么oracle为什么会出现上面的错误呢:

SQL> select count(*)        
  2  from dba_lobs
  3  where tablespace_name = 'USERS';

  COUNT(*)
----------
        10

SQL> select a.owner, a.table_name, b.column_name, b.tablespace_name
  2  from dba_tables a, dba_lobs b
  3  where a.owner = b.owner
  4  and a.table_name = b.table_name
  5  and b.tablespace_name = 'USERS';

no rows selected

SQL> select owner, table_name, column_name, tablespace_name
  2  from dba_lobs
  3  where tablespace_name = 'USERS';

OWNER TABLE_NAME         COLUMN_NAME                                        TABLESPACE_NAME
----- ------------------ -------------------------------------------------- ---------------
OE    LINEITEM_TABLE     "PART"."SYS_XDBPD$"                                USERS
OE    LINEITEM_TABLE     SYS_XDBPD$                                         USERS
OE    ACTION_TABLE       SYS_XDBPD$                                         USERS
OE    PURCHASEORDER      "XMLDATA"."LINEITEMS"."SYS_XDBPD$"                 USERS
OE    PURCHASEORDER      "XMLDATA"."SHIPPING_INSTRUCTIONS"."SYS_XDBPD$"     USERS
OE    PURCHASEORDER      "XMLDATA"."REJECTION"."SYS_XDBPD$"                 USERS
OE    PURCHASEORDER      "XMLDATA"."ACTIONS"."SYS_XDBPD$"                   USERS
OE    PURCHASEORDER      "XMLDATA"."SYS_XDBPD$"                             USERS
OE    PURCHASEORDER      "XMLEXTRA"."EXTRADATA"                             USERS
OE    PURCHASEORDER      "XMLEXTRA"."NAMESPACES"                            USERS

10 rows selected.

查询发现,USERS表空间中包含了10个LOB对象。但是关联DBA_TABLES进行查询,却发现找不到任何的记录。

SQL> SELECT OWNER, OBJECT_NAME, OBJECT_TYPE
  2  FROM DBA_OBJECTS
  3  WHERE OBJECT_NAME = 'ACTION_TABLE';

OWNER                          OBJECT_NAME                    OBJECT_TYPE
------------------------------ ------------------------------ -------------------
OE                             ACTION_TABLE                   TABLE

SQL> SELECT OWNER, TABLE_NAME, TABLESPACE_NAME
  2  FROM DBA_TABLES
  3  WHERE TABLE_NAME = 'ACTION_TABLE';

no rows selected

从DBA_OBJECTS视图中可以看到这个对象,且对象类型为TABLE,而在DBA_TABLES中却找不到表信息,难道在执行CONVERT DATABASE命令过程,造成了数据字典的不一致。

查询一下DBA_TABLES视图信息:

SQL> SET LONG 10000
SQL> SELECT TEXT
  2  FROM DBA_VIEWS
  3  WHERE VIEW_NAME = 'DBA_TABLES';

TEXT
--------------------------------------------------------------------------------
select u.name, o.name, decode(bitand(t.property,2151678048), 0, ts.name, null),
       decode(bitand(t.property, 1024), 0, null, co.name),
       decode((bitand(t.property, 512)+bitand(t.flags, 536870912)),
              0, null, co.name),
       decode(bitand(t.trigflag, 1073741824), 1073741824, 'UNUSABLE', 'VALID'),
       decode(bitand(t.property, 32+64), 0, mod(t.pctfree$, 100), 64, 0, null),
       decode(bitand(ts.flags, 32), 32, to_number(NULL),
          decode(bitand(t.property, 32+64), 0, t.pctused$, 64, 0, null)),
       decode(bitand(t.property, 32), 0, t.initrans, null),
       decode(bitand(t.property, 32), 0, t.maxtrans, null),
       s.iniexts * ts.blocksize,
       decode(bitand(ts.flags, 3), 1, to_number(NULL),
                                      s.extsize * ts.blocksize),
       s.minexts, s.maxexts,
       decode(bitand(ts.flags, 3), 1, to_number(NULL),
                                      s.extpct),
       decode(bitand(ts.flags, 32), 32, to_number(NULL),
         decode(bitand(o.flags, 2), 2, 1, decode(s.lists, 0, 1, s.lists))),
       decode(bitand(ts.flags, 32), 32, to_number(NULL),
         decode(bitand(o.flags, 2), 2, 1, decode(s.groups, 0, 1, s.groups))),
       decode(bitand(t.property, 32+64), 0,
                decode(bitand(t.flags, 32), 0, 'YES', 'NO'), null),
       decode(bitand(t.flags,1), 0, 'Y', 1, 'N', '?'),
       t.rowcnt,
       decode(bitand(t.property, 64), 0, t.blkcnt, null),
       decode(bitand(t.property, 64), 0, t.empcnt, null),
       t.avgspc, t.chncnt, t.avgrln, t.avgspc_flb,
       decode(bitand(t.property, 64), 0, t.flbcnt, null),
       lpad(decode(t.degree, 32767, 'DEFAULT', nvl(t.degree,1)),10),
       lpad(decode(t.instances, 32767, 'DEFAULT', nvl(t.instances,1)),10),
       lpad(decode(bitand(t.flags, 8), 8, 'Y', 'N'),5),
       decode(bitand(t.flags, 6), 0, 'ENABLED', 'DISABLED'),
       t.samplesize, t.analyzetime,
       decode(bitand(t.property, 32), 32, 'YES', 'NO'),
       decode(bitand(t.property, 64), 64, 'IOT',
               decode(bitand(t.property, 512), 512, 'IOT_OVERFLOW',
               decode(bitand(t.flags, 536870912), 536870912, 'IOT_MAPPING', null
))),
       decode(bitand(o.flags, 2), 0, 'N', 2, 'Y', 'N'),
       decode(bitand(o.flags, 16), 0, 'N', 16, 'Y', 'N'),
       decode(bitand(t.property, 8192), 8192, 'YES',
              decode(bitand(t.property, 1), 0, 'NO', 'YES')),
       decode(bitand(o.flags, 2), 2, 'DEFAULT',
             decode(s.cachehint, 0, 'DEFAULT', 1, 'KEEP', 2, 'RECYCLE', NULL)),
       decode(bitand(t.flags, 131072), 131072, 'ENABLED', 'DISABLED'),
       decode(bitand(t.flags, 512), 0, 'NO', 'YES'),
       decode(bitand(t.flags, 256), 0, 'NO', 'YES'),
       decode(bitand(o.flags, 2), 0, NULL,
          decode(bitand(t.property, 8388608), 8388608,
                 'SYS$SESSION', 'SYS$TRANSACTION')),
       decode(bitand(t.flags, 1024), 1024, 'ENABLED', 'DISABLED'),
       decode(bitand(o.flags, 2), 2, 'NO',
           decode(bitand(t.property, 2147483648), 2147483648, 'NO',
              decode(ksppcv.ksppstvl, 'TRUE', 'YES', 'NO'))),
       decode(bitand(t.property, 1024), 0, null, cu.name),
       decode(bitand(t.flags, 8388608), 8388608, 'ENABLED', 'DISABLED'),
       decode(bitand(t.property, 32), 32, null,
                decode(bitand(s.spare1, 2048), 2048, 'ENABLED', 'DISABLED')),
       decode(bitand(o.flags, 128), 128, 'YES', 'NO')
from sys.user$ u, sys.ts$ ts, sys.seg$ s, sys.obj$ co, sys.tab$ t, sys.obj$ o,
     sys.obj$ cx, sys.user$ cu, x$ksppcv ksppcv, x$ksppi ksppi
where o.owner# = u.user#
  and o.obj# = t.obj#
  and bitand(t.property, 1) = 0
  and bitand(o.flags, 128) = 0
  and t.bobj# = co.obj# (+)
  and t.ts# = ts.ts#
  and t.file# = s.file# (+)
  and t.block# = s.block# (+)
  and t.ts# = s.ts# (+)
  and t.dataobj# = cx.obj# (+)
  and cx.owner# = cu.user# (+)
  and ksppi.indx = ksppcv.indx
  and ksppi.ksppinm = '_dml_monitoring_enabled'

在DBA_TABLES视图中没有太多的限制条件,那么导致DBA_TABLES中没有记录的原因多半出在连接上。

检查一下OBJ$和TAB$表:

SQL> SELECT OBJECT_ID 
  2  FROM DBA_OBJECTS
  3  WHERE OBJECT_NAME = 'ACTION_TABLE';

 OBJECT_ID
----------
     52449

SQL> SELECT OBJ#, DATAOBJ#, NAME FROM OBJ$ WHERE OBJ# = 52449;

      OBJ#   DATAOBJ# NAME
---------- ---------- ------------------------------
     52449            ACTION_TABLE

SQL> SELECT OBJ#, DATAOBJ#, TS#, BOBJ# FROM TAB$ WHERE OBJ# = 52449;

      OBJ#   DATAOBJ#        TS#      BOBJ#
---------- ---------- ---------- ----------
     52449                     0      52450

当前对象对于的DATAOBJ#为空,说明这个对象没有对应的存储空间,而可以看到这个对象的BOBJ#是52450,查询DBA_OBJECTS视图:

SQL> SELECT OWNER, OBJECT_NAME, OBJECT_ID, DATA_OBJECT_ID, OBJECT_TYPE
  2  FROM DBA_OBJECTS
  3  WHERE OBJECT_ID IN (52449, 52450);

OWNER           OBJECT_NAME                     OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE
--------------- ------------------------------ ---------- -------------- ------------
OE              ACTION_TABLE                        52449                TABLE
OE              SYS_IOT_OVER_52449                  52450          52450 TABLE

显然这个ACTION_TABLE是索引组织表。查询ACTION_TABLE对应的索引信息:

SQL> SELECT OWNER, INDEX_NAME, INDEX_TYPE
  2  FROM DBA_INDEXES
  3  WHERE TABLE_NAME = 'ACTION_TABLE';

OWNER                          INDEX_NAME                     INDEX_TYPE
------------------------------ ------------------------------ ---------------------------
OE                             ACTION_TABLE_DATA              IOT - TOP
OE                             SYS_IL0000052449C00004$$       LOB

看来ACTION_TABLE不仅是一个索引组织表,还包括LOB对象。而这可能就是前面碰到的ORA-22868错误的原因。

但是现在还有一个疑问,即使是索引组织表,也应该可以在DBA_TABLES视图中可以查询到的。

感谢你能够认真阅读完这篇文章,希望小编分享的“数据库中删除表空间出现ORA-22868错误怎么办”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: 数据库中删除表空间出现ORA-22868错误怎么办

本文链接: https://www.lsjlt.com/news/245773.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 数据库中删除表空间出现ORA-22868错误怎么办
    这篇文章主要介绍了数据库中删除表空间出现ORA-22868错误怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。  在测试CONVERT DATABAS...
    99+
    2023-06-06
  • Oracle中删除数据报ORA 02292错误怎么办
    这篇文章给大家分享的是有关Oracle中删除数据报ORA 02292错误怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体代码如下所示:--查询表TP_MENU有哪些约束 ...
    99+
    2022-10-18
  • Oracle表空间误删除导致startup启动时提示ORA-01110和ORA-01157错误怎么办
    这篇文章主要讲解了“Oracle表空间误删除导致startup启动时提示ORA-01110和ORA-01157错误怎么办”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle表空间误删除...
    99+
    2023-05-31
  • Oracle数据库中出现ora-12899错误怎么办
    这篇文章将为大家详细讲解有关Oracle数据库中出现ora-12899错误怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在使用ORACLE的过程中,会出现各种各样的...
    99+
    2022-10-18
  • 数据库中出现RMAN-06820 ORA-17629错误怎么办
    这篇文章将为大家详细讲解有关数据库中出现RMAN-06820 ORA-17629错误怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在standby数据库进行数据库备...
    99+
    2022-10-19
  • MySQL删除数据库时出现错误ERROR 1010 (HY000)怎么解决
    本篇内容主要讲解“MySQL删除数据库时出现错误ERROR 1010 (HY000)怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL删除数据库时...
    99+
    2022-10-18
  • 数据库更新表数据时出现ORA-02292错误怎么解决
    本篇内容介绍了“数据库更新表数据时出现ORA-02292错误怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学...
    99+
    2022-10-19
  • 数据库中如何收缩临时表空间及处理ORA-03297错误
    这篇文章主要为大家展示了“数据库中如何收缩临时表空间及处理ORA-03297错误”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“数据库中如何收缩临时表空间及处理O...
    99+
    2022-10-18
  • DataGuard中主库表空间新增数据文件、备库无法创建报错ORA-01274怎么办
    小编给大家分享一下DataGuard中主库表空间新增数据文件、备库无法创建报错ORA-01274怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 问题描述 主库环境:Oracle ...
    99+
    2022-10-18
  • oracle数据库修改用户密码的时出现ORA-28003和ORA-20006错误怎么办
    小编给大家分享一下oracle数据库修改用户密码的时出现ORA-28003和ORA-20006错误怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让...
    99+
    2022-10-18
  • 数据库中RMAN删除归档日志出现RMAN-0813错误的处理方法是什么
    这篇文章主要讲解了“数据库中RMAN删除归档日志出现RMAN-0813错误的处理方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库中RMAN删除...
    99+
    2022-10-18
  • mysql数据库出现mysql: [ERROR] unknown option '--skip-grant-tables'错误怎么办
    这篇文章给大家分享的是有关mysql数据库出现mysql: [ERROR] unknown option '--skip-grant-tables'错误怎么办的内容。小编觉得挺实用的,因此分...
    99+
    2022-10-18
  • 数据库中怎么解决修改表名时遇到ORA-14047错误
    本篇内容主要讲解“数据库中怎么解决修改表名时遇到ORA-14047错误”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库中怎么解决修改表名时遇到ORA-140...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作