您的位置:首页 > 其它

将字典管理表空间转换为本地管理表空间

2013-08-13 12:34 357 查看
使用ORACLE块的空间有两个目的:插入刷新数据或更新块中已有的数据。在删除块中数据或更新语句使已有数据的长度变小时,块的可用空间增加。段空间管理指ORACLE如何管理每个块中的可用空间。

手动段空间管理(MANUAL):

数据库使用Free list的实体和一对参数PCTFREE和PCTUSED 来管理可用空间。PCTFREE参数可以在每个数据块中保留一定比例的空间,以便以后更新已有的数据,也就是已有行可增长的空间。PCUSED参数处理新数据插入块之前已用空间必须小于设置的极限值。比如PTCUSED设置为40%,除非已有空间量低于此极限值,否则ORACLE不能插入新数据。手动段空间管理涉及PCTFREE和PCTUSED参数以及可用列表,因此在大量处理DML操作时,事务处理的速度会减慢。

自动段空间管理(AUTO):

Oracle使用位图(bitmaps)跟踪一个段空间的可用性。位图,包含在一个位图块中,指明数据块中的可用空间低于25%,25%~50%、50%~75%,还是高于75%,对于索引块,位图可以告知索引块是否为空块或格式化过的块。

一、移动表和索引到新的本地管理表空间

1.创建本地管理表空间,使用段空间自动管理特性(Automatic segment space management)

SQL> create tablespace localmanage datafile '/u01/app/oracle/oradata/orcl/localmanage01.dbf' size 500m autoextend on extent management local segment space management auto;

Tablespace created.

2.移动表到新空间,执行查询出来的语句

SQL> SELECT 'alter table ' || TABLE_NAME ||' move tablespace localmanage;' FROM DBA_TABLES WHERE OWNER='SCOTT';

'ALTERTABLE'||TABLE_NAME||'MOVETABLESPACELOCALMANAGE;'

-----------------------------------------------------------------------

alter table EMP_BAK move tablespace localmanage;

alter table SALGRADE move tablespace localmanage;

alter table BONUS move tablespace localmanage;

alter table EMP move tablespace localmanage;

alter table DEPT move tablespace localmanage;

3.在新空间创建索引,执行查询出来的语句

SQL> SELECT 'alter index ' || INDEX_NAME ||' rebuild tablespace localmanage;' FROM DBA_INDEXES WHERE OWNER='SCOTT';

'ALTERINDEX'||INDEX_NAME||'REBUILDTABLESPACELOCALMANAGE;'

--------------------------------------------------------------------------

alter index PK_DEPT rebuild tablespace localmanage;

alter index PK_EMP rebuild tablespace localmanage;

4.转换完成以后,删除原来的表空间,释放空间

alter database drop tablespace "表空间名" including contents and datafiles;

二、使用PL/SQL 完成表空间转换(转换前使用RMAN冷备)。

exec dbms_space_admin.tablespace_migrate_to_local('USER');

在转换SYSTEM表空间前,保证其他表空间已经转换完成。如果先转换SYSTEM表空间,则其他表空间会处于只读模式。dbms_space_admin.tablespace_migrate_to_local可联机使用,用户可以修改的选择数据,但是DML若要分配一个新区,则要转换完成前会处理阻塞状态。

如果使用 dbms_space_admin 将表空间从字典管理转换为本地管理 ,则没有切换到自动段空间管理特性的选项。所有字典管理的表空间都使用默认的段空间管理方式,并且在转换为本地管理时,不能更改为自动段空间管理。另外,若当前字典管理表空间存在空间碎片,使用 dbms_space_admin不能进行消除。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: