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


首先要知道本地管理表空间和字典管理表空间的区别。

    字典管理表空间每当表或其他对象需要扩大的时候都检查其数据字典以确保有可用的空间分配给对象,然后给对象分配一个新区段并更新其可用空间信息。

    本地管理表空间保存数据文件本身的空间管理信息,而且表空间自动跟踪每个数据文件块的可用或已用状态。

    在事务比较多的数据库中显然字典管理每次插入数据时都会检查数据字典,这就使得数据库性能有所损耗。

    转换:

    第一种方法——命令方式转移。

    首先你要新建一个oracle表空间,在oracle 10g以后默认都是采用本地管理表空间的。

    对于表空间的转移使用命令

    ALTER TABLE temp MOVE TABLESPACE new_temp;

    对于索引你需要重建

    ALTER TABLE index REBUILD TABLESPACE new_index;

    或许你可以采用oracle提供的PL/SQL数据包中的DBMS_SPACE_ADMIN.

    显然上面的方法并不适用于对system表进行转换,因为你不能建立2个同名的system表。

    在转换system表前,你必须把所有的其他表空间转换为本地管理。

    EXECUTE dbms_space_admin.tablespace_migrate_to_local("tablespace"); ——转行表空间

    然后同样的方法将system表空间也进行转换。

    EXECUTE dbms_space_admin.tablespace_migrate_to_local("system");

    使用这种方法很好,但是它建立的表空间没有automatic segment space managerment选项,所有字典管理表空间都是用默认手动段空间管理,而且在转换为本地管理的表空间是不能进行修改。

    还有一个缺点,就是表空间如果存在空间碎片的话,此方法也不能解决碎片问题。

    所以oracle建议你,采用第一种方法。

首先要知道本地管理表空间和字典管理表空间的区别。

    字典管理表空间每当表或其他对象需要扩大的时候都检查其数据字典以确保有可用的空间分配给对象,然后给对象分配一个新区段并更新其可用空间信息。

    本地管理表空间保存数据文件本身的空间管理信息,而且表空间自动跟踪每个数据文件块的可用或已用状态。

    在事务比较多的数据库中显然字典管理每次插入数据时都会检查数据字典,这就使得数据库性能有所损耗。

    转换:

    第一种方法——命令方式转移。

    首先你要新建一个oracle表空间,在oracle 10g以后默认都是采用本地管理表空间的。

    对于表空间的转移使用命令

    ALTER TABLE temp MOVE TABLESPACE new_temp;

    对于索引你需要重建

    ALTER TABLE index REBUILD TABLESPACE new_index;

    或许你可以采用oracle提供的PL/SQL数据包中的DBMS_SPACE_ADMIN.

    显然上面的方法并不适用于对system表进行转换,因为你不能建立2个同名的system表。

    在转换system表前,你必须把所有的其他表空间转换为本地管理。

    EXECUTE dbms_space_admin.tablespace_migrate_to_local("tablespace"); ——转行表空间

    然后同样的方法将system表空间也进行转换。

    EXECUTE dbms_space_admin.tablespace_migrate_to_local("system");

    使用这种方法很好,但是它建立的表空间没有automatic segment space managerment选项,所有字典管理表空间都是用默认手动段空间管理,而且在转换为本地管理的表空间是不能进行修改。

    还有一个缺点,就是表空间如果存在空间碎片的话,此方法也不能解决碎片问题。

    所以oracle建议你,采用第一种方法。


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3