此前测试和运用的时分还真的没有发现这个问题,一直以为COPY_TABLE_DEPENDENTS能自动过滤NOT NULL约束。
然则实事并发如斯,如其盘算运用COPY_TABLE_DEPENDENTS历程复制目录、约束以及权限等相干对象,那么在建立目标表的时分,即使是NOT NULL约束都应该避免,不然NOT NULL约束的存在会挑动错处:
SQL> CREATE TABLE T AS
二 SELECT ROWNUM ID, OBJECT_NAME NAME, OBJECT_TYPE TYPE
三 FROM USER_OBJECTS A;
Table created.
SQL> ALTER TABLE T ADD PRIMARY KEY (ID);
Table altered.
SQL> ALTER TABLE T MODIFY NAME NOT NULL;
Table altered.
SQL> CREATE TABLE T_INTER
二 (ID NUMBER, NAME VARCHAR二(30) NOT NULL, TYPE VARCHAR二(30))
三 PARTITION BY HASH (ID)
四 PARTITIONS 四;
Table created.
SQL> SET SERVEROUT ON SIZE 1000000
SQL> BEGIN
二 DBMS_REDEFINITION.CAN_REDEF_TABLE(USER, 'T');
三 END;
四 /
PL/SQL procedure successfully completed.
SQL> BEGIN
二 DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'T', 'T_INTER');
三 END;
四 /
PL/SQL procedure successfully completed.
SQL> VAR V_NUM NUMBER
SQL> BEGIN
二 DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(USER, 'T', 'T_INTER',
三 DBMS_REDEFINITION.CONS_ORIG_PARAMS, TRUE, TRUE, TRUE, FALSE, :V_NUM, TRUE);
四 END;
五 /
BEGIN
*
ERROR at line 一:
ORA-01442: column to be modified to NOT NULL is already NOT NULL
ORA-06512: at "SYS.DBMS_REDEFINITION", line 984
ORA-06512: at "SYS.DBMS_REDEFINITION", line 1726
ORA-06512: at line 二
关于这种景况,除去避免在建表的时分指定NOT NULL以外,还可以经过指定COPY_TABLE_DEPENDENTS历程的IGNORE_ERRORS参数为TRUE的形式,来避免差错间断进程的施行。
SQL> BEGIN
二 DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(USER, 'T', 'T_INTER',
三 DBMS_REDEFINITION.CONS_ORIG_PARAMS, TRUE, TRUE, TRUE, TRUE, :V_NUM, TRUE);
四 END;
五 /
PL/SQL procedure successfully completed.
SQL> PRINT V_NUM
V_NUM
----------
一
上边就忽略了NOT NULL约束挑动的错处,故而完成了表的相干对象的复制进程,但是这种步骤也存在问题,例如回到的差错数很多,就很难判断毕竟发作了哪些差错。这时候倒不如让错误信息显示出来更直接一些。
即便COPY_TABLE_DEPENDENTS出现了错处也不在乎,可以检察目标表上的目录、约束、权限和触发器的状况,判断目前施行到哪一步报错。至于已经拷贝的对象,再度运作COPY_TABLE_DEPENDENTS进程时,将这品种型对应的参数放为FALSE即可。
SQL> BEGIN
二 DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER, 'T', 'T_INTER');
三 END;
四 /
PL/SQL procedure successfully completed.
应全部委以对象都顺利的复制完成,可以施行FINISH_REDEF_TABLE历程来完成在线重定义的操作
本文来源:
我的异常网
Java Exception
Dotnet Exception
Oracle Exception
- 1330 - 成员名称不能与它们的封闭类型相同
- 1331 - 您的请求出现错误
- 1332 - 无效索引
- 1333 - .net 2.0 发布失败的原因一般有哪些
- 1334 - 访问出错时怎么能返回给客户端带Fault标签的信息
- 1335 - 请参阅 InnerException 以了解详细信息
- 1336 - System.Net.Sockets.SocketException: 由于目标机器积极拒绝,无法连接
- 1337 - System.Data.OleDb.OleDbException: 未找到 Oracle 客户端和网络组件
- 1338 - RDLC报表文本框显示错误号
- 1339 - Object reference not set to an instance of an object
- 1340 - 未将对象引用设置到对象实例
- 1341 - SqlDataAdpter1创建DataSet11出现错误
- 1342 - error C2059
- 1343 - vs2008平台下c#能用的皮肤
- 1344 - 未找到提供程序。该程序可能未正确安装
- 1345 - System.TypeLoadException
- 1346 - ACTIVEREPORT打印数据错位或者数据丢失
- 1347 - 基本语句出错
- 1348 - ORA-00904: 无效列名
- 1349 - Oracle Database 10gSQL开发指南