表空间的本地管理(Local Management Tablespace)与字典管理(Dictionary Management TableSapce)的转化与常见错误

来源:互联网 发布:steam绘画软件 编辑:程序博客网 时间:2024/06/05 03:24

1.       如何改变表空间的区的管理方式

 

  把本地管理的表空间(Local Extent Management

改成字典管理的表空间(Dictionary Extent Management

需要使用过程

DBMS_SPACE_ADMIN.Tablespace_MIGRATE_FROM_LOCAL( tablespace_name IN VARCHAR2)

把要更改的表空间的名字输入就行了

 

  把字典管理的表空间(Dictionary Extent Management

改成本地管理的表空间(Local Extent Management

需要使用过程

DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL(

Tablespace IN VARCHAR2,//表空间名

UNIT_SIZE IN POSITIVE DEFEALT NULL,//单位尺寸

        Rfno IN INTGER DEFAULT NULL);//表空间数据文件的文件编号

 

 

默认系统表空间是local管理,10g)

 

  1  create tablespace dic2

  2  datafile '/u02/app/oracle/oradata/ora10g/dic201.dbf'

  3  size 30m extent management dictionary;

 

ERROR at line 1:

ORA-12913: Cannot create dictionary managed tablespace

 

Oracle9.2.0起,默认系统表空间是local管理,因此不能在数据库中建立数据字典管理的表空间。
如果想要建立数据字典管理的表空间,必须在建立数据库时,将系统表空间改为数据字典管理才可以。

当然在系统表空间是Dictionary管理的,那却是可以在该数据库中创建Local表空间,也可以相互转化管理方式。

 

execute DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_FROM_LOCAL('DIC');

 

ERROR at line 1:

ORA-10616: Operation not allowed on this tablespace

ORA-06512: at "SYS.DBMS_SPACE_ADMIN", line 216

ORA-06512: at line 1   

         

也是因为系统表空间的管理方式是Local Management Tablespace

所以不能执行上面的语句;

 

 

( 系统表空间是Dictionary管理)

 

execute dbms_space_admin.tablespace_migrate_to_local('SYSTEM');

 

ORA-10643: Database should be mounted in restricted mode and Exclusive mode

//提示数据库不在restricted模式下
ORA-06512: at "SYS.DBMS_SPACE_ADMIN", line 216
ORA-06512: at line 1

这个的系统表空间管理是Dictionary的,所以可以执行管理方式的更改

shutdown immediate
startup restrict

execute dbms_space_admin.tablespace_migrate_to_local('SYSTEM');

 

 

ORA-10647: Tablespace other than SYSTEM,UNDOTBS1, TEMP not found in read only mode

--除了SYSTEM,UNDOTBS1,TEMP外其它表空间必须readonly模式,这个也会检查.

--临时表空间没有办法readonlyoffline,如果不理会临时表空间的话,也会提示错误.所以只能删掉,在完成后再重建。
ORA-06512: at "SYS.DBMS_SPACE_ADMIN", line 216
ORA-06512: at line 1

 

一切完成后再执行

execute dbms_space_admin.tablespace_migrate_to_local('SYSTEM');

再将所有的表空间改为可读可写,最后重建临时表空间。