首页 > 新闻

快速复制一张大表讨论(转)

时间:2009-11-30 04:30:50  作者:  我要投稿
Linux初探欢迎您的投稿,投放方法请点击这里查看,我们会定期赠送精美小礼品给优秀的投稿作者。海纳百川 取则行远!LinuxGoo欢迎您的到来。
快速复制一张大表讨论有这样的一类需求,快速复制一张表,而这张表的数据量又非常的大。比方说本来是分区表,要把它重新变成非分区表,怎么能够快速的完成这样的操作......

快速复制一张大表讨论

有这样的一类需求,快速复制一张表,而这张表的数据量又非常的大。比方说本来是分区表,要把它重新变成非分区表,怎么能够快速的完成这样的操作呢?我下面给出2种大致的方法:

第一,就是利用CTAS方式来创建一张新表,当然要想加快速度,在数据库不是force logging的前提下,可以使用nologging方式来创建表
SQL> create table auction_auctions_bak
2 tablespace tbs_taobao
3 nologging
4 as
5 select * from auction_auctions;

Table created.

SQL> select count(*) from auction_auctions;

COUNT(*)
----------
4179779

SQL> select count(*) from auction_auctions_bak;

COUNT(*)
----------
4179779

在建立完成表以后,要注意将表的属性重新变成logging:
SQL> select logging from tabs where table_name='AUCTION_AUCTIONS_BAK';

LOG
---
NO

SQL> alter table auction_auctions_bak logging;

Table altered.

当然也可以这样:CREATE TABLE ... AS SELECT .. WHERE 1=2;然后使用 INSERT /* APPEND */ INTO .. SELECT ...。

最后将表名更改过来,建立一下新的索引,然后就可以了。

SQL> drop table auction_auctions;

Table dropped.

SQL> rename auction_auctions_bak to auction_auctions;

Table renamed.

第二,在原理上,它其实和第一种方式差不多,就是阻止数据库记录日志来加快速度,大概过程如下:

如果您需转载 快速复制一张大表讨论(转),请注明来自LinuxGoo.com,其版权归原作者所有。请广大网友留言时遵纪守法,使用文明用语。如果您在应用中有什么问题,请在下面留言,我们会尽快解答。
来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
栏目热门