龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Oracle 技术 >

Oracle 10g R2特性之数据仓库集成特性(1)(6)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
现在,您就可以启动重新定义过程: begin dbms_redefinition.start_redef_table( uname = 'ARUP', orig_table = 'TRANS', int_table = 'TRANS_TEMP', col_mapping = NULL, options_flag = dbms_rede

现在,您就可以启动重新定义过程:

begin
dbms_redefinition.start_redef_table( 
uname        => 'ARUP',  
orig_table   => 'TRANS', 
int_table    => 'TRANS_TEMP', 
col_mapping  => NULL, 
options_flag => dbms_redefinition.cons_use_rowid, 
part_name    => 'Y03Q2'); 
end;
/

该调用有几个注意事项。第一,将参数 col_mapping 设置为 NULL;在单个分区重新定义中,该参数没有意义。第二,一个新参数 part_name 指定了要重新定义的分区。第三,注意其中没有 COPY_TABLE_DEPENDENTS 参数,该参数也没有意义,原因是表本身无法更改;只移动分区。

如果该表很大,此操作可能持续很长时间;因此请在操作过程中对它进行同步。

begin
dbms_redefinition.sync_interim_table( 
uname      => 'ARUP',  
orig_table => 'TRANS', 
int_table  => 'TRANS_TEMP', 
part_name  => 'Y03Q2'); 
end;
/

最后,使用以下代码完成该过程

begin
dbms_redefinition.finish_redef_table( 
uname      => 'ARUP',  
orig_table => 'TRANS', 
int_table  => 'TRANS_TEMP', 
part_name  => 'Y03Q2'); 
end;

此时,分区 Y03Q2 位于表空间 TRANSY03Q2 中。如果该表存在任何全局索引,则它们将被标记为 UNUSABLE 并且必须被重新构建。

单个分区重新定义对于跨表空间移动分区(一个常见的信息生命周期管理任务)很有用。但显而易见,其中存在几个限制。例如,您无法在重新定义过程中更改分区方法(即从范围更改为散列)或更改表的结构。

逐块地删除表

您注意到过删除一个分区的表需要多长时间吗?这是因为每个分区都是一个必须删除的段。在 Oracle 数据库 10g 第 2 版中,当您删除分区的表时,分区将逐个被删除。由于每个分区是单独删除的,因此所需的资源要比删除整个表少。

要演示这个新行为,您可以使用 10046 跟踪跟踪该会话。

alter session set events '10046 trace name context forever, level 12';

然后,删除该表。如果查看跟踪文件,则将看到分区表删除的代码:

delete from tabpart$ where bo# = :1
delete from partobj$ where obj#=:1
delete from partcol$ where obj#=:1
delete from subpartcol$ where obj#=:1

请注意,分区是按顺序删除的。该方法最大限度地降低了删除过程中的资源使用率并增强了性能。

(责任编辑 火凤凰 sunsj@51cto.com  TEL:(010)68476636-8007)


精彩图集

赞助商链接