天天看點

建立表空間+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值。