Oracle11g溫習-第一章 3、ORACLE邏輯結構
2013年4月27日 星期六
10:27
Oracle邏輯結構的相關數據字典:
記錄各個表空間的詳細信息。 SYS @ prod > select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS -------------------- --------- SYSTEM ONLINE UNDOTBS1 ONLINE SYSAUX ONLINE TEMP ONLINE USERS ONLINE EXAMPLE ONLINE TEST ONLINE |
記錄各個表空間的使用的百分比 SYS @ prod > select * from dba_tablespace_usage_metrics;
TABLESPACE_NAME USED_SPACE TABLESPACE_SIZE USED_PERCENT -------------------- ---------- --------------- ------------ EXAMPLE 8736 215784 4.04849294 SYSAUX 33840 237544 14.2457818 SYSTEM 65552 269544 24.3195916 TEMP 0 206953 0 TEST 8 203624 .00392881 UNDOTBS1 288 230505 .12494306 USERS 1024 204104 .501705013 |
記錄各個數據文件的詳細信息。 SYS @ prod >col file_id for 99999 SYS @ prod >col file_name for a50 SYS @ prod >col tablespace for a15 SYS @ prod >set linesize 10000 SYS @ prod > select file_id,file_name,tablespace_name,status,autoextensible from dba_data_files;
FILE_ID FILE_NAME TABLESPACE_NAME STATUS AUT ------- -------------------------------------------------- -------------------- --------- --- 6 /u01/app/oracle/oradata/prod/test01.dbf TEST AVAILABLE YES 4 /u01/app/oracle/oradata/prod/users01.dbf USERS AVAILABLE YES 3 /u01/app/oracle/oradata/prod/sysaux01.dbf SYSAUX AVAILABLE YES 2 /u01/app/oracle/oradata/prod/undotbs01.dbf UNDOTBS1 AVAILABLE YES 1 /u01/app/oracle/oradata/prod/system01.dbf SYSTEM AVAILABLE YES 5 /u01/app/oracle/oradata/prod/example01.dbf EXAMPLE AVAILABLE YES |
記錄各個段的詳細信息,與 DBA_TABLES,DBA_INDEXES,DBA_LOBS,DBA_PART_TABLES,DBA_PART_INDEXES, DBA_PART_LOBS,DBA_OBJECTS搭配使用。
SYS @ prod > select owner,segment_name,segment_type,tablespace_name,extents from dba_segments where segment_name=‘TEST‘;
OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME EXTENTS ----- --------------- ------------------ -------------------- ---------- SYS TEST TABLE SYSTEM 1 SCOTT TEST TABLE USERS 18
SELECT * FROM DBA_LOBS --BLOB字段所對應的字段名稱。 |
分區索引需通過DBA_INDEXS來找到對應的表名 SYS @ prod > select owner,index_name from dba_indexes where rownum <2;
OWNER INDEX_NAME ----- ------------------------------ SYS I_ICOL1 |
記錄各個區間對象的詳細信息。 SYS @ prod > select owner,segment_name,PARTITION_NAME,segment_type,tablespace_name,file_id from dba_extents where segment_name=‘TEST‘;
OWNER SEGMENT_NAME PARTITION_NAME SEGMENT_TYPE TABLESPACE_NAME FILE_ID ----- --------------- ------------------------------ ------------------ -------------------- ------- SYS TEST TABLE SYSTEM 1 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 SCOTT TEST TABLE USERS 4 |
記錄表空間的基本信息,對象ID,表空間名稱。 SYS @ prod > select ts#,name from v$tablespace;
TS# NAME ---------- -------------------------------------------------- 0 SYSTEM 1 UNDOTBS1 2 SYSAUX 4 USERS 3 TEMP 6 EXAMPLE 8 TEST |
記錄數據文件的基本信息,對象ID,表空間ID,文件名稱以及狀態、大小和相應的變化。 SYS @ prod > select file#,ts#,status,name from v$datafile;
FILE# TS# STATUS NAME ---------- ---------- ------- -------------------------------------------------- 1 0 SYSTEM /u01/app/oracle/oradata/prod/system01.dbf 2 1 ONLINE /u01/app/oracle/oradata/prod/undotbs01.dbf 3 2 ONLINE /u01/app/oracle/oradata/prod/sysaux01.dbf 4 4 ONLINE /u01/app/oracle/oradata/prod/users01.dbf 5 6 ONLINE /u01/app/oracle/oradata/prod/example01.dbf 6 8 ONLINE /u01/app/oracle/oradata/prod/test01.dbf |
實時監控數據庫段級對象的統計信息。 SYS @ prod > select ts#,obj#,dataobj#,statistic_name,statistic#,value from v$segstat where rownum <5;
TS# OBJ# DATAOBJ# STATISTIC_NAME STATISTIC# VALUE ---------- ---------- ---------- -------------------- ---------- ---------- 0 255 255 logical reads 0 1808 0 255 255 buffer busy waits 1 0 0 255 255 gc buffer busy 2 0 0 255 255 db block changes 3 0 |
段級對象的統計項目。 SYS @ prod > select statistic#,name from v$segstat_name where rownum <5;
STATISTIC# NAME ---------- -------------------------------------------------- 0 logical reads 1 buffer busy waits 2 gc buffer busy 3 db block changes |
實時監控段級對象的性能,說穿了和V$SEGSTAT有點像,統計信息更豐富一些。 SYS @ prod > select owner,object_name,tablespace_name,statistic_name from v$segment_statistics where rownum <5;
OWNER OBJECT_NAM TABLESPACE_NAME STATISTIC_NAME ----- ---------- -------------------- -------------------- SYS HIST_HEAD$ SYSTEM logical reads SYS HIST_HEAD$ SYSTEM buffer busy waits SYS HIST_HEAD$ SYSTEM gc buffer busy SYS HIST_HEAD$ SYSTEM db block changes |
- 表空間(tablespace)
表空間是數據庫中的基本邏輯結構,一系列數據文件的集合。一個表空間可以包含多個數據文件,但是一個數據文件只能屬於一個表空間。
使表空間 offline SQL>alter tablespace *** offline;
|
2、段(Segment)
段是對象在數據庫中占用的空間,雖然段和數據庫對象是一一對應的,但段是從數據庫存儲的角度來看的。一個段只能屬於一個表空間,當然一個表空間可以有多個段。 表空間和數據文件是物理存儲上的一對多的關系,表空間和段是邏輯存儲上的一對多的關系,段不直接和數據文件發生關系。一個段可以屬於多個數據文件 關於段可以指定擴展到哪個數據文件上面。 可以分為以下四種
數據段(Data Segment) 索引段(Index Segment) 回滾段(Rollback Segment) 臨時段(Temporary Segment) |
3、區間(Extent)
關於Extent的翻譯有多種解釋,有的譯作擴展,有的譯作盤區,我這裏通常譯為區間。在一個段中可以存在多個區間,區間是為數據一次性預留的一個較大的存儲空間,直到那個區間被用滿,數據庫會繼續申請一個新的預留存儲空間,即新的區間,一直到段的最大區間數(Max Extent)或沒有可用的磁盤空間可以申請。 在ORACLE8i以上版本,理論上一個段可以無窮個區間,但是多個區間對ORACLE卻是有性能影響的,ORACLE建議把數據分布在盡量少的區間上,以減少ORACLE的管理與磁頭的移動。 |
4、Oracle數據塊(Block)
ORACLE最基本的存儲單位,它是OS數據塊的整數倍。ORACLE的操作都是以塊為基本單位,一個區間可以包含多個塊(如果區間大小不是塊大小的整數倍,ORACLE實際也擴展到塊的整數倍)。 |
5、基本表空間介紹
a. 系統表空間
主要存放數據字典和內部系統表基表
查看數據數據字典的SQL
select * from dict
查看內部系統表的SQL
select * from v$fixed_view_definition
DBA對系統的系統表中的數據字典必須有一個很深刻的了解,他們必須準備一些基礎的SQL語句,通過這些SQL可以立即了解系統的狀況和數據庫的狀態,這些基本的SQL包括:
系統的剩余空間
系統的SGA
狀態系統的等待
用戶的權限
當前的用戶鎖
緩沖區的使用狀況等
大量的讀少量的寫是該表空間的一個顯著的特點。
b. 臨時表空間.
臨時表空間顧名思義是用來存放臨時數據的,例如排序操作的臨時空間,他的空間會在下次系統啟動的時候全部被釋放。
c. 回滾段表空間
i. 回滾段在系統中的作用
當數據庫進行更新插入刪除等操作的時候,新的數據被更新到原來的數據文件,而舊的數據(Before Image)就被放到回滾段中,如果數據需要回滾,那麽可以從回滾段將數據再復制到數據文件中。來完成數據的回滾。在系統恢復的時候, 回滾段可以用來回滾沒有被commit 的數據,解決系統的一致性。 回滾段在任何情況下都是大量的寫,一般是少量讀,因此建議把回滾段單獨出來放在一個單獨的設備(如單獨的磁盤或RAID),以減少磁盤的IO爭用。 |
ii. 回滾段的工作方式
一個回滾表空間可以被劃分成多個回滾段.
一個回滾段可以保存多個會話的數據.
回滾段是一個圓形的數據模型
假設回滾段由4 個區間組成,他們的使用順序就是區間1 區間2 區間3 區間4 區間1。也就是說,區間是可以循環使用的,當區間4到區間1的時候,區間1裏面的會話還沒有結束, 區間4用完後就不能再用區間1,這時系統必須分配區間5,來繼續為其他會話服務。
我們分析一個Update 語句的完成
①. 用戶提交一個Update 語句
②. Server Process 檢查內存緩沖.
如果沒有該數據塊的緩沖,則從磁盤讀入
i. 如果沒有內存的有效空間,DBWR被啟動將未寫入磁盤的臟緩沖寫入磁盤。
ii. 如果有有效空間,則讀入。
③. 在緩沖內更新數據
i. 申請一個回滾段入口,將舊數據寫入回滾段。
ii. 加鎖並更新數據。
iii. 並在同時將修改記錄在Redo log buffer中。
Oracle11g溫習-第一章 3、ORACLE邏輯結構