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模式,这个也会检查.
--临时表空间没有办法readonly或offline,如果不理会临时表空间的话,也会提示错误.所以只能删掉,在完成后再重建。
ORA-06512: at "SYS.DBMS_SPACE_ADMIN", line 216
ORA-06512: at line 1
一切完成后再执行
execute dbms_space_admin.tablespace_migrate_to_local('SYSTEM');
再将所有的表空间改为可读可写,最后重建临时表空间。