ORACLE表空間管理維護

1:表空間概念數據庫

 

在ORACLE數據庫中,全部數據從邏輯結構上看都是存放在表空間當中,固然表空間下還有段、區、塊等邏輯結構。從物理結構上看是放在數據文件中。一個表空間可由多個數據文件組成。緩存

以下圖所示,一個數據庫由對應一個或多個表空間,表空間邏輯上有一個或多個段(Segment)組成,物理上由一個或多個os file組成。服務器

clip_image002

 

 

clip_image002[4]

 

1.1基本的表空間oracle

 

系統中默認建立的幾個表空間:app

    SYSTEM性能

    SYSAUXthis

    USERSspa

    UNDOTBS1操作系統

    EXAMPLE指針

    TEMP

系統中必須的表空間有那幾個?

答案: SYSTEM、SYSAUX、TEMP、UNDO, 像USERS、EXAMPLE等表空間是無關緊要的。

 

1.2表空間的分類

 

永久表空間                存放永久性數據,如表,索引等。

臨時表空間                不能存放永久性對象,用於保存數據庫排序,分組時產生的臨時數據。

UNDO表空間             保存數據修改前的鏡象。

 

1.3表空間的管理

 

表空間的管理方式:

字典管理:全庫全部的空間分配都放在數據字典中。容易引發字典爭用,而致使性能問題。

本地管理:空間分配不放在數據字典,而在每一個數據文件頭部的第3到第8個塊的位圖塊,來管理空間分配。

 

2:建立表空間

 1: CREATE TABLESPACE TBS_TR_DATA
 2: DATAFILE '/oradata/rTBS_TR_DATA_001.dbf'
 3: SIZE 64G
 4: EXTENT MANAGEMENT LOCAL
 5: SEGMENT SPACE MANAGEMENT AUTO ONLINE;
 6: 
 7: 
 8: 
 9: ALTER TABLESPACE TBS_TR_DATA
 10: ADD DATAFILE '/oradata/rTBS_TR_DATA_002.dbf'
 11: SIZE 64G
 12: AUTOEXTEND OFF;

 

3:表空間管理

 

3.1 表空間信息

如何查看數據庫有哪些表空間?如何查看錶空間對應的數據文件?

查看錶空間:

查看錶空間能夠經過下面幾個系統視圖查看基本信息

 

--包含數據庫中全部表空間的描述信息

SELECT * FROM DBA_TABLESPACES

 

--包含當前用戶的表空間的描敘信息

SELECT * FROM USER_TABLESPACES

 

--包含從控制文件中獲取的表空間名稱和編號信息

SELECT * FROM V$TABLESPACE;

 

查看數據文件

--包含數據文件以及所屬的表空間的描述信息

SELECT * FROM DBA_DATA_FILES

 

--包含臨時數據文件以及所屬的表空間的描述信息

SELECT * FROM DBA_TEMP_FILES

 

--包含從控制文件中獲取的數據文件的基本信息,包括它所屬的表空間名稱、編號等

SELECT * FROM V$DATAFILE

 

--包含全部臨時數據文件的基本信息

SELECT * FROM V$TEMPFILE

 

 

3.1.1:查看默認的TEMP表空間

數據庫級別

 1: SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE
 2: 
 3: 2 FROM DATABASE_PROPERTIES
 4: 
 5: 3 WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE'
 6: 
 7: 4 ;
 8: 
 9: PROPERTY_NAME                        PROPERTY_VALUE
 10: 
 11: ------------------------------ ----------------------------
 12: 
 13: DEFAULT_TEMP_TABLESPACE                  TEMP

用戶級別

 1: SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS

3.1.2:查看默認的永久表空間

若是建立用戶時,不指定其永久表空間,則會使用默認的表空間。

 

 1: SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE
 2: 
 3: 2 FROM DATABASE_PROPERTIES;
 4: 
 5: PROPERTY_NAME PROPERTY_VALUE
 6: 
 7: ------------------------------ ------------------
 8: 
 9: DEFAULT_TEMP_TABLESPACE              TEMP
 10: 
 11: DEFAULT_PERMANENT_TABLESPACE         USERS

3.1.3:查看默認的表空間類型

 

若是不指定表空間類型,就會默認使用DEFAULT_TBS_TYPE參數指定的表空間類型。

 

 1: SQL>
 2: 
 3: SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE
 4: 
 5: 2 FROM DATABASE_PROPERTIES
 6: 
 7: 3 WHERE PROPERTY_NAME='DEFAULT_TBS_TYPE';
 8: 
 9: PROPERTY_NAME                    PROPERTY_VALUE
 10: 
 11: ------------------------------ ------------------
 12: 
 13: DEFAULT_TBS_TYPE                     SMALLFILE

3.1.4:查看錶空間狀況

 

SELECT * FROM DBA_TABLESPACES

 

3.1.5:查看錶空間的數據文件

 

永久表空間/UNDO表空間

SELECT * FROM DBA_DATA_FILES;

臨時表空間

SELECT * FROM V$TEMPFILE;

 

3.1.6:查看錶空間使用狀況

--SQL 1:

 1: SELECT A.TABLESPACE_NAME                     AS TABLESPACE_NAME,
 2:         ROUND(A.BYTES/(1024*1024*1024),2)    AS "TOTAL(G)"     ,
 3:         ROUND(B.BYTES/(1024*1024*1024),2)    AS "USED(G)"      ,
 4:         ROUND(C.BYTES/(1024*1024*1024),2)    AS "FREE(G)"      ,
 5:         ROUND((B.BYTES * 100) / A.BYTES,2)   AS "% USED"       ,
 6:         ROUND((C.BYTES * 100) / A.BYTES,2)   AS "% FREE"
 7: FROM SYS.SM$TS_AVAIL A, SYS.SM$TS_USED B, SYS.SM$TS_FREE C
 8: WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME
 9: AND A.TABLESPACE_NAME = C.TABLESPACE_NAME;

計算表空間使用狀況(考慮了數據文件自動增加狀況)

 1: SELECT UPPER(F.TABLESPACE_NAME) AS "表空間名稱",
 2:         ROUND(D.AVAILB_BYTES ,2) AS "表空間大小(G)",
 3:         ROUND(D.MAX_BYTES,2) AS "最終表空間大小(G)",
 4:         ROUND((D.AVAILB_BYTES - F.USED_BYTES),2) AS "已使用空間(G)",
 5:         TO_CHAR(ROUND((D.AVAILB_BYTES - F.USED_BYTES) / D.AVAILB_BYTES * 100,
 6:             2), '999.99') AS "使用比",
 7:         ROUND(F.USED_BYTES, 6) AS "空閒空間(G)",
 8:         F.MAX_BYTES AS "最大塊(M)"
 9:  FROM (
 10:         SELECT TABLESPACE_NAME,
 11:                 ROUND(SUM(BYTES) / (1024 * 1024 * 1024), 6) USED_BYTES,
 12:                 ROUND(MAX(BYTES) / (1024 * 1024 * 1024), 6) MAX_BYTES
 13:         FROM SYS.DBA_FREE_SPACE
 14:         GROUP BY TABLESPACE_NAME) F,
 15:       (SELECT DD.TABLESPACE_NAME,
 16:                 ROUND(SUM(DD.BYTES) / (1024 * 1024 * 1024), 6) AVAILB_BYTES,
 17:             ROUND(SUM(DECODE(DD.MAXBYTES, 0, DD.BYTES, DD.MAXBYTES))/(1024*1024*1024),6) MAX_BYTES
 18:        FROM SYS.DBA_DATA_FILES DD
 19:        GROUP BY DD.TABLESPACE_NAME) D
 20:         WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
 21: ORDER BY 4 DESC

 

 

3.2 默認表空間

 

在ORACLE 9i數據庫中,建立數據庫用戶時,若是沒有指定默認的永久性表空間,則系統使用SYSTME表空間分別做爲該用戶的默認永久表空間,默認的臨時表空間爲TEMP。在ORACLE 10/11g中,若是不指定默認永久性表空間,則是USERS.默認的臨時表空間爲TEMP,固然前提是你沒有修改過默認永久表空間值或指定用戶的默認永久性表空間。ORACLE容許使用自定義的表空間做爲默認永久性表空間,你能夠用下面SQL查看數據庫的默認永久表空間和默認臨時表空間

SQL>SELECT * FROM database_properties 
WHERE PROPERTY_NAME = 'DEFAULT_PERMANENT_TABLESPACE';

SQL>SELECT * FROM database_properties 
WHERE PROPERTY_NAME ='DEFAULT_PERMANENT_TABLESPACE'

你可使用ALTER DATABASE DEFAULT TABLESPACE語句能夠設置數據庫的默認永久性表空間,這樣創建用戶時,默認將使用指定的表空間。

數據庫級別:

永久表空間

SQL>ALTER DATABASE DEFAULT TABLESPACE USER;

臨時表空間

SQL>ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP;

用戶級別

 

SQL>ALTER USER USERNAM DEFAULT TABLESPACE NEW_TABLESPACE_NAME

查看用戶對應的默認表空間

SELECT USERNAME, DEFAULT_TABLESPACE FROM DBA_USERS

注意事項:

1:若是咱們在建立用戶時指定了默認表空間爲DEFAULT_PERMANENT_TABLESPACE的值,那麼在修改默認表空間後,以前用戶的默認表空間也會發生改變。

eg:

 1: SQL> SELECT *   FROM database_properties
 2:   2   WHERE PROPERTY_NAME IN( 'DEFAULT_PERMANENT_TABLESPACE','DEFAULT_TEMP_TABLESPACE');
 3: 
 4: 
 5: PROPERTY_NAME                  PROPERTY_VALUE                                     DESCRIPTION
 6: ---------------- -------------------------------- ------------------------------------------------------------
 7: DEFAULT_TEMP_TABLESPACE        TEMP                                       Name of default temporary tablespace
 8: DEFAULT_PERMANENT_TABLESPACE   USERS                                      Name of default permanent tablespace
 9: 
 10: 
 11: SQL>   CREATE USER U1 IDENTIFIED BY U1 DEFAULT TABLESPACE USERS;
 12: 
 13: 
 14: SQL>  SELECT USERNAME, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE FROM DBA_USERS WHERE USERNAME ='U1';
 15: 
 16: USERNAME                       DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
 17: ------------------------------ ------------------------------ ------------------------------
 18: U1
 19: 
 20: 
 21: SQL> ALTER DATABASE DEFAULT TABLESPACE TEST1;
 22: 
 23: Database altered
 24: 
 25: 修改了默認永久性表空間後,此時查看用戶U1的DEFAULT_TABLESPACE值,發現其值也改成了TEST1,證明告終論1的正確性。
 26: 
 27: SQL> SELECT USERNAME, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE FROM DBA_USERS WHERE USERNAME ='U1';
 28: 
 29: USERNAME                       DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
 30: ------------------------------ ------------------------------ ------------------------------
 31: U1                             TEST1                          TEMP
 32: 

 

 

2:若是咱們在建立用戶時沒有指定用戶表空間,那麼默認也會使用DB的默認表空間,這時候若是咱們修改了DB的默認表空間,用戶的表空間也會發生改變。

將數據庫的默認表空間切換爲USERS

 1: SQL>  ALTER DATABASE  DEFAULT TABLESPACE USERS;
 2: 
 3: Database altered
 4: 
 5: SQL> CREATE USER U2 IDENTIFIED BY U2;
 6: 
 7: User created
 8: 
 9: SQL> SELECT USERNAME, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE FROM DBA_USERS WHERE USERNAME ='U1';
 10: 
 11: USERNAME                       DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
 12: ------------------------------ ------------------------------ ------------------------------
 13: U1                             USERS                          TEMP
 14: 
 15: SQL> ALTER DATABASE DEFAULT TABLESPACE TEST1;
 16: 
 17: Database altered
 18: 
 19: SQL> SELECT USERNAME, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE FROM DBA_USERS WHERE USERNAME ='U1';
 20: 
 21: USERNAME                       DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
 22: ------------------------------ ------------------------------ ------------------------------
 23: U1                             TEST1                          TEMP

3: 若是咱們在建立用戶指定用戶的表空間是其餘的表空間,那麼咱們修改DB的默認表空間不會影響用戶的表空間。

eg:

 

 1: SQL> CREATE USER U3 IDENTIFIED BY U3 DEFAULT TABLESPACE TEST2;
 2: 
 3: User created
 4: 
 5: SQL> SELECT USERNAME, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE FROM DBA_USERS WHERE USERNAME='U3';
 6: 
 7: USERNAME                       DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
 8: ------------------------------ ------------------------------ ------------------------------
 9: U3                             TEST2                          TEMP
 10: 
 11: SQL> ALTER DATABASE DEFAULT TABLESPACE USERS;
 12: 
 13: Database altered
 14: 
 15: SQL> SELECT USERNAME, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE FROM DBA_USERS WHERE USERNAME='U3';
 16: 
 17: USERNAME                       DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
 18: ------------------------------ ------------------------------ ------------------------------
 19: U3                             TEST2                          TEMP
 20: 

4: DB的默認表空間不能刪除,除非將默認表空間指向其餘表空間以後才能夠刪除。

SQL> DROP TABLESPACE USERS;

DROP TABLESPACE USERS

ORA-12919: 不能刪除默認永久表空間

5: 若是用戶的默認表空間指向其餘的表空間,當這個表空間被drop 以後,用戶的默認表空間會自動指向DB的默認表空間。

SQL> DROP TABLESPACE TEST2;

 

3.3 刪除表空間

 

除了SYSTEM表空間外,數據庫中的任何表空間能夠刪除。刪除表空間時,ORACLE僅僅是在控制文件和數據字典中刪除與表空間和數據文件相關的信息。默認狀況下,ORACLE並不會在操做操做系統中刪除相應的數據文件,所以在成功執行刪除表空間的操做後,須要手動刪除該表空間在操做系統中對應的數據文件。若是在刪除表空間的同時要刪除對應的數據文件,則必須顯示的指定INCLUDING CONTENTS AND DATAFILES子句。注意:當前的數據庫級的默認表空間不能刪除,用戶級的能夠刪除.不然會報錯:ORA-12919: Can not drop the default permanent tablespace

DROP TABLESPACE 表空間名 [INCLUDING CONTENTS [AND DATAFILES] [CASCADE CONSTRAINTS]]

SQL> DROP TABLESPACE URER01 INCLUDING CONTENTS;

若是在表空間中包含數據庫對象,則必須在DROP TABLESPACE語句中顯示的指定INCLUDING CONTENTS. 若是要再刪除表空間USER的同時刪除它所對應的數據文件,則可使用下面的語句

SQL>DROP TABLESPACE USER01 INCLUDING CONTENTS AND DATAFILES;

注意:刪除表空間時,CONTENTS與DATAFILES選項錯位,會報以下錯誤:

SQL>DROP TABLESPACE TBS_STAGE_DAT INCLUDING DATAFILES AND CONTENTS

ORA-01911:contents keyword expected

SQL>DROP TABLESPACE TBS_STAGE_DAT INCLUDING CONTENTS AND DATAFILES

3.4 調整表空間

 

 

3.4.1 增長數據文件

 

若是發現某個表空間存儲空間不足時,能夠爲表空間添加新的數據文件,擴展表空間大小。可是通常建議預先估計表空間所需的存儲空間大小,而後爲它創建若干適當大小的數據文件。

例子:

 1: ALTER TABLESPACE TBS_TR_IND
 2: 
 3: ADD DATAFILE '/oradata/rTBS_TR_IND_002.dbf'
 4: 
 5: SIZE 32G
 6: 
 7: AUTOEXTEND OFF;
 8: 
 9: SQL> ALTER TABLESPACE TBS_EDS_DAT
 10: 
 11: 2 ADD DATAFILE 'G:\datafile\TBS_EDS_DAT01.DBF'
 12: 
 13: 3 SIZE 100M
 14: 
 15: 4 AUTOEXTEND ON
 16: 
 17: 5 NEXT 10M
 18: 
 19: 6 MAXSIZE 20480M;
 20: 
 21: SQL> ALTER TABLESPACE temp01
 22: 
 23: 2 ADD TMPFILE 'D:\ORACLEDATA\temp01_02.dbf' SIZE 10M REUSE;
 24: 

在添加新的數據文件時,若是同名的操做系統已經存在,ALTER TABLESPACE語句將失敗。若是要覆蓋同名的操做系統文件時,則必須在後面顯示的指定REUSE子句。

SQL> ALTER TABLESPACE TBS_EDS_DAT

2 ADD DATAFILE 'G:\datafile\TBS_EDS_DAT01.DBF'

3 SIZE 100M

4 AUTOEXTEND ON

5 NEXT 10K

6 MAXSIZE 51200M;

ALTER TABLESPACE TBS_EDS_DAT

*

第 1 行出現錯誤:

ORA-03206: AUTOEXTEND 子句中 (6553600) 塊的最大文件大小超出範圍

ORACLE支持的數據文件大小是由它的db_block_size和db_block的數量決定的。其中db_block(ORACLE塊)的數量是一個定值2**22-1(4194303).數據文件大小容量=塊數量*塊大小。下面列表說明不一樣數據塊數據庫所能支持的最大物理文件大小:

數據塊的大小        物理文件的最大值M  物理文件的最大值G

=============================================================================

2KB                            8191M                                   8G

4KB                          16383M                                 16G

8KB                          32767M                                 32G

16KB                        65535M                                 64G

32KB                      131072M                               128G

64KB                      262144M                               256G

 

3.4.2 調整數據文件大小

 

 

 

重置數據文件的大小

ALTER DATABASE DATAFILE '/database/oracle/oradata/gsp/tbs_dm_data_002.dbf'

RESIZE 500M;

 

3.4.3 刪除數據文件

 

ALTER TABLESPACE TEST

DROP DATAFILE '/database/oracle/oradata/gsp/tbs_dm_data_002.dbf'

 

 

3.4.4 移動數據文件

 

 

如今有這樣一個案例:之前數據庫服務器只有一個容量比較小得磁盤,數據文件所有放在D盤,後來申請了一個1T的磁盤,須要給D盤騰出一些空間(D盤爆滿了),如今想移動一些大的數據文件到1T的磁盤:

 1: 1.1:鏈接數據庫
 2: 
 3: SQL> conn sysdba/manage as sysdba
 4: 
 5: 已鏈接。
 6: 
 7: 1.2:把要移動數據文件的表空間脫機
 8: 
 9: SQL> ALTER TABLESPACE TBS_EDS_DAT OFFLINE NORMAL ;
 10: 
 11: 表空間已更改。
 12: 
 13: 1.3:移動物理數據文件。
 14: 
 15: 1.4:重命名文件
 16: 
 17: SQL> ALTER DATABASE
 18: 
 19: 2 RENAME FILE
 20: 
 21: 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\WGODS\TBS_EDS_DAT.DBF'
 22: 
 23: 4 TO
 24: 
 25: 5 'G:\datafile\TBS_EDS_DAT.DBF';
 26: 
 27: 數據庫已更改。
 28: 
 29: 1.5:表空間聯機
 30: 
 31: SQL> ALTER TABLESPACE TBS_DM_DAT ONLINE;
 32: 
 33: 表空間已更改。
 34: 
 35: 1.6:若是要刪除之前的數據文件,則必須先關閉數據庫,手動刪除文件,不然會報錯。
 36: 
 37: SQL> shutdow immediate
 38: 
 39: 數據庫已經關閉。
 40: 
 41: 已經卸載數據庫。
 42: 
 43: ORACLE 例程已經關閉。
 44: 
 45: SQL> startup
 46: 
 47: ORACLE 例程已經啓動。
 48: 
 49: Total System Global Area 612368384 bytes
 50: 
 51: Fixed Size 1250428 bytes
 52: 
 53: Variable Size 104860548 bytes
 54: 
 55: Database Buffers 499122176 bytes
 56: 
 57: Redo Buffers 7135232 bytes
 58: 
 59: 數據庫裝載完畢。
 60: 
 61: 數據庫已經打開。
 62: 

Linux/Unix下

 

 1: 一、查看錶空間的文件分佈
 2: 
 3: SQL> select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 "MB"
 4: 
 5: from dba_data_files;
 6: 
 7: 二、將表空間離線
 8: 
 9: SQL> alter tablespace users offline;
 10: 
 11: 三、在操做系統下將數據文件移到另外一位置
 12: 
 13: SQL> host mv /u01/app/oracle/oradata/ocp/users01.dbf /u02/
 14: 
 15: SQL> host ls /u02/
 16: 
 17: 四、修改控制文件的記錄指針
 18: 
 19: SQL> alter database rename file
 20: 
 21: '/u01/app/oracle/oradata/ocp/users01.dbf' to '/u02/users01.dbf';
 22: 
 23: 或者
 24: 
 25: SQL> alter tablespace users rename datafile
 26: 
 27: '/u01/app/oracle/oradata/ocp/users01.dbf' to '/u02/users01.dbf';
 28: 
 29: 注:執行此項時,目標文件(TO後面的那一段)必定要存在。
 30: 
 31: 五、將表空間在線
 32: 
 33: SQL> alter tablespace users online;
 34: 
 35: 對於那些不能offline的表空間,只能關閉數據,在mount狀態下修改,修改後再OPEN

 

3.4.5 數據文件脫機

 

 

 

ALTER DATABASE DATAFILE '/database/oracle/oradata/gsp/tbs_dm_data_002.dbf' OFFLINE;

 

 

3.4.6 數據文件聯機

 

 

ALTER DATABASE DATAFILE '/database/oracle/oradata/gsp/tbs_dm_data_002.dbf' ONLINE;

 

4:維護表空間

 

4.1 變動表空間狀態

 

 

表空間狀態有下面幾種狀態:online、offline、read only、read write。

若要查看錶空間的狀態,能夠經過下面SQL語句來查看。

 

 1: SQL> SELECT TABLESPACE_NAME, CONTENTS, STATUS FROM DBA_TABLESPACES;
 2:
 3:         TABLESPACE_NAME                CONTENTS  STATUS
 4:         ------------------------------ --------- ---------
 5:         SYSTEM                         PERMANENT ONLINE
 6:         UNDOTBS1                       UNDO      ONLINE
 7:         SYSAUX                         PERMANENT ONLINE
 8:         TEMP                           TEMPORARY ONLINE
 9:         USERS                          PERMANENT ONLINE
 10:         EXAMPLE                        PERMANENT ONLINE
 11:         TBS_DM_DATA                    PERMANENT READ ONLY
 12:
 13:         7 rows selected
 14: 
 15:
 16:         SQL> SELECT FILE#, STATUS, ENABLED FROM V$DATAFILE;
 17:
 18:                  FILE# STATUS  ENABLED
 19:         ---------- ------- ----------
 20:                  1 SYSTEM  READ WRITE
 21:                  2 ONLINE  READ WRITE
 22:                  3 ONLINE  READ WRITE
 23:                  4 ONLINE  READ WRITE
 24:                  5 ONLINE  READ WRITE
 25:                  6 OFFLINE READ ONLY
 26:                  7 OFFLINE READ ONLY

 

4.1.1 表空間脫機

SQL>ALTER TABLESPACE TBS_DM_DAT OFFLINE IMMEDIATE;

設置脫機狀態,可使用下面4個參數來控制脫機方式

NORMAL 該參數表示將表空間以正常方式切換到脫機狀態,在進入脫機狀態過程當中,ORACLE會執行一次檢查點, 將SGA區中與該表空間相關的髒緩存塊寫入數據文件中,而後再關閉表空間的全部數據文件。若是在這過程當中沒有發生任何錯誤,則可使用NORMAL參數,這也是默認的方式。

TEMPORARY 該參數將表空間以臨時方式切換到脫機狀態。這時ORACLE在執行檢查點時並不會檢查各個數據文件的狀態,即便某些數據文件處於不可用狀態,ORACLE也會忽略這些錯誤。這樣將表空間設置爲聯機狀態時,可能須要進行數據恢復。

IMMEDIATE 該參數將表空間以當即方式切換到脫機狀態,這時ORACLE不會執行檢查點,也不會檢查數據文件是否可用。而是直接將屬於表空間的數據文件設置爲脫機狀態。下一次將表空間恢復爲聯機狀態時必須進行數據庫恢復。

FOR RECOVER 該參數將表空間以用於恢復方式切換到脫機狀態,若是要對錶空間進行基於時間的恢復,可使用這個參數將表空間切換到脫機狀態。

若是數據庫運行在非歸檔模式下(NOARCHIVELOG),因爲沒法保留恢復表空間所須要的重作數據,因此不能將表空間以當即方式切換到脫機狀態。若是表空間脫機了,則查詢表空間下的表,會報錯誤:ORA-00376 此時沒法讀取文件 以及 ORA-01110:數據文件x......

 

注意:脫機(offline)通常用於數據庫的聯機備份,數據恢復等維護操做。有些表空間不能OFFLINE,如:SYTEM,UNDO等

1. SYTEM 不能offline,也不能read only

2. 當前的UNDO表空空間,不能offline,也不能read only

3. 當前的臨時表空間不能offline,也不能read only

4. SYSAUX能夠offline 不能read only

SQL> ALTER TABLESPACE SYSTEM OFFLINE;

ALTER TABLESPACE SYSTEM OFFLINE

ORA-01541: system tablespace cannot be brought offline; shut down if necessary

SQL> ALTER TABLESPACE SYSTEM OFFLINE;

ALTER TABLESPACE SYSTEM OFFLINE

ORA-01541: system tablespace cannot be brought offline; shut down if necessary

4.1.2 表空間聯機

 

 

SQL> ALTER TABLESPACE TBS_DM_DAT ONLINE;

 

4.1.3 表空間只讀

 

 

 

SQL>ALTER TABLESPACE TBS_DM_DAT READY ONLY;

表空間只讀時,其中的表,不能進行任何DML操做, 不然會報錯:ORA-00372: file xxx cannot be modified at this time

ORA-01110: data file xx: ********。可是能刪除表。

 

4.1.4 表空間讀寫

 

SQL>ALTER TABLESPACE TBS_DM_DAT READ WRITE;

 

 

4.1.5 表空間更名

在ORACLE 10g 以前,表空間的名稱是不能被修改的。在ORACLE 11G中,經過ALTER TABLESPACE 語句中使用RENAME子句,數據庫管理員能夠修改表空間的名稱。

 

 

 

 1: CREATE TABLESPACE TBS_DM_DAT
 2: ATAFILE 'E:\APP\KERRY\ORADATA\ORCL\TBS_DM_DAT.DBF'
 3: IZE 50M
 4: XTENT MANAGEMENT LOCAL
 5: EGMENT SPACE MANAGEMENT AUTO ONLINE
 6: 
 7: 
 8: SQL>ALTER TABLESPACE TBS_DM_DAT RENAME TO TBS_DM_DATA
 9: 
 10: QL> SELECT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE TABLESPACE_NAME = 'TBS_DM_DATA';
 11:
 12: LESPACE_NAME
 13: ---------------------------
 14: _DM_DATA

4.1.6 開啓自動擴展

 

ALTER DATABASE DATAFILE '/database/oracle/oradata/gsp/tbs_dm_data_002.dbf' AUTOEXTEND ON;

 

4.1.7 關閉自動擴展

 

 

ALTER DATABASE DATAFILE '/database/oracle/oradata/gsp/tbs_dm_data_002.dbf' AUTOEXTEND OFF;

表空間配額

 

表空間不足與用戶配額不足是兩種不一樣的概念。表空間的大小是指實際的用戶表空間的大小,而配額大小指的是用戶指定使用表空間的的大小。二者的解決方式亦不相同

3.5.1 查看用戶的表空間配額

 

 1: --查看全部用戶表空間的配額狀況
 2: SELECT * FROM DBA_TS_QUOTAS
 3:
 4: --查看當前用戶表空間的配額狀況
 5: SELECT * FROM USER_TS_QUOTAS
 6: 
 7: 
 8: SQL> DESC DBA_TS_QUOTAS
 9: Name            Type         Nullable Default Comments
 10: --------------- ------------ -------- ------- ------------------------------------------------ 
 11: TABLESPACE_NAME VARCHAR2(30)                  Tablespace name
 12: USERNAME        VARCHAR2(30)                  User with resource rights on the tablespace
 13: BYTES           NUMBER       Y                Number of bytes charged to the user
 14: MAX_BYTES       NUMBER       Y                User's quota in bytes. NULL if no limit 
 15: BLOCKS          NUMBER       Y                Number of ORACLE blocks charged to the user
 16: MAX_BLOCKS      NUMBER       Y                User's quota in ORACLE blocks.  NULL if no limit
 17: DROPPED         VARCHAR2(3)  Y                Whether the tablespace has been dropped

MAX_BYTES=-1表示沒有配額限制,

3.5.2 管理用戶表空間配額

用戶表空間限額的建立與更改:

1.建立用戶時,指定限額

eg:

CREATE USER TEST IDENTIFIED BY TEST

DEFAULT TABLESPACE TS_TEST

TEMPORARY TABLESPACE TEMP

QUOTA 3M ON TS_TEST

PASSWORD EXPIRE;

2.更改用戶的表空間限額:

A:不對用戶作表空間限額控制:

查看是否沒有表空間限額限制

B:取消限額

這種方式是全局性的.

SQL> GRANT UNLIMITED TABLESPACE TO SCOTT;

或者針對特定的表空間的.

SQL>ALTER USER SCOTT QUOTA UNIMITED ON TBS_EDS_DAT;

SELECT * FROM SESSION_PRIVS WHERE PRIVILEGE='UNLIMITED TABLESPACE'

SQL> REVOKE UNLIMITED TABLESPACE FROM SCOTT;

C:制定配額

3. 能夠分配天然也能夠回收了:

revoke unlimited tablespace from TEST;

或者

alter user skate quota 0 on TB;

表空間大小不足問題的解決:使用「ALTER TABLESPACE tablespace_name ADD DATAFILE filename SIZE size_of_file」命令向指定的數據增長表空間,根據具體的狀況能夠增長一個或多個表空間。

相關文章
相關標籤/搜索