ORACLE數(shù)據(jù)庫名詞解釋
關(guān)鍵字: Database 收藏
一:首先對(duì)幾個(gè)有關(guān)模式對(duì)象進(jìn)行下說明
二:AUTOEXTNED_CLAUSE相關(guān)參數(shù)的說明及建議
三:STORAGE主要相關(guān)參數(shù)的說明及建議
四:建表時(shí)一些可能影響系統(tǒng)性能的參數(shù)的說明
一:首先對(duì)幾個(gè)有關(guān)模式對(duì)象進(jìn)行下說明
數(shù)據(jù)塊(block):也叫邏輯塊或ORACLE塊,它是數(shù)據(jù)庫進(jìn)行I/O的最小單位。一個(gè)數(shù)據(jù)庫塊對(duì)應(yīng)硬盤上的一個(gè)或多個(gè)物理塊,它決定于建庫時(shí)所使用的初始化參數(shù)DB_BLOCK_SIZE。數(shù)據(jù)庫塊的大小也決定了SGA中每一個(gè)數(shù)據(jù)庫緩沖區(qū)的大小。
范圍(extent):范圍是數(shù)據(jù)庫存儲(chǔ)空間分配的邏輯單位,它由一組連續(xù)的數(shù)據(jù)塊所組成。當(dāng)數(shù)據(jù)庫的對(duì)象(如表、列等)增長(zhǎng)時(shí),空間就被分配給范圍。
段(segment): 是由一個(gè)或多個(gè)范圍組成的范圍集,它包含一個(gè)表空間內(nèi)特定邏輯存儲(chǔ)結(jié)構(gòu)的所有數(shù)據(jù)。一個(gè)段是一個(gè)能被建立的邏輯結(jié)構(gòu),它占有存儲(chǔ),并且能增長(zhǎng),當(dāng)一個(gè)段中的所有空間被用完時(shí),ORACLE就分配它一個(gè)新的范圍,但是一個(gè)段不能跨越表空間。
表空間(tablespace):一個(gè)數(shù)據(jù)庫從邏輯上來說是由一個(gè)或多個(gè)表空間所組成,表空間是數(shù)據(jù)庫中物理編組的數(shù)據(jù)倉庫。每一個(gè)表空間是由段所組成,一個(gè)表空間存放一個(gè)或多個(gè)數(shù)據(jù)庫的物理文件。一個(gè)數(shù)據(jù)庫中的數(shù)據(jù)被邏輯地存儲(chǔ)在表空間上。
行鏈鎖:當(dāng)把一個(gè)包含LONG類型的列數(shù)據(jù)行存儲(chǔ)到一個(gè)數(shù)據(jù)庫中時(shí),則該行就可能被存儲(chǔ)在兩個(gè)或多個(gè)相鏈接的數(shù)據(jù)塊中,這種現(xiàn)象叫行鏈鎖。
遷移:當(dāng)數(shù)據(jù)庫塊中的行被更新時(shí),其行長(zhǎng)可能增長(zhǎng),此時(shí)可能會(huì)出現(xiàn)塊的自由空間被用完,而使行被移至下一數(shù)據(jù)庫塊,這種現(xiàn)象叫遷移。不論是行鏈鎖還是遷移都將會(huì)影響系統(tǒng)訪問數(shù)據(jù)的效率,因?yàn)镺RACLE是以數(shù)據(jù)塊為單位進(jìn)行讀取的,所以O(shè)RACLE在訪問一個(gè)行鏈鎖或遷移行時(shí)就必須掃描多個(gè)數(shù)據(jù)塊,降低I/O性能也就是影響系統(tǒng)性能。
二:AUTOEXTNED_CLAUSE相關(guān)參數(shù)的說明及建議
AUTOEXTEND
OFF: 當(dāng)AUTOEXTEND開關(guān)設(shè)置為OFF時(shí)數(shù)據(jù)文件將不能進(jìn)行自動(dòng)擴(kuò)展。
ON: 當(dāng)AUTOEXTEND開關(guān)設(shè)置為ON時(shí)數(shù)據(jù)文件在空間用完時(shí)將自動(dòng)進(jìn)行擴(kuò)展。
NEXT:在AUTOEXTEND開關(guān)設(shè)為ON時(shí),對(duì)指定該參數(shù),表示數(shù)據(jù)文件每次向外擴(kuò)展的字節(jié)數(shù)。MAXSIZE:指定允許數(shù)據(jù)文件向外擴(kuò)展的最大空間大小。(有了此參數(shù)后面的UNLIMITED就不用)。UNLIMITED:表示不限止分配給數(shù)據(jù)文件的磁盤空間。(有了此參數(shù)那MAXSIZE就不用)。
一般建議在建立數(shù)據(jù)文件時(shí)都指定允許其擴(kuò)展,對(duì)于回滾段可設(shè)置為UNLIMITED,以防止事務(wù)大多時(shí)回滾段可以有更大的擴(kuò)展空間;對(duì)于將來在其空間上要建立數(shù)據(jù)量較大增長(zhǎng)較快的表時(shí),應(yīng)該給它指定個(gè)較大的MAXSIZE值。
三:STORAGE主要相關(guān)參數(shù)的說明及建議
INITIAL:
此參數(shù)指定分配給段的第一個(gè)范圍的字節(jié)量,其缺省值相當(dāng)于5個(gè)數(shù)據(jù)庫塊,最小值為相當(dāng)于2個(gè)數(shù)據(jù)庫塊的大小。最大值要依賴于操作系統(tǒng)。該參數(shù)一般設(shè)定為該對(duì)象可能增長(zhǎng)到的最大值稍大30%或更大些到預(yù)計(jì)可能大小的2倍。
NEXT:
分配給一個(gè)段的下一個(gè)增量范圍的字節(jié)量,該參數(shù)的值一般設(shè)置等于INITIAL的值。MAXEXTENTS是能分配給段的范圍總數(shù)。對(duì)于我們自己建立的表在磁盤空間允許時(shí)一般把它設(shè)為UNLIMITED(無限制)。
MINEXTENTS
是段建立時(shí)分配給它的范圍總數(shù),一般為1個(gè)范圍。回滾段最少應(yīng)為2個(gè)范圍,應(yīng)盡可能再大一些
PCTINCREASE
是一個(gè)百分?jǐn)?shù),每一個(gè)增量范圍都在最新分配的增量范圍上增長(zhǎng)這個(gè)百分?jǐn)?shù)。缺省值是50%,但在回滾段中此參數(shù)應(yīng)設(shè)置為0。對(duì)于一般的表應(yīng)把它設(shè)置為0,但對(duì)于一些修改頻繁且增長(zhǎng)很快的表應(yīng)給它設(shè)置個(gè)較大的PCTINCREASE參數(shù)值,
OPTIMAL(此參數(shù)只對(duì)回滾段而言)
它指定在回滾段空閑時(shí)系統(tǒng)對(duì)回滾段回收的位置,當(dāng)回滾段比OPTIMAL大時(shí),ORACLE就能重新分配范圍,從而維護(hù)其大小。以下幾點(diǎn)建議可供參考:
1、于長(zhǎng)時(shí)間運(yùn)行的更新事務(wù)的回滾段,應(yīng)該分配一個(gè)高的OPTIMAL參數(shù)值,以避免過多的分配和重新分配。
2、對(duì)于長(zhǎng)時(shí)間運(yùn)行查詢的回滾段,為了保證在查詢的同時(shí)能用于更新信息的事務(wù),它應(yīng)該有一個(gè)大的OPTIMAL參數(shù)值,以免錯(cuò)誤快照太老。于短時(shí)間運(yùn)行更新事務(wù)和短時(shí)間運(yùn)行查詢事務(wù)的回滾段,應(yīng)該有一個(gè)較小的OPTIMAL參數(shù)值,以便增加回滾段的高速緩沖存儲(chǔ)器。ORACLE具有范圍動(dòng)態(tài)重新分配的性能,其特點(diǎn)是:一個(gè)回滾段可以有一個(gè)最佳的尺寸,最佳尺寸是在段建立或修改時(shí)指定的。一旦一些活動(dòng)事務(wù)被刪除,回滾段將收縮到最佳尺寸(OPTIMAL)。(在指定存儲(chǔ)參數(shù)時(shí),應(yīng)當(dāng)遵循的的方針:即最大的使用連續(xù)的自由空間和防止數(shù)據(jù)文件碎片化。如果不控制范圍的分配,則會(huì)由于過量的I/O操作和操作系統(tǒng)文件的碎片化而使系統(tǒng)性能下降。減少碎片的辦法是使一個(gè)段符合INITIAL范圍,并且設(shè)置PCTINCREASE適合于擴(kuò)大的增量范圍)以上參數(shù)在對(duì)clusters、 indexes、 rollback segments、 snapshots、 snapshot logs、 tables、tablespaces、partitions等對(duì)象進(jìn)行創(chuàng)建或修改時(shí)進(jìn)行設(shè)置。其中INITIAL、MINEXTENTS為在創(chuàng)建時(shí)設(shè)置,已后就不能對(duì)它進(jìn)行修改;MAXEXTENTS、NEXT、PCTINCREASE、OPTIMAL都可以在對(duì)象創(chuàng)建后根據(jù)情況對(duì)其進(jìn)行重新設(shè)置。
3、表空間(TABLESPACE)與建立在其上的對(duì)象在STORAGE參數(shù)的關(guān)系
在建立表空間(TABLESPACE)時(shí)可以設(shè)置有關(guān)存儲(chǔ)參數(shù)(STORAGE),那么以后建立在其上的對(duì)象都將可以繼承這些參數(shù)。這些參數(shù)只是一個(gè)較合理的設(shè)置,一般情況下建立在此表空間上的對(duì)象可以繼承它。但有時(shí)可能有些對(duì)象較特殊,比如:對(duì)于一些修改頻繁且數(shù)據(jù)量較大的對(duì)象,就應(yīng)該給它個(gè)較大的NEXT參數(shù)值和較大的PCTINCREASE參數(shù)值,以避免范圍的頻繁刪除—分配所導(dǎo)致的物理文件的碎片化。在這種情況下就應(yīng)該在建對(duì)象時(shí)為此對(duì)象設(shè)置特有的STORAGE參數(shù)值。
四:建表時(shí)一些可能影響系統(tǒng)性能的參數(shù)的說明
1、自由空間的控制及相關(guān)參數(shù)的說明
對(duì)于插入、更新和刪除數(shù)據(jù)庫塊中的行來說,可通過指定PCTFREE和PCTUSED空間參數(shù)的值來控制自由空間的使用,減少上面所講到的“行鏈鎖”和“遷移”:
PCTFREE:該參數(shù)用于指定在向塊中插入新行時(shí)應(yīng)該保留的自由空間的百分?jǐn)?shù),該保留空間用于修改已包含在該塊中的行時(shí)使用。比如在建表CREATE TABLE語句中指定該參數(shù)為:PCTFREE=20,則在向該表插入新的數(shù)據(jù)行時(shí),其每個(gè)數(shù)據(jù)塊空間最多只能使用80%,一旦達(dá)到80%,就不能再向該塊插入數(shù)據(jù)行。留下的20%空間留作此后修改該塊中的行時(shí)使用。
PCTUSED:該參數(shù)是一個(gè)限定值,其目的是控制向一個(gè)低于PCTUSED所指定的值時(shí),。當(dāng)通過刪除行或更新行(減少了列的存儲(chǔ)使用量)而使數(shù)據(jù)庫塊的使用百分?jǐn)?shù)ORACLE又許可向該塊插入新的數(shù)據(jù)行。
所以在建表時(shí)可以根據(jù)表的特性和將來系統(tǒng)對(duì)表所要進(jìn)行的操作對(duì)其設(shè)置一個(gè)合理的值。但兩參數(shù)之和要小于或等于100((PCTFREE+PCTUSED)<= 100)。利用PCTFREE和PCTUSED對(duì)塊的自由空間進(jìn)行控制:
1. 當(dāng)選擇較低的PCTFREE值時(shí)能允許向數(shù)據(jù)塊中插入更多的數(shù)據(jù)行,使其填的更滿,這樣可節(jié)約數(shù)據(jù)塊,使行移動(dòng)少;但如果有頻繁刪除操作時(shí),就需要頻繁的空間再組織操作從而增加處理代價(jià)。
2.當(dāng)選擇較高的PCTFREE參數(shù)時(shí),可為未來的更新操作提供更多的空間;減少空間再組織,從而降低處理代價(jià),減少鏈鎖行,但它需要更多的數(shù)據(jù)庫塊來存儲(chǔ)數(shù)據(jù),而且如果PCTFREE參數(shù)值太高,那么裝入一個(gè)塊的數(shù)據(jù)行就越少,因?yàn)镺RACLE總是以塊為單位讀,塊的數(shù)據(jù)少那每次讀的數(shù)據(jù)就少,這樣將影響訪問數(shù)據(jù)的效率。
3. 當(dāng)選擇較低的PCTUSED時(shí),可降低處理代價(jià)(因?yàn)閿?shù)據(jù)庫塊空閑的機(jī)會(huì)少),增加未用空間,但容易造成碎片增多。
4. 當(dāng)選擇較高的PCTUSED時(shí),可改善空間使用,但會(huì)增加處理代價(jià)(因?yàn)閿?shù)據(jù)庫塊經(jīng)常呈現(xiàn)空閑狀態(tài))
2、建表時(shí)考慮對(duì)INITRANS和MAXTRANS參數(shù)的設(shè)置
這兩個(gè)參數(shù)是對(duì)數(shù)據(jù)塊訪問進(jìn)行控制,合理調(diào)整兩個(gè)參數(shù)也將盡量減少用戶訪問時(shí)的沖突,對(duì)所有數(shù)據(jù)的訪問最終都是對(duì)數(shù)據(jù)塊的訪問。
INITRANS:
此參數(shù)指定在對(duì)象的每一個(gè)數(shù)據(jù)塊中為指定數(shù)目的事務(wù)項(xiàng)預(yù)分配的空間,這樣當(dāng)事務(wù)進(jìn)入數(shù)據(jù)塊時(shí)系統(tǒng)就不必動(dòng)態(tài)地來為事務(wù)項(xiàng)分配空間,其默認(rèn)值為1。
MAXTRANS:
此參數(shù)指定能夠并發(fā)進(jìn)入一個(gè)數(shù)據(jù)塊的最大事務(wù)數(shù)目,這也就限制了在任何特定的時(shí)間事務(wù)項(xiàng)在一個(gè)數(shù)據(jù)塊所能占用的空間大小。
說明:對(duì)于用戶數(shù)量較大的情況,就應(yīng)將這兩個(gè)參數(shù)都設(shè)得大些,對(duì)于用戶較少的情況,相應(yīng)事務(wù)數(shù)目也不會(huì)太多,可以設(shè)得小些,以節(jié)省空間,另外要考慮對(duì)象的大小,對(duì)于大對(duì)象,數(shù)據(jù)分散在許多數(shù)據(jù)塊中,這樣對(duì)同一數(shù)據(jù)塊訪問的可能性較小,則可考慮將這兩個(gè)參數(shù)設(shè)小些,而對(duì)于較小的表,也許用不了幾個(gè)數(shù)據(jù)塊當(dāng)用戶多時(shí),對(duì)同一塊的訪問可能性很大,就需要將它們?cè)O(shè)得大些。
在建表時(shí)應(yīng)分析在將來開發(fā)的系統(tǒng)中將對(duì)表進(jìn)行什么樣的操作,對(duì)于在系統(tǒng)中要對(duì)表進(jìn)行的經(jīng)常性的查詢的字段應(yīng)為其建立索引,這樣在系統(tǒng)中就可以利用此索引進(jìn)行查詢以提高查詢的速度。同時(shí)在建索引時(shí),應(yīng)最好將索引存放在不同的表空間中,并且最好是存放在不同的磁盤上,這樣在處理數(shù)據(jù)時(shí)就可以充分利用磁盤I/O,使數(shù)據(jù)和索引在不同的I/O上進(jìn)行,以提高訪問速度。
接下來是實(shí)際工作中常常使用的操作
--查看block_size大小
select * from USER_TABLESPACES;
select * from DBA_TABLESPACES;
--查看用戶的某個(gè)表占據(jù)的空間大小
select sum(bytes)/1024/1024||‘ M 字節(jié)‘ from user_extents where SEGMENT_NAME = upper(‘&TABLE_NAME‘);
--查看用戶的某個(gè)表的段空間大小
select sum(bytes)/1024/1024||‘ M 字節(jié)‘ from user_segments where SEGMENT_NAME = upper(‘&TABLE_NAME‘);
--查看存儲(chǔ)文件的空間分配詳情和臨時(shí)空間的大小
select tablespace_name, sum(bytes) / 1024 / 1024 / 1024||‘GB‘
from dba_data_files
group by tablespace_name
union all
select tablespace_name, sum(bytes) / 1024 / 1024 / 1024||‘GB‘
from dba_temp_files
group by tablespace_name
order by 2;
--這個(gè)是一個(gè)比較各個(gè)空間的使用情況的查詢語句
select tablespace_name,
sum(bytes) / 1024 / 1024 / 1024 || ‘ GB‘,
‘user_segments‘
from user_segments
group by tablespace_name
union all
select tablespace_name,
sum(bytes) / 1024 / 1024 / 1024 || ‘ GB‘,
‘dba_segments‘
from dba_segments
group by tablespace_name
union all
select tablespace_name,
sum(bytes) / 1024 / 1024 / 1024 || ‘ GB‘,
‘dba_data_files‘
from dba_data_files
group by tablespace_name
union all
select tablespace_name,
sum(bytes) / 1024 / 1024 / 1024 || ‘ GB‘,
‘dba_temp_files‘
from dba_temp_files
group by tablespace_name
union all
select tablespace_name,
sum(bytes) / 1024 / 1024 / 1024 || ‘ GB‘,
‘dba_free_space‘
from dba_free_space
group by tablespace_name
order by 1;
--如何建立表空間
表空間的建立有如下幾種方式
--Create tablespace in Oracle
--The create tablespace statement is used to create a tablespace. --
--Permanent tablespace--
create tablespace ts_something
logging
datafile ‘/dbf1/ts_sth.dbf‘
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;
create tablespace data datafile ‘/home/oracle/databases/ora10/data.dbf‘
size 10M
autoextend on maxsize 200M
extent management local uniform size 64K;
--Temporary tablespace--
create temporary tablespace temp_mtr
tempfile ‘/dbf1/mtr_temp01.dbf‘
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;
Note, a temporary tablespace has tempfiles, not datafiles.
--Undo tablespace--
create undo tablespace ts_undo
datafile ‘/dbf/undo.dbf‘
size 100M;
Misc
More than one datafile can be created with a single create tablespace command:
create tablespace ts_sth
datafile ‘c:\xx\sth_01.dbf‘ size 4M autoextend off,
‘c:\xx\sth_02.dbf‘ size 4M autoextend off,
‘c:\xx\sth_03.dbf‘ size 4M autoextend off
logging
extent management local;
--如何更改表空間的大小
有兩種方式:1——增加數(shù)據(jù)文件 2——修改數(shù)據(jù)文件大小
alter database datafile ‘/ocsdata/ahocs/OCS_TBS_CUST_02.dbf‘ resize 2047M;
alter tablespace ocs_tbs_cust add datafile ‘/ocsdata/ahocs/OCS_TBS_CUST_02.dbf‘ size 2047M;
其他表空間問題
用delete 方法刪掉表中的數(shù)據(jù)后,發(fā)現(xiàn)數(shù)據(jù)所占的空間釋放不了,怎么辦?
需要你對(duì) high water mark (高水位) 有一個(gè)認(rèn)識(shí)
除了truncate表和drop表外
要釋放空間,就只能重新建立表(exp/imp等)或者:
Alter table table_name move tablespace tab_space_name;
把表移動(dòng)到其他表空間,這樣索引會(huì)失效的
oracle的數(shù)據(jù)空間是只能增大,不能減小的
Oracle表空間小知識(shí)
Oracle表空間,底層以data_file文件形式存放,可以定義一個(gè)數(shù)據(jù)庫能打開多少個(gè)數(shù)據(jù)文件,一個(gè)表空間可以有1到多個(gè)數(shù)據(jù)文件,一個(gè)數(shù)據(jù)文件只能隸屬于一個(gè)表空間。
建表時(shí):
1、指定表空間 2、指定擴(kuò)展大小
普通表只能建在一個(gè)表空間,分區(qū)表可以建在多個(gè)表空間上。
delete只能刪除數(shù)據(jù),還占著表空間,用truncate命令,但truncate沒有條件。
如何將表移動(dòng)表空間?
ALTER TABLE TABLE_NAME MOVE TABLESPACE_NAME;
如何將索引移動(dòng)表空間?
ALTER INDEX INDEX_NAME REBUILD TABLESPACE TABLESPACE_NAME;
查詢表空間信息?
SELECT * FROM DBA_DATA_FILES;
如何查看各個(gè)表空間占用磁盤情況?
SQL> col tablespace format a20
SQL> select
b.file_id 文件ID號(hào),
b.tablespace_name 表空間名,
b.bytes 字節(jié)數(shù),
(b.bytes-sum(nvl(a.bytes,0))) 已使用,
sum(nvl(a.bytes,0)) 剩余空間,
sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比
from dba_free_space a,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_id,b.bytes
order by b.file_id;
事務(wù)要求的回滾段空間不夠,表現(xiàn)為表空間用滿(ORA-01560錯(cuò)誤),回滾
段擴(kuò)展到達(dá)參數(shù)MAXEXTENTS的值(ORA-01628)的解決辦法.
向回滾段表空間添加文件或使已有的文件變大;增加MAXEXTENTS的值。
如何監(jiān)控表空間的I/O 比例?
select B.tablespace_name name,B.file_name "file",A.phyrds pyr,
A.phyblkrd pbr,A.phywrts pyw, A.phyblkwrt pbw
from v$filestat A, dba_data_files B
where A.file# = B.file_id
order by B.tablespace_name;
如何知道表在表空間中的存儲(chǔ)情況?
select segment_name,sum(bytes),count(*) ext_quan
from dba_extents
where tablespace_name=‘&tablespace_name‘ and segment_type=‘TABLE‘
group by tablespace_name,segment_name;
如何知道索引在表空間中的存儲(chǔ)情況?
select segment_name,count(*)
from dba_extents where segment_type=‘INDEX‘ and owner=‘&owner‘
group by segment_name;
DBA_TABLESPACES
所有表空間的描述.
V$TABLESPACE
控制文件中表空間的信息
V$TEMP_EXTENT_MAP
顯示所有臨時(shí)表空間的每一個(gè)單元的狀態(tài)信息.
V$TEMP_SPACE_HEADER
顯示每一個(gè)臨時(shí)表空間中每一個(gè)文件的聚集信息,涉及每個(gè)空間首部中當(dāng)前使用多少空間和有多少自由空間.
USER_TABLESPACES
可存取的表空間的描述.
USER_TS_QUOTAS
用戶的表空間限額.
DATABASE_PROPERTIES
列出當(dāng)前缺省的臨時(shí)表空間的名稱.
DBA_FREE_SPACE
列出所有表空間中的空閑分區(qū).
DBA_FREE_SPACE_COALESCED
包含表空間中合并空間的統(tǒng)計(jì)數(shù)據(jù)
DBA_TS_QUOTAS
所有用戶的表空間的限額.
DBA_UNDO_EXTENTS
在撤消表空間的每個(gè)范圍的提交時(shí)間.
USER_FREE_SPACE
用戶可存取表空間中的空閑范圍.
TS_PITR_CHECK
提供可能禁止表空間及時(shí)點(diǎn)恢復(fù)繼續(xù)的依賴或約束信息
TS_PITR_OBJECTS_TO_BE_DROPPED
列出作為執(zhí)行表空間及時(shí)點(diǎn)恢復(fù)的結(jié)果而丟失的所有對(duì)象.
聯(lián)系客服