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