如果联机表重新定义失败,则可以检查DBA_REDEFINITION_STATUS
视图来查看错误信息和可重新启动的信息。
如果RESTARTABLE
是Y
,则可以更正错误并重新启动上次停止的在线重新定义过程。如果RESTARTABLE
是N
,则必须中止重定义操作。
在某些情况下,可以在失败后重新启动表的在线重新定义。重新启动操作意味着在线重新定义过程从故障停止的地方开始,并且不会丢失任何工作。例如,如果SYNC_INTERIM_TABLE
由于“无法表空间中的扩展表”错误而导致过程调用失败,则可以通过增加空间不足并重新运行SYNC_INTERIM_TABLE
过程调用的表空间大小来纠正问题。
如果联机表重新定义失败,则可以完成以下步骤以重新启动它:
- 查询
DBA_REDEFINITION_STATUS
视图以确定故障原因以及纠正故障所需的操作。例如,运行以下查询:SELECT BASE_TABLE_NAME, INTERIM_OBJECT_NAME, OPERATION, STATUS, RESTARTABLE, ACTION FROM DBA_REDEFINITION_STATUS;
如果
RESTARTABLE
值为Y
,则可以重新开始操作。如果RESTARTABLE
值为N
,则无法重新启动操作,并且必须从头开始重新定义。 - 执行上一步查询结果中指定的操作。
- 使用查询结果中指定的操作重新启动在线重新定义,并运行所有后续操作以完成表的在线重新定义。
Example SYNC_INTERIM_TABLE Procedure Call Failure
此示例说明重新启动在SYNC_INTERIM_TABLE
过程调用上失败的联机重定义操作,但出现以下错误:
BEGIN
DBMS_REDEFINITION.SYNC_INTERIM_TABLE('U2', 'ORIG', 'INT');
END;
/
ORA-42009: error occurred while synchronizing the redefinition
ORA-01653: unable to extend table U1.INT by 8 in tablespace my_tbs
ORA-06512: at "SYS.DBMS_REDEFINITION", line 148
ORA-06512: at "SYS.DBMS_REDEFINITION", line 2807
ORA-06512: at line 2
-
查询
DBA_REDEFINITION_STATUS
视图:SELECT BASE_TABLE_NAME, INT_TABLE_NAME, OPERATION, STATUS, RESTARTABLE, ACTION FROM DBA_REDEFINITION_STATUS; BASE_TABLE_NAME INT_OBJ_NAME OPERATION STATUS RESTARTABLE ACTION --------------- ------------ ------------------ ------- ----------- --------- ORIG INT SYNC_INTERIM_TABLE FAILED Y Fix error
在线重定义操作可以重新开始,因为
RESTARTABLE
是Y
在查询结果中。要重新启动操作,请更正操作失败时返回的错误并重新启动操作。在此示例中,错误为“ORA-01653: unable to extend tableU1.INT
by 8 in tablespacemy_tbs
”. my_tbs表空间
通过向其添加数据文件来增加表空间的大小:ALTER TABLESPACE my_tbs ADD DATAFILE '/u02/oracle/data/my_tbs2.dbf' SIZE 100M;
-
重新运行
SYNC_INTERIM_TABLE
程序调用:BEGIN DBMS_REDEFINITION.SYNC_INTERIM_TABLE('U2', 'ORIG', 'INT'); END; /