您的位置:首页 > 数据库

检查行链接和行迁移的方法

2006-05-03 13:42 453 查看
1.执行

utlchain.sql脚本
SQL> CREATE TABLE chained_rows (
  2  owner_name         VARCHAR2(30),
  3  table_name         VARCHAR2(30),
  4  cluster_name       VARCHAR2(30),
  5  partition_name     VARCHAR2(30),
  6  head_rowid         ROWID,
  7  analyze_timestamp  DATE );

创建chained_rows表,然后分析
SQL> ANALYZE TABLE oe.orders LIST CHAINED ROWS;
Table analyzed.

SQL> SELECT  owner_name, table_name, head_rowid
  2    FROM  chained_rows
  3    WHERE table_name = 'ORDERS';
OWNER_NAME  TABLE_NAME  HEAD_ROWID       
----------  ----------  ------------------
SALES       ORDER_HIST  AAAAluAAHAAAAA1AAA
SALES       ORDER_HIST  AAAAluAAHAAAAA1AAB

2.对行迁移的处理
  a).exp/drop/imp table
  b).alter table emp move ...;
  c).查找迁移的行,拷贝迁移的行到一个新表,删除原记录,然后从新表将行拷贝到原表

3.相关的脚本
 
/* Get the name of the table with migrated rows */
ACCEPT table_name PROMPT 'Enter the name of the table with migrated rows: '

/* Clean up from last execution */
SET ECHO OFF
DROP TABLE migrated_rows;
DROP TABLE chained_rows;

/* Create the CHAINED_ROWS table */
@?/rdbms/admin/utlchain
SET ECHO ON
SPOOL fix_mig
/* List the chained & migrated rows */
ANALYZE TABLE &table_name LIST CHAINED ROWS;
[align=left]------------------------------------------------------------------------[/align]
[align=left] [/align]
[align=left]/* Copy the chained/migrated rows to another table */ [/align]
[align=left]CREATE TABLE migrated_rows AS [/align]
[align=left]  SELECT orig.* [/align]
[align=left]  FROM &table_name orig, chained_rows cr [/align]
[align=left]  WHERE orig.rowid = cr.head_rowid [/align]
[align=left]  AND cr.table_name = upper('&table_name'); [/align]
[align=left][/align]
[align=left]/* Delete the chained/migrated rows from the original table */ [/align]
[align=left]DELETE FROM &table_name [/align]
[align=left]WHERE rowid IN ( [/align]
[align=left]  SELECT head_rowid [/align]
[align=left]  FROM chained_rows); [/align]
[align=left][/align]
[align=left]/* Copy the chained/migrated rows back into the original table */ [/align]
[align=left]INSERT INTO &table_name [/align]
[align=left]  SELECT * [/align]
[align=left]  FROM migrated_rows; [/align]
[align=left]SPOOL OFF [/align]
[align=left][/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息