含大字段的表迁移表空间

       由于前期一些应用没有按照规范部署,将一些表建到SYSTEM表空间下,现在需要将这样的表迁出。普通的表迁移表空间可以采用 alter table table_name move tablespace new_tablespace 语句来轻松搞定,但是包含有大字段如CLOB、BLOB的表就需要特殊处理了。初步计算了一下,这样的表数量不少,估计又少不了几天的折腾

如果用alter table table_name move tablespace new_tablespace语句来执行含大字段的表时,语句执行是不会报错的,但是当我们删除表空间或者表时就会看到如下情况

SQL> alter table HDCMS.test move tablespace users;

表已更改。

SQL>drop tablespace hdwh INCLUDING CONTENTS;

 drop tablespace hdwh INCLUDING CONTENTS

*

第 1 行出现错误:

ORA-22868: 具有 LOB 的表包含有位于不同表空间的段

以下是我实验成功的方法

1.导出表

EXP username/password@db_server FILE=c:\exp_filename.dmp LOG=c:\exp_logname.LOG  TABLES=( TEST)

2.删除表和表空间

3.采用导出参数 indexfile 导入表

IMP username/password@db_server FILE=c:\exp_filename.dmp LOG=c:\imp_indexfile.LOG INDEXFILE=c:\altertablespace_table_index.SQL TABLES=( HDCMS.TEST)

这步的操作并不是要导入表和数据,真正的目的是获取创建表和索引的脚本。其中,指定参数INDEXFILE后,系统就将创建表和索引的语句写到一个文件,即指定的altertablespace_table_index.SQL 中。该文件中包含了所有创建索引(CREATE INDEX)语句和创建表(CREATETABLE)语句。但是这里所有创建表的语句均加了注释标志。在任何文本编辑器中打开并编辑该文件,去掉所有创建表语句的注释标志,将所有的表空间名称由A替换为B,同时对所有的创建索引语句加上注释标志。这些工作作完以后,在SQL/PLUS中运行该脚本文件,这些表就被创建,其表空间由A变为B(此时仅仅只是表结构而没有数据的)。

4.采用导入参数INDEXES=N 和 IGNORE=Y 将数据导入表中

IMP username/password@db_server INDEXES=N IGNORE=Y FILE=c:\exp_filename.dmp   LOG=c:\imp_tabledata.LOG TABLE=(TEST)

其中,参数INDEXES=N是指将数据导入数据库中时不加索引。IGNORE=Y是指在导入数据过程中,忽略表已经存在(table already exists)的错误。这样Oralce就将数据和一些约束条件导入到第3步创建的表中。

5. 创建索引

在文本编辑器中重新打开在第3步中创建的altertablespace_table_index.SQL 脚本文件,这次,将所有创建表(CREATE TABLE)的语句加上注释标志,然后将所有的创建索引(CREATE INDEX)语句去掉注释标志。在SQL/PLUS中再次运行该脚本文件。

这里我们可能在创建索引的过程中会报ORA-00955: 名称已由现有对象使用 错误,这是由于虽然我们在上一步中虽然用了INDEXES=N参数,但是主键对应的唯一索引将无条件恢复,这是为了保证数据的完整性。

至此,我们就成功完成了将数据表从表空间A转换到表空间B的工作。

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

转载于:http://blog.itpub.net/9421572/viewspace-201787/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在一个拥有 15 亿行数据的大数据上添加字段是一个复杂的操作,需要考虑到数据的规模和性能。下面是一些可能的方法: 1. 使用 ALTER TABLE 命令:如果数据库支持 ALTER TABLE 命令,并且具备足够的处理能力和存储空间,您可以直接使用 ALTER TABLE 命令来添加字段。但是,这个过程可能会非常耗时,并且对数据库性能会有一定的影响。最好在非高峰期执行此操作,并确保有足够的磁盘空间和系统资源。 2. 分批添加字段:为了减少 ALTER TABLE 操作的影响,您可以将添加字段的过程分成多个较小的批次。例如,可以先创建一个包新字段的临时,并使用适当的索引和约束进行优化。然后,您可以使用批处理或脚本逐步将数据从原始迁移到新中,最后将新重命名为原始,完成字段添加操作。 3. 水平分区:如果您的数据库支持水平分区,可以考虑在添加字段之前对数据进行分区。这样,您可以只在某些分区上执行 ALTER TABLE 操作,而不需要对整个进行操作。这种方法可以减少影响范围并提高操作效率。 4. 数据迁移工具:如果您的数据库支持数据迁移工具,可以使用这些工具来将原始的数据导出到一个新的中,然后在新上添加字段。完成后,再将数据导入新。这种方法可能需要更多的时间和资源,但可以降低对生产环境的影响。 无论哪种方法,都建议在进行任何操作之前,先在测试环境中进行充分的测试和验证。此外,根据实际情况,您可能需要与数据库管理员或专业的数据库咨询服务进行进一步的讨论和规划。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值