生产系统中重组表数据应注意的问题

本文详细介绍了当生产系统中的表因数据块过多、无序等原因影响性能时,对其进行重组的具体步骤。包括数据导出、创建备份表、删除旧表、重建主键和其他索引、恢复触发器等操作。
有时候,在生产系统中发现某个表影响性能时,譬如说数据占用的数据块过多,过于无序,行迁移过多,主键建立的不够合理等,就需要对其数据进行重组。

重组的过程如下:

1、先用EXP 或者数据泵将该表的数据导出一份

Exp test/test buffer=512000000 file=d:\test.dmp tables=a

Expdp test/test directory=dump_dir dumpfile=d:\test.dp tables=a

2、登陆PL/SQL 或者TOAD 等工具软件,将表的定义截取出来,还有其上的触发器脚本,也要单独存储出来,切记!

3、登陆用户,在数据库中创建备份表,按照期望的主键顺序

SQL>create table a_lxy (如果需要更换表空间,可在此增加TABLESPACE "D_NEW")as select * from a order by code;

Table created

SQL>select count(*) from a;

SQL>select count(*) from a_lxy;

确认两者记录数相同。

4、摘除旧表,将备份表重命名为原来的表名。

Drop table a ;

alter table a_lxy rename to a;

5、增加主键约束:

SQL> ALTER TABLE "TEST"."A" add CONSTRAINT "PK_A" PRIMARY KEY("CODE") ;

Table altered

6、逐一增加其他的索引,先增加唯一性的,再增加非唯一性的

SQL>CREATE INDEX "TEST"."INX_A_SJLB" ON "TEST"."A" ("LB", "SJLB", "YXBJ")  COMPUTE STATISTICS  TABLESPACE "INDX" ;

 Index created

.......

7、恢复触发器

用步骤2中获取的触发器脚本,恢复表上的触发器。

8、完整性约束

SQL>  ALTER TABLE "TEST"."A" add CONSTRAINT "CHK_ON_CODE" CHECK ( lb='01' and length(code)=8) ENABLE;

 Table altered

.......

9、字段上的缺省值

这个是比较容易忽视的问题,步骤3创建备份表时,没有带上这些缺省值的设置,这是需要注意的问题,否则会引起应用问题。

10、对表进行分析

exec dbms_stats.gather_table_stats(ownname => 'TEST', tabname =>'A', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,method_opt => 'FOR ALL INDEXED COLUMNS SIZE AUTO', cascade=> TRUE);

11、设置表的缓存:

SQL> alter table test.a CACHE;

 Table altered

SQL>alter index PK_A storage (buffer_pool keep) ;

这个案例告诉我们,对于生产系统,再简单的表也要考虑细致了,有些是经过测试后,仍然可能遗漏的问题,一定要将新表的定义和旧表的定义对比一下,切记!!否则轻易不要尝试这类的操作。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7177735/viewspace-747163/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7177735/viewspace-747163/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值