【问题标题】:(Oracle): Columns in partially dropped state(Oracle):处于部分删除状态的列
【发布时间】:2015-10-12 03:09:58
【问题描述】:

我使用 Oracle 10g。几个月以来,我对表格有以下错误:

ORA-12986: columns in partially dropped state. Submit ALTER TABLE DROP COLUMNS CONTINUE

语句 ALTER TABLE DROP COLUMNS CONTINUE 超时失败。

我没有此数据库的 DBA 权限。

我能做什么?删除并重新创建表?

这是一张包含数百万条记录的庞大表格。

我尝试了什么:

  1. 曾几何时,我做了以下命令来设置一些列 处于未使用状态:

    ALTER TABLE hr.admin_emp SET UNUSED (hiredate, mgr);
    

    然后,我给出了以下命令:

    ALTER TABLE hr.admin DROP UNUSED columns;
    

    系统挂了,运行时间过长,所以出错了。

    现在表 hr.admin 有两列处于部分删除状态, 我既不能前进,也不能后退。

    我不明白为什么会这样。

  2. 我做了以下步骤,系统在第二阶段挂断:

    第一阶段 =============

    SQL> select * from user_unused_col_tabs;
    
    TABLE_NAME  COUNT
    ----------- ----------
    TEMP        1
    

    第二阶段 =============

    SQL> alter table temp drop unused columns;
    
    Table altered.
    

    第三阶段 ==============

    SQL> select * from user_unused_col_tabs;
    
    no rows selected
    
  3. 检查点 500 选项

    我再次尝试使用以下语句:

    ALTER TABLE MYUSER.MYTABLE DROP COLUMNS CONTINUE CHECKPOINT 500;
    

    CHECKPOINT 500 选项对我有帮助吗?

【问题讨论】:

  • 你是什么意思,“它有故障”?确切的错误信息是什么?
  • Oracle 会话在 48 小时后到期。我不能要求 dba。
  • 我不知道错误信息是什么,会话过期,进程死亡。
  • 您可能想要检查会话并找出它正在等待的内容和对象。像这样的 SQL 语句可能会让您入门:select event, final_blocking_session, gv$session.* from gv$session;。也许其他一些会话已锁定表。
  • 这很奇怪。你用的是9i吗?从手册来看,这些列似乎是 10g 的新列。如果您的 DBA 让您继续使用 9i,那么他们真的应该在帮助解决这些问题方面发挥更积极的作用!

标签: oracle oracle10g ddl alter-table


【解决方案1】:

我们已经连续发出了大约十二次命令:

ALTER TABLE MYUSER.MYTABLE DROP COLUMNS CONTINUE CHECKPOINT 250;

该语句每 48 小时自动终止一次,这是因为我们不得不多次启动它。

大约 500 小时的精心制作,以绝对删除处于部分删除状态的列...!!

已确认 CHECKPOINT 250 进行了“提交”,因此在下一次启动同一命令时,您将从停止点开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    相关资源
    最近更新 更多