准备更新时区文件
时区文件升级有两个不同的阶段:准备和升级。虽然准备步骤并非必需,但强烈建议您执行此步骤。在此步骤中,您将了解哪些数据将受到运行 PL/SQL 过程 DBMS_DST.FIND_AFFECTED_TABLES
的影响。有关准备窗口的更多信息,请参阅 Oracle 数据库文档中的使用时区数据升级时区文件和时间戳
准备更新时区文件
-
使用 SQL 客户端连接到您的 Oracle 数据库。
-
确定当前使用的时区文件版本。
SELECT * FROM V$TIMEZONE_FILE;
-
确定数据库实例上可用的最新时区文件版本。
SELECT DBMS_DST.GET_LATEST_TIMEZONE_VERSION FROM DUAL;
-
确定具有类型为
TIMESTAMP WITH LOCAL TIME ZONE
或TIMESTAMP WITH TIME ZONE
的列的表总大小。SELECT SUM(BYTES)/1024/1024/1024 "Total_size_w_TSTZ_columns_GB" FROM DBA_SEGMENTS WHERE SEGMENT_TYPE LIKE 'TABLE%' AND (OWNER, SEGMENT_NAME) IN (SELECT OWNER, TABLE_NAME FROM DBA_TAB_COLUMNS WHERE DATA_TYPE LIKE 'TIMESTAMP%TIME ZONE');
-
确定具有类型为
TIMESTAMP WITH LOCAL TIME ZONE
或TIMESTAMP WITH TIME ZONE
的列的段的名称和大小。SELECT OWNER, SEGMENT_NAME, SUM(BYTES)/1024/1024/1024 "SEGMENT_SIZE_W_TSTZ_COLUMNS_GB" FROM DBA_SEGMENTS WHERE SEGMENT_TYPE LIKE 'TABLE%' AND (OWNER, SEGMENT_NAME) IN (SELECT OWNER, TABLE_NAME FROM DBA_TAB_COLUMNS WHERE DATA_TYPE LIKE 'TIMESTAMP%TIME ZONE') GROUP BY OWNER, SEGMENT_NAME;
-
运行准备步骤。
-
过程
DBMS_DST.CREATE_AFFECTED_TABLE
可创建表来存储任何受影响的数据。将此表的名称传递给DBMS_DST.FIND_AFFECTED_TABLES
过程。有关更多信息,请参阅 Oracle 数据库文档中的 CREATE_AFFECTED_TABLE 过程。 -
此过程
CREATE_ERROR_TABLE
创建用于记录错误的表。有关更多信息,请参阅 Oracle 数据库文档中的 CREATE_ERROR_TABLE 过程。
以下示例创建受影响的数据和错误表,并查找所有受影响的表。
EXEC DBMS_DST.CREATE_ERROR_TABLE('
my_error_table
') EXEC DBMS_DST.CREATE_AFFECTED_TABLE('my_affected_table
') EXEC DBMS_DST.BEGIN_PREPARE(new_version
); EXEC DBMS_DST.FIND_AFFECTED_TABLES('my_affected_table
', TRUE, 'my_error_table
'); EXEC DBMS_DST.END_PREPARE; SELECT * FROMmy_affected_table
; SELECT * FROMmy_error_table
; -
-
查询受影响表和错误表。
SELECT * FROM
my_affected_table
; SELECT * FROMmy_error_table
;