一、使用imp/exp。先导出源库,再创建新库把表空间创建好,然后再导入。(据说这样可以,前提是新的库里面不能有与源库相同名字的表空间。有待验证!)

二、使用脚本进行修改。据目前所了解,正长情况下需要修改表的空间表的索引的空间,如果涉及到BOLB字段的表,修改的方式又不一样了! 
正常情况下的修改脚本: 
1.修改表的空间 
alter table TABLE_NAME move tablespace TABLESPACENAME 

查询当前用户下的所有表 
select 'alter table  '|| table_name ||'  move tablespace tablespacename;'  from user_all_tables; 

2.修改表的索引的空间 
alter index INDEX_NAME rebuild tablespace TABLESPACENAME 

查询当前用户下的所有索引 
select 'alter index '|| index_name ||' rebuild tablespace tablespacename;' from user_indexes; 

可以使用脚本执行查询的结果,这样就可以批量处理!

不正常情况即含有BLOB字段的表: 
参考下面的文档

本人已经执行过,是可行的,但是不知道有没有漏掉数据库中其它对象。是否还存在有对象的表空间需要修改,需要进一步发现或有数据库高手帮忙讲解则不胜感激!目前的修改在项目中还没有出现问题!

在移植看注意研究了下ORACLE ALTER TABLE MOVE 的语法:

ALTER TABLE table_name MOVE [ONLINE] tablespace_name; 
通过上面的语句可以移植表到新表空间,

如果要移植LOB字典需要参考以下语法: 
ALTER TABLE table_name LOB (lob_item) STORE AS [lob_segment] 
      ( 
        TABLESPACE tablespace_name 
                   (STORAGE.....) 
           ENABLE|DISABLE STORAGE IN ROW 
           CHUNK integer 
           PCTVERSION integer 
            RETENTION 
            FREEPOOLS integer 
            CACHE|NOCACHE|CACHE READS 
           INDEX lobindexname

(TABLESPACE tablesapce_name

((STORAGE.....)) 
)

....

注解:

LOB (lob_item):表中的lob字段 
STORE AS [lob_segment]:每个lob字段在表创建后系统都会自动单独创建一个段,可以通过这个参数手动指定一个段名 
   tablespace_name:LOB字段新的存储表空间 
(STORAGE.....):指定tablespace_name的存储属性 
    ENABLE STORAGE IN ROW:如果设置了enable storage in row 那么oracle会自动将小于4000bytes的数据存储在行内, 这是ORACLE的默认值,对于大于4000字节的lob字段保存在lob段(同disable storage in row),在表段将保留36-84字节的控制信息。对于disable storage in row,Oracle将lob字段分开保存在lob段中,而仅仅在行位置保留20字节的指针。对于相当于disable storage in row的这部分(也就是单独保存在LOB段的这部分数据),UNDO仅仅是记录指针与相关lob索引改变,如果发生更新操作等DML操作,原始数据将保留在LOB段。

DISABLE STORAGE IN ROW:如果DISABLE这个属性,那么lob数据会在行外存储,行内只存储该lob值得指针,而且这个属性在表 
创建后只能在MOVE表时才可以被改变 
    CHUNK:是一个很特别的属性,对一次LOB数据的操作(插入或更新),因该分配多少存储空间,指定的值最好是数据库块的倍数,而且指定的值不能大于表空间区间中NEXT的值, 要不然ORACLE会return一个错误,如果以前已经设置这个值了,那么在后期指定的值是不能被改变的。

storage as ( CHUNK bytes )表示对于disable storage in row的这部分,最小的LOB块的大小,必须是数据库块(DB_BLOCK_SIZE)的整数倍。一个chunk最多只保留一行LOB数据,也就是说,如果你设置了32K的CHUNK,但是如果LOB字段大小只有4K,也将占用32K的空间

storage as(cache|nocahce)表示是否允许lob段经过buffer cache并缓存。默认是nocache,表示直接读与直接写,不经过数据库的data buffer。所以,默认情况下,对于单独保存在LOB段的这部分数据,在发生物理读的时候,是直接读,如direct path read (lob)

storage as(nocache logging |nocache nologging),logging/nologging属性只对nocache方式生效,默认是logging,如果是nologging方式,对于 保存在行外的log部分,在update等DML操作时将不记录redo日志。

PCTVERSION integer、RETENTION:都是ORACLE用来管理LOB字段镜像数据的。在LOB 数据的更新过程中, 
ORACLE没有用UNDO TABLESPACE空间,而是从LOB字段所在的表空间里划分一段空间来做镜像空间的, 
这个空间的大小由PCTVERSION参数控制,默认值为10,代表划分表空间的10%作为镜像空间, 
每个镜像空间的单元大小由CHUNK参数指定,pctversion可以使用在manual undo mode和automatic undo mode 环境中. 
retention应用了automatic undo mode中的undo_retention通过时间来管理lob镜像空间. 
pctversion和retention不能同时被指定.建议数据库在automatic undo mode下使用retention参数。 
FREEPOOLS integer:给LOG segment指定free list.RAC环境下integer为实例的个数.单实例环境下为1.在automatic undo mode下oracle默认采用 
FREEPOOLS来管理空闲块列表。除非我们在表的storage配置中指定了freelist groups参数. 
CACHE|NOCACHE|CACHE READS:指定lob块是否在database buffer中缓存. 
INDEX lobindexname (TABLESPACE tablesapce_name ((STORAGE.....):给lob列指定索引存储参数 
举例: 
SQL> show parameter db_create_file_dest

SQL> create tablespace test datafile size 100M autoextend off; 
SQL> create table test(a varchar2(100), b clob, d blob) pctfree 10 tablespace test;

SQL> desc test 
SQL> SELECT segment_name,tablespace_name,segment_type FROM dba_segments WHERE tablespace_name='TEST';

我们发现每个LOB字段单独有一个LOGSEGMENT和LOBINDEX;

SQL> set linesize 200 
col table_name format a5 
col column_name format a5 
SELECT b.table_name, 
a.segment_name, 
b.index_name, 
a.segment_type, 
b.column_name, 
a.tablespace_name, 
b.chunk, 
b.cache, 
b.freepools, 
b.pctversion, 
b.retention 
FROM dba_segments a,dba_lobs b 
WHERE a.segment_name = b.segment_name 
AND a.tablespace_name = 'TEST' 
/

SQL>

从上面的结果我们可以观察到LOB字段的各个属性. 
下面我们对LOB字段move到另一个表空间

SQL> create tablespace lob_test datafile size 100M autoextend off;

SQL> ALTER TABLE TEST MOVE LOB(B) STORE AS TEST_B ( 
TABLESPACE lob_test 
DISABLE STORAGE IN ROW 
CHUNK 16384 
RETENTION 
FREEPOOLS 1 
NOCACHE); 
SQL> ALTER TABLE TEST MOVE LOB(D) STORE AS TEST_D ( 
TABLESPACE lob_test 
DISABLE STORAGE IN ROW 
CHUNK 16384 
RETENTION 
FREEPOOLS 1 
NOCACHE); 
SQL> SELECT segment_name,tablespace_name,segment_type FROM dba_segments WHERE tablespace_name='TEST';

SQL> set linesize 200 
col table_name format a5 
col column_name format a5 
SELECT b.table_name, 
a.segment_name, 
b.index_name, 
a.segment_type, 
b.column_name, 
a.tablespace_name, 
b.chunk, 
b.cache, 
b.freepools, 
b.pctversion, 
b.retention 
FROM dba_segments a,dba_lobs b 
WHERE a.segment_name = b.segment_name 
AND a.tablespace_name = 'LOB_TEST' 
/SQL>

在一些复杂情况下可能需要连表一起移植 
alter table table_name move [tablespace_name] lob (lob_item) store as [lobsegmentname] (tablespace tablespace_name.....); 
移植分区中lob 
alter table table_name move partition [partition_name] lob (lob_item) store as [logsegmentname] (tablespace_name.....); 
移植分区表 
alter table table_name move partition [partition_name] tablespace_name lob (lob_item) store as [logsegmentname] (tablespace_name.....); 
如果不需要修改lobsegmentname,可以同时移植多个列 
alter table table_name move lob (lob_item1,lob_item2,lob_item3...) store as [lobsegmentname] (tablespace tablespace_name.....);

LOB段也可以利用move来重整数据,以下的语句会将表与lob字段move到指定的表空间:

alter table table_name move [tablespace tbs_name]

lob(lob_field1,lob_field2) store as (tablespace new_tbs_name);

如果LOB字段在分区表中,则增加partition关键字,如

alter table table_name move [partition partname] [tablespace tbs_name]

lob(field) store as (tablespace new_tbs_name);

在数据库中合理的存储LOB列,不仅可以提升性能,而且还可以有效的管理存储空间.

程序员的基础教程:菜鸟程序员

ORACLE修改表空间方法的更多相关文章

  1. [转载]Oracle修改表空间大小

    Oracle修改表空间大小 使用Oracle10g建立数据库后,向数据库中导入了部分数据,第二天继续向数据库中导入数据表时发生错误: 查了很多资料发现原来是Oracle表空间限制,导致无法继续导入数据 ...

  2. oracle 修改表空间文件路径方法

     比如说修改 user01.dbf  文件 的路径 1.先登录sqlplus:    C:\Documents and Settings\chezh>sqlplus  system/passwo ...

  3. oracle 修改表空间存储路径

    [root@yoon ~]# more /etc/oracle-releaseOracle Linux Server release 5.7 Oracle Database 11g Enterpris ...

  4. Oracle修改表空间自增长

    下面列出详细过程: 1.通过sql plus 命令登录数据库. 在命令行下输入sqlplus “登录用户名/口令 as 登录类型”就可以登录,系统内建的用户名常用的是sys,密码是在安装oracle过 ...

  5. oracle 修改表空间名

    1.登录使用sys用户登录 sqlplus sys/ as sysdba 2.修改表空间名字 SQL> alter tablespace 旧表空间名 rename to 新表空间名; 表空间已更 ...

  6. Oracle修改表空间大小

    在向orale数据库导入数据的时候报 ORA-01658: 无法为表空间 XXX中的段创建 INITIAL 区错误. Oracle我在创建表空间的时候初始化大小为200M,当数据库中数据量达到这个值, ...

  7. 【转】Oracle修改表空间为自动扩展

    1.数据文件自动扩展的好处1)不会出现因为没有剩余空间可以利用到数据无法写入2)尽量减少人为的维护3)可以用于重要级别不是很大的数据库中,如测试数据库等 2.数据文件自动扩展的弊端1)如果任其扩大,在 ...

  8. Oracle修改表空间为自动扩展

    https://gqsunrise.iteye.com/blog/2015692 1.数据文件自动扩展的好处1)不会出现因为没有剩余空间可以利用到数据无法写入2)尽量减少人为的维护3)可以用于重要级别 ...

  9. oracle修改表空间

    1.其中表中查找该表空间不正确 select * from dba_tables where tablespace_name='TDB'; 2.将表空间在 TDB 中的移到表空间 TDB2009 中 ...

随机推荐

  1. (转)Android DiskLruCache完全解析,硬盘缓存的最佳方案

    摘自:http://blog.csdn.net/guolin_blog/article/details/28863651 转载请注明出处: http://blog.csdn.net/guolin_bl ...

  2. Web 漏洞分析与防御之 XSS(一)

    原文地址:Web 漏洞分析与防御之 XSS(一) 博客地址:http://www.extlight.com 一.全称 跨站脚本攻击(Cross Site Scripting) 二.原理 通过在网站中的 ...

  3. redis+php实现微博功能(一)

    (一).微博功能概况 微博用户账号注册 微博用户登录 微博发布 添加微博好友(粉丝) 微博推送 微博冷数据写入mysql数据库 (二).redis数据结构设计 这节分享微博用户注册与登录:我们完全采用 ...

  4. eclipse Mars(4.5.2)安装pydev后不出现

    一.环境 windows 7 64bit eclipse 4.5.2 pydev jdk7u55 二.安装步骤 1. 安装JDK eclipse依赖于java环境,所以需要安装java运行环境JRE. ...

  5. Android内存泄露总结

    内存泄露是如何产生的? 当一个对象已经不需要再使用了,本该被回收时,而有另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏. ...

  6. node中的favicon.icon请求

    var http=require("http"); var server=http.createServer(); server.on("request", c ...

  7. SHUTDOWN: waiting for active calls to complete

    Problem Description: ====================  You are attempting to shut down the database and the data ...

  8. 在线pubmed

    ESearch(文本搜索) eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi http://eutils.ncbi.nlm.nih.gov/entr ...

  9. python学习笔记(五):装饰器、生成器、内置函数、json

    一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...

  10. python‘s third day for me 字符串方法

    基 础 数 据 类 型 初 始   int  运算.+  -  *  /  **  %... bool: 判断,真假,作为条件. str:  存储少量的数据.操作简单,便于传输. list:  列表[ ...