天天看点

创建表空间+rename重命名+修改管理方式+resize大小

普通表空间

新建表空间test11,数据文件为/u01/oracle/oradata/primary/primary/test11.dbf

SQL> createtablespace test1 datafile '/u01/oracle/oradata/primary/primary/test1.dbf' size10m;

Undo表空间

新建Undo表空间undotbs2:

SQL〉CREATE UNDO TABLESPACE undotbs2

  DATAFILE   '/u01/oracle/oradata/primary/primary/undotbs2.dbf' SIZE 200M

     REUSE AUTOEXTEND OFF

    ONLINE; 

SQL〉ALTER SYSTEM SET UNDO_TABLESPACE ='undotbs2' SCOPE= BOTH;

临时表空间

         新建临时表空间temp2

SQL〉CREATE TEMPORARY TABLESPACE temp2

   TEMPFILE  '/u01/oracle/oradata/primary/primary/temp2.dbf'SIZE 200M

      REUSE AUTOEXTEND OFF

     EXTENT MANAGEMENT LOCAL

    UNIFORM SIZE 1M;

创建规范: 

CREATE[UNDO]  TABLESPACE tablespace_name

[DATAFILE datefile_spec1 [,datefile_spec2] ......

[ { MININUM EXTENT integer [k|m]

| BLOCKSIZE integer [k]

|logging clause

|FORCE LOGGING

|DEFAULT  {data_segment_compression}storage_clause

|[online|offline]

|[PERMANENT|TEMPORARY]

|extent_manager_clause

|segment_manager_clause}]

1、undo  说明系统将创建一个回滚表空间。

2、tablespace指出表空间的名称。

3、datafile  datefile_spec1指出表空间包含什么空间文件。

datefile_spec1 是形如  ['filename'] [SIZE integer [ K | M ]] [REUSE][autoextend_clause]

4、MININUMEXTENT integer [k|m] 指出在表空间中范围的最小值。这个参数可以减小空间碎片,保证在表空间的范围是这个数值的整数倍。

5、BLOCKSIZE integer [k] 这个参数可以设定一个不标准的块的大小。

6、loggingclause这个子句声明这个表空间上所有的用户对象的日志属性(缺省是logging),包括表,索引,分区,物化视图,物化视图上的索引,分区。

7、FORCE LOGGING使用这个子句指出表空间进入强制日志模式。

8、DEFAULTstorage_clause声明缺省的存储子句。

9、online|offline改变表空间的状态。

10、PERMANENT|TEMPORARY指出表空间的属性,是永久表空间还是临时表空间。

11、extent_management_clause说明了表空间如何管理范围

12、segment_management_clause段空间管理的方式,自动或者手动:    

                SEGMENT SPACE MANAGEMENT {AUTO|MANUAL}

赋予表空间权限:

alter user EPUFS quota unlimited on XIB_TRANS_DATA ;

重命名表空间:

alter tablespace test1 rename to test11;

将system表空间从dictionary-managed更改为locally managed:

*oracle 10g默认的表空间管理方式是本地管理(locally managed)。

在转换system表前,你必须把所有的其他表空间转换为本地管理。否则在将system表空间传换为locally managed后不能在READ-WRITE模式下使用这些表空间。

EXECUTE dbms_space_admin.tablespace_migrate_to_local("tablespace");

系统表空间从数据字典管理转换到本地管理的限制条件非常严格。必须严格遵守以下条件:

1)系统的默认临时表空间不是系统表空间

2)数据字典管理的表空间中不存在回滚段

3)至少一个联机回滚段存在于本地管理表空间中或者使用了自动undo管理,且undo表空间联机

4)除去undo或回滚表空间,其他表空间都置于只读模式

5)系统使用restricted模式启动

6)利用DBMS_SPACE_ADMIN

EXECUTE DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL(‘SYSTEM’);

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

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

因此,要转换普通表空间,建议使用下面的方法!

普通表空间从dictionary-managed更改为locally managed:

首先你要新建一个本地管理的表空间:

CREATE TEMPORARY TABLESPACE new_tempt

TEMPFILE  '/u01/oracle/oradata/primary/primary/new_tempt.dbf'SIZE 200M

REUSE AUTOEXTEND OFF

EXTENT MANAGEMENT LOCAL

UNIFORM SIZE 1M;

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

ALTER TABLE temp MOVE TABLESPACE new_temp;

对于索引你需要重建:

ALTER TABLE index REBUILD TABLESPACEnew_index;

resize表空间大小:

SQL> select a.tablespace_name,total,free,total-free used from (select tablespace_name,sum(bytes)/1024/1024 total from dba_data_files  group by tablespace_name) a, (select tablespace_name,sum(bytes)/1024/1024 free from dba_free_space group by tablespace_name) b where a.tablespace_name=b.tablespace_name;

TABLESPACE_NAME      TOTAL       FREE        USED      

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

TEST1                                   50             49.875       .125

SQL> alter database datafile '/home/oracle/test/TEST/test.dbf' resize 20M;

Database altered.

SQL> select a.tablespace_name,total,free,total-free used from (select tablespace_name,sum(bytes)/1024/1024 total from dba_data_files  group by tablespace_name) a, (select tablespace_name,sum(bytes)/1024/1024 free from dba_free_space group by tablespace_name) b where a.tablespace_name=b.tablespace_name;

TABLESPACE_NAME      TOTAL       FREE        USED      

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

TEST1                                 20              19.875       .125

注意:

alter databasedatafile 'filepath' resize <filesize>;

  • 此语句只能用于bigfiletablespaces。
  • 对于一个bigfiletablespace来说,可以通过alter database语句来改变大小,但不能给一个bigfile tablespace增加数据文件。
  • 在使用resize缩小表空间时,如果文件中所包含的数据大小超过了设定的大小,就会报错。
  • high water mark:数据文件能够resize的最小文件大小就是HWM值,即resize后的大小不能低于HWM值。