更改Oracle数据库表的表空间

2016-02-19 21:15 7 1 收藏

岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的更改Oracle数据库表的表空间,希望大家看完后能赶快学习起来。

【 tulaoshi.com - 编程语言 】

  在Oracle数据库管理系统中,创建库表(table)时要分配一个表空间(tablespace),如果未指定表空间,则使用系统用户确省的表空间。

  在Oracle实际应用中,我们可能会遇到这样的问题。处于性能或者其他方面的考虑,需要改变某个表或者是某个用户的所有表的表空间。通常的做法就是首先将表删除,然后重新建表,在新建表时将表空间指定到我们需要改变的表空间。如果该用户已经保存了大量数据,这种办法就就显得不是很方便,因为有大量数据需要提前备份出来。下面介绍一种利用数据库的导出/导入功能来实现重新组织数据库表空间的方法。

  下面是一个简单的例子,假定要将用户oa下的全部表从表空间A转换到表空间B,具体步骤(在Oracle 9i for linux环境)如下:

  1.1. 导出db_zgxt下的所有表(Dos控制台下) 导出db_zgxt下的所有表(Dos控制台下)1. 导出db_zgxt下的所有表(Dos控制台下)

  EXP oa/password@pararmount_server FILE=d:10_27_oa.dmp LOG=d:10_27_oa.LOG


  2. 删除oa下的所有表(在SQL/PLUS中)

可以采用批处理的方式删除掉db_zgxt下的所有表,生成批处理的语句如下:
--其中set head off将表头信息去掉
SET HEAD OFF
SPOOL c:drop_tables.sql
select 'drop table '||table_name||';' from user_tables;
spool off;
@c:drop_tables.sql;
sql @drop_tables.sql

  3. 采用导入参数 INDEXFILE导入oa用户下的所有表(Dos控制台下)
把建表和索引的语句导出到文件,其中建表语句是加注释的,并没有实际导入

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  IMP oa/password@paramount_server FULL=Y FILE=d:10_27_oa.dmp INDEXFILE=d:altertablespace_table_index.SQL LOG=d:altertablespace.LOG

  其中,指定参数INDEXFILE后,系统就将创建表和索引的语句写到一个文件,这里是altertablespace_table_index.SQL 中。该文件中包含了所有创建索引(CREATE INDEX)语句和创建表(CREATETABLE)语句,但是这里所有创建表的语句均加了注释标志。在任何文本编辑器中打开并编辑该文件,去掉所有创建表语句的注释标志,将所有的表空间名称由A替换为B,同时对所有的创建索引语句加上注释标志。这些工作作完以后,在SQL/PLUS中运行该脚本文件,这些表就被创建,其表空间由A变为B。
采用导入参数INDEXES=N 和IGNORE=Y将db_zgxt用户的表数据导入库中(Dos控制台下)
4. 采用导入参数INDEXES=N 和IGNORE=Y将oa用户的表数据导入库中(Dos控制台下)

  IMP oa/password@paramount_server FULL=Y INDEXES=N FILE=d:10_27_oa.dmp IGNORE=Y LOG=d:altertablespace.LOG

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

  5. 创建索引

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

  至此,我们就成功完成了将oa用户下的全部表从表空间A转换到表空间B的工作。当然你可以只导入一部分表。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  注:本文参考网上搜到的一篇文章,本人在更新的平台(oracle 9i)上实际操作后修改成此文。如果侵犯到谁的版权,请与我联系。

来源:http://www.tulaoshi.com/n/20160219/1625677.html

延伸阅读
说明:下文中的一些说明和示例代码摘自CSDN,恕不一一指明出处,在此一并对相关作者表示感谢! 1 语法 在Oracle中,可以创建以下两种临时表: 1) 会话特有的临时表 CREATE GLOBAL TEMPORARY ( ) ON COMMIT PRESERVE ROWS; 2) 事务特有的临时表 CREATE GLOBAL TEMPORARY ( ) ON COMMIT DELETE ROW...
最近由于单位数据库硬盘空间不足,整理的时候查了许多文章,也进行了测试,整理后得出一些经验供大家参考。  首先,在网上看到一篇文章,如何Shrink Undo表空间,释放过度占用的空间 ,用上面的指令看了一下,发现我们的硬盘上的UNDO空间也占了2G,所以想到先把这个空间清出来,以解燃眉之急,所以立即进行了测试。 测试...
Oracle 10g 中出现表名:BIN$2cMp4FjwQ2Cw3Lj+BxLYTw==$0 最近发现Oracle中出现了这些奇怪的表名,上网查找后发现是oracle10g的回收站功能,并没有彻底的删除表,而是把表放入回收站,最后就出现了这样一堆奇怪的表名。。。。 清除的方法如下: purge table origenal_tableName; purge index origenal_indexName; 查询垃圾信息,可以用...
在Oracle数据库中,DBA可以通过观测一定的表或视图来了解当前空间的使用状况,进而作出可能的调整决定。 一.表空间的自由空间 通过对表空间的自由空间的观察,可用来判断分配给某个表空间的空间是太多还是不够。请看下列的语句 SQL select a.file_id "FileNo",a.tablespace_name"Tablespace_name",2 ...
以下是引用片段: 代码如下: ImportsSystem.Data ImportsSystem.Data.SqlClient PublicClassForm1 InheritsSystem.Windows.Forms.Form PrivateConnectionStringAsString="DataSource=.;InitialCatalog=;UserId=sa;Password=;" PrivatereaderAsSqlDataReader=Nothing PrivateconnAsSqlConnection=Nothing ...

经验教程

236

收藏

29
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部