1. 程式人生 > >Oracle11g溫習-第一章 3、ORACLE邏輯結構

Oracle11g溫習-第一章 3、ORACLE邏輯結構

reat tables 邏輯結構 partition 一個數 alt 解決 不能 爭用

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

  1. 表空間(tablespace)

表空間是數據庫中的基本邏輯結構,一系列數據文件的集合。一個表空間可以包含多個數據文件,但是一個數據文件只能屬於一個表空間。

查詢表空間:

SYS @ prod >select file_name,file_id,tablespace_name,bytes,status from dba_data_files;

FILE_NAME FILE_ID TABLESPACE_NAME BYTES STATUS

-------------------------------------------------- ------- ------------------------------ ----------/u01/app/oracle/oradata/prod/users01.dbf 4 USERS 5242880 AVAILABLE

/u01/app/oracle/oradata/prod/sysaux01.dbf 3 SYSAUX 241172480 AVAILABLE

/u01/app/oracle/oradata/prod/undotbs01.dbf 2 UNDOTBS1 26214400 AVAILABLE

/u01/app/oracle/oradata/prod/system01.dbf 1 SYSTEM 503316480 AVAILABLE

/u01/app/oracle/oradata/prod/example01.dbf 5 EXAMPLE 104857600 AVAILABLE

查詢表空間的空閑信息:

SYS @ prod >select tablespace_name,file_id from dba_free_space;

TABLESPACE_NAME FILE_ID

------------------------------ -------

SYSTEM 1

SYSTEM 1

UNDOTBS1 2

UNDOTBS1 2

UNDOTBS1 2

UNDOTBS1 2

UNDOTBS1 2

SYSAUX 3

SYSAUX 3

SYSAUX 3

SYSAUX 3

使表空間 offline

SQL>alter tablespace *** offline;

指定用戶在 該表空間下的限額

SYS @ prod >alter user scott quota 100m on users;

User altered.

臨時表空間用於為用戶排序的ORDER BY語句使用。創建數據庫時可以指定數據庫的默認臨時表空間。在創建用戶的時候可以指定用戶的默認臨時表空間。例如下句就指定temp為用戶的臨時表空間。

SYS @ prod >create user test identified by test temporary tablespace temp;

User created.

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邏輯結構