ORACLE DBA学习笔记--表空间的管理(tablespace)
表空間是個邏輯概念。
表空間是ORACLE的最大邏輯結構。表空間是組織數據和分配空間的邏輯結構。
特性:
一個表空間有多個數據文件組成,但一個數據文件只屬于一個表空間
一個數據庫可以有多個表空間,可以在數據庫中創建,刪除表空間。
一個表空間只屬于一個數據庫,
一個表空間的大小等于所有數據文件的大小之和。
表空間可以聯機,脫機(系統表空間和帶有回滾段的表空間不能OFFLINE)
數據庫對象、表、索引的數據被存儲在表空間的數據文件中。
一個用戶默認使用一個表空間
作用:
控制數據庫所占的磁盤空間。
表是SEGMENT的一種。
表空間分類:
| 表空間 | 作用 |
| 系統表空間(SYSTEM和SYSAUX) | 此表空間必須存在,一般用戶存放數據字典表 |
| 臨時表空間(TEMP) | 用戶排序,分組,索引等 |
| 撤消表空間(UNDO) | 用戶ROLLBACK,從邏輯中恢復(可以創建多個表空間,但只能激活一個表空間) |
表空間的區,段管理方式
表空間是按區和段空間進行管理。
表空間的管理方式
1.??字典管理方式:使用數據字典來管理存儲空間的分配,當表空間分配新的區、或者回收已分配的區時,ORACLE會對數據字典對應的表進行查詢、更新。且使用單線程,速度慢,并且回產生回退和重做信息。
(注意:在字典管理方式下,如果對某個表進行更新,這是回產生存儲操作,而該操作又回產生回滾和重做操作,導致對回滾段和重做日志文件進行讀寫,從而又產生存儲管理操作,因此形成遞歸現象)
2.??本地管理方式:ORACLE 9i默認方式,表空間中區分配和區回收的管理信息都被存儲在表空間的數據文件中,而與數據字典無關。表空間為每個數據文件維護一個位圖結構,用于記錄表空間的區分配情況。當表空間分配新的區、或者回收已分配的區時,ORACLE會對文件中的位圖進行更新,所以不會產生回滾和重做信息。
優點:
(1)???????提高存儲管理的速度和并發性。
(2)???????產生磁盤碎片
(3)???????不產生遞歸管理
(4)???????沒有系統回滾段
?
通過dba_tablespaces可以查看各個表空間的區、段管理方式;
select TABLESPACE_NAME,STATUS,EXTENT_MANAGEMENT,ALLOCATION_TYPE,SEGMENT_SPACE_MANAGEMENT from dba_tablespaces
表空間的狀態:
1.?讀寫狀態
只讀(READ-ONLY):任何人無法寫入數據,無法修改數據。
讀寫(READ-WRITE):任何有權限的用戶都可以讀寫。
修改為只讀:
ALTER TABLESPACE WORKDATA01 READ ONLY(此TABLESPACE過程在下次啟動時候依然為只讀)
如果此時插入數據則出現如下錯誤:
1.?脫機狀態
正常模式(NORMAL):進入脫機時,必須保證該表空間的數據文件處于聯機,ORACLE會執行一個CHECKPOINT,以便SGA區中的臟數據都能寫入數據文件中。然后在關閉表空間的所有文件。下一次啟動時候就不用進行數據庫恢復了。
臨時模式(TEMPORARY):不須保證該表空間的數據文件處于聯機,如果某個數據文件不可用,則回忽略錯誤,進入TEMPORARY?模式,ORACLE會執行一個CHECKPOINT,下一次啟動時候可能需要進行數據庫恢復
立即模式(IMMEDIATE):ORACLE會執行一個CHECKPOINT,直接將該表空間的所有數據文件都設置為脫機狀態,恢復為聯機時必須進行數據庫恢復
用于恢復模式(FOR RECOVER):如果要對表空間進行基于時間的恢復,可以使用這模式,
然后DBA就可以進行備份的數據文件來覆蓋原有的數據文件,而后根據這些數據文件上,利用歸檔日志,就可以將表空間恢復為某個時間點的狀態。
演示將表空間脫機:
ALTER TABLESPACE USERS OFFLINE NORMAL(默認)
從圖可以看出IMMEDIATE無須表空間處于聯機狀態,就能實現脫機
OFFLINE之后無法在該表空間做任何操作。
表空間的管理準則
表空間的管理主要是:確定其大小、創建、刪除,修改表空間、設置狀態等。
確定表空間的大小:
1.??確定表的大小。
PCTFREE—空閑百分比
表的大小=最大行數*行數*(1+PCTFREE/100)*預留的百分比
2.??確定表空間的大小:
表空間的大小=表的大小*表的數量
對于撤消表空間:
受UNDO_RETENTION(表示在UNDO表空間保留多長時間的撤消信息,如果表空間不足,則未完成的或撤消事務有可能被新的事務覆蓋)參數的限制。
UNDO表空間大小=
(UNDO_PETENTION*每秒的撤消塊*DB_BLOCK_SIZE)+DB_BLOCK_SIZE。
?
顯示UNDO_RETENTION參數
顯示DB_BLOCK_SIZE參數
表空間的創建
使用autoallocate分配方式:自動給存放對象分配相應大小的區的方式,可能造成磁盤空間的浪費。
create tablespace workdata01
datafile 'd:\oracle\oradata\work\workdata01_01.dbf' size?1M,
'd:\oracle\oradata\work\workdata01_02.dbf' size?1M?autoallocate;
使用uniform方式:給所有對象分配相同的大小的區,最小1K。
create tablespace workdata02
datafile 'd:\oracle\oradata\work\workdata02_01.dbf' size?1M
uniform size 128K;
查看表空間的數據文件:
select file_name,tablespace_name from dba_data_files where tablespace_name='WORKDATA01'
指定數據文件的的擴展方式
使用此方式時候,一般需要指定數據文件的最大SIZE,以免數據文件無限制擴展。
?
CREATE TABLESPACE WORKDATA01
DATAFILE ' D:\ORACLE\ORADATA\WORK\WORKDATA01_01.DBF' SIZE?1M
AUTOEXTEND ON NEXT?2M?MAXSIZE?10M;
創建臨時表空間(區分配無法指定為AUTOALLOCATE)
如果數據庫經常有大量排序操作,則為了提高性能就需要創建多個臨時表空間。
CREATE TEMPORARY TABLESPACE TEMP_WORKDATA01
TEMPFILE ' D:\ORACLE\ORADATA\WORK\TEMP_WORKDATA01_01.DBF ' SIZE?1M
UNIFORM SIZE 64K;
創建撤消表空間(只能使用本地管理方式而不是數據字典管理方式,無法指定統一區的大小的選項):
正在使用的UNDO表空間無法刪除。當UNDO表空間沒有未提交的事務時候才能刪除。
通過select * from v$transaction來查詢:
指定UNIFORM時出現的錯誤。
修改表空間
為表空間增加數據文件:
ALTER TABLESPACE WORKDATA01
ADD DATAFILE 'D:\ORACLE\ORADATA\WORK\WORKDATA01_02.DBF' SIZE?1m
修改數據文件:
ALTER DATABASE
'D:\ORACLE\ORADATA\WORK\WORKDATA01_02.DBF'
RESIZE?4M
刪除表空間:
DROP TABLESPACE WORKDATA02 INCLUDING CONTENTS AND DATAFILES;
此語句刪除非空的表空間以及對應的數據文件。
查詢表空間信息:
| 數據字典 | 作用 |
| V$TABLESPACE | 表空間的標號和信息 |
| DBA_TABLESPACES | 表空間的標號和信息 |
| USER_TABLESPACES | 表空間的標號和信息 |
| DBA_TABLESPACE_GROUPS | ? |
| DBA_SEGMENT | 表空間段的信息 |
| USER_SEGMENT | 表空間段的信息 |
| DBA_EXTENTS | 表空間的數據盤區的信息 |
| USER_EXTENTS | 表空間的數據盤區的信息 |
| DBA_FREE_SPACE | 表空間的空閑信息 |
| USER_FREE_SPACE | 表空間的空閑信息 |
| V$DATAFILE | 數據文件以及所屬表空間的信息 |
| V$TEMPFILE | 臨時文件以及臨時表空間的信息 |
| ?DBA_DATA_FILES | 數據文件以及所屬表空間的信息 |
| DBA_TEMP_FILES | 臨時文件以及臨時表空間的信息 |
| V$TEMP_SPACE_HEADER | 臨時文件的空閑信息 |
| V$SORT_SEGMENT | 每個排序段的信息 |
| V$SORT_USER | 用戶使用的臨時排序信息 |
查詢表空間的空閑信息:
SELECT TABLESPACE_NAME ,SUM(BYTES/1024/1024) FREESPACE FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME=’WORKDATA01’
GROUP BY TABLESPACE_NAME
實際中可能有如下錯誤:
ORA-01653:此錯誤表明表空間數據文件設置小了。
使用上面的為表空間增加數據文件的命令即可。
總結
以上是生活随笔為你收集整理的ORACLE DBA学习笔记--表空间的管理(tablespace)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle 表空间的段管理
- 下一篇: GoldenGate SQL error