原作者:柴田長(zhǎng)(日本Oracle)

目前創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、北海街道網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
第一回,讓我們針對(duì)表空間來(lái)做一些練習(xí)。
對(duì)于每一個(gè)練習(xí),我們將總結(jié)出答案和回答的例子,大家可以跟自己的答案來(lái)比較一下。
此外,在SQL中使用的目錄結(jié)構(gòu)是基于Linux的。
■練習(xí)1。請(qǐng)創(chuàng)建一個(gè)名為[TBS_SMALL]的Small File表空間。這個(gè)表空間需要使用三個(gè)100MB的數(shù)據(jù)文件來(lái)構(gòu)成。
SQL> create tablespace TBS_SMALL datafile '/oracle_datafile1/tbs_small01.dbf' size 100M,
'/oracle_datafile1/tbs_small02.dbf' size 100M,
'/oracle_datafile2/tbs_small03.dbf' size 100M;
可能有些人還是第一次聽到【Small File表空間】這樣的說(shuō)法。其實(shí),從Oracle Database10g Release 1
開始出現(xiàn)了【Big File表空間】,所以,以前傳統(tǒng)的表空間就被稱為【Small File表空間】了。
在這里希望可以理解,Small File表空間是可以由多個(gè)數(shù)據(jù)文件構(gòu)成的。在以前32位的操作系統(tǒng)上,
一個(gè)文件的最大限制為2GB ,當(dāng)你想做成一個(gè)超過(guò)2GB的表空間時(shí),這個(gè)功能會(huì)非常有效。
當(dāng)然,在進(jìn)化成64位系統(tǒng)以后,對(duì)于這個(gè)文件大小2GB的限制,在操作系統(tǒng)層面已經(jīng)不用再做過(guò)多考慮,
但是作為Oracle數(shù)據(jù)庫(kù)來(lái)說(shuō),還是要注意數(shù)據(jù)文件大小是有限制的。
Small File表空間中的一個(gè)數(shù)據(jù)文件大小的最大值:
[表空間的Block Size] × 4194303(= 2^22 -1) Block Size=8KB的話,大約是32GB(一個(gè)數(shù)據(jù)文件內(nèi)的
數(shù)據(jù)塊號(hào)要使用22bit來(lái)管理,另外,Block Size的大小也會(huì)影響計(jì)算結(jié)果)
順便說(shuō)一句,像上面回答例中的DDL一樣,使用不同文件夾下的數(shù)據(jù)文件來(lái)做成一個(gè)表空間也是可以的。
但是ASM和BigFile表空間組合使用的情況下,其實(shí)并不需要考慮這個(gè)問(wèn)題(以后再找機(jī)會(huì)介紹)。
■練習(xí)2。通過(guò)數(shù)據(jù)字典視圖【DBA_DATA_FILES】來(lái)確認(rèn)TBS_SMALL表空間的大小。
SQL> select tablespace_name, sum(bytes)/1024/1024 "size(MB)" from DBA_DATA_FILES
where tablespace_name = 'TBS_SMALL' group by tablespace_name;
TABLESPACE_NAME size(MB)
------------------------------ ----------
TBS_SMALL 300
Oracle數(shù)據(jù)庫(kù)里準(zhǔn)備了大量的數(shù)據(jù)字典視圖,可以用來(lái)確認(rèn)數(shù)據(jù)庫(kù)內(nèi)部的設(shè)定信息等。
作為DBA來(lái)講,不是僅僅執(zhí)行完DDL語(yǔ)句就結(jié)束了,執(zhí)行后的結(jié)果確認(rèn)也是非常重要的。
練習(xí)2中使用的數(shù)據(jù)字典視圖【DBA_DATA_FILES】,可以用來(lái)確認(rèn)全部數(shù)據(jù)文件的各種信息。
比如各個(gè)數(shù)據(jù)文件屬于哪個(gè)表空間。
根據(jù)上面的Select語(yǔ)句,就可以看出,TBS_SMALL表空間里的三個(gè)數(shù)據(jù)文件大小合計(jì)
(300MB = 100MB + 100MB + 100MB)。如果結(jié)果不是300MB,
那么練習(xí)1中表空間做成的時(shí)候可能存在誤操作。
關(guān)于數(shù)據(jù)字典視圖中各列所表示的意思,請(qǐng)參考相關(guān)的說(shuō)明文檔。
■練習(xí)3。向TBS_SMALL表空間中追加新的數(shù)據(jù)文件,使其大小擴(kuò)大至400MB。
SQL> alter tablespace TBS_SMALL add datafile '/oracle_datafile2/tbs_small04.dbf' size 100M;
很簡(jiǎn)單吧?通過(guò)向SMALL FILE表空間內(nèi)追加數(shù)據(jù)文件,可以實(shí)現(xiàn)將表空間擴(kuò)大的目的。
■練習(xí)4。把TBS_SMALL表空間的大小擴(kuò)大至500MB。
SQL> alter tablespace TBS_SMALL add datafile '/oracle_datafile2/tbs_small05.dbf' size 100M;
打算使用跟練習(xí)3一樣的語(yǔ)句的各位,先等一下。
這個(gè)語(yǔ)句當(dāng)然是沒問(wèn)題的,但是當(dāng)我想把表空間擴(kuò)大至50GB的話,怎么辦呢?
要重復(fù)500次這樣的操作的話,需要花費(fèi)相當(dāng)多的時(shí)間。
做成以后,數(shù)據(jù)文件的維護(hù)顯而易見也會(huì)成為一個(gè)×××煩。
而且,一個(gè)SMALL FILE表空間內(nèi)可以包含的數(shù)據(jù)文件個(gè)數(shù)的上限是1022個(gè),不能無(wú)限的追加下去。
所以,練習(xí)4,我們使用另外一個(gè)擴(kuò)大表空間的辦法,也就是擴(kuò)大數(shù)據(jù)文件的大小。
SQL> alter database datafile '/oracle_datafile1/tbs_small01.dbf' resize 125M;
SQL> alter database datafile '/oracle_datafile1/tbs_small02.dbf' resize 125M;
SQL> alter database datafile '/oracle_datafile2/tbs_small03.dbf' resize 125M;
SQL> alter database datafile '/oracle_datafile2/tbs_small04.dbf' resize 125M;
當(dāng)然,只把其中第4個(gè)文件的大小改為200MB也是可以實(shí)現(xiàn)要求的,但是這樣的組成不太整齊不是嗎。
作為一個(gè)老資格的DBA,當(dāng)然是所有的數(shù)據(jù)文件大小都一直才會(huì)覺得舒服。
其實(shí),這樣做是有理由的。舉個(gè)例子,表里的數(shù)據(jù)被均等的分布在各個(gè)數(shù)據(jù)文件,
100MB的數(shù)據(jù)文件滿了的時(shí)候,只有這個(gè)200MB的數(shù)據(jù)文件還有空間了,
這時(shí)候,數(shù)據(jù)文件的寫入就全部集中于這個(gè)文件上了。
當(dāng)目錄【/oracle_datafile】和【/oracle_datafile2】在不同的磁盤上的時(shí)候,
對(duì)于特定的磁盤的寫入就會(huì)很集中,則會(huì)產(chǎn)生性能下降的可能。
另外,從各個(gè)磁盤上讀取的數(shù)據(jù)量也有可能會(huì)發(fā)生偏移。
所以,這次我們對(duì)存在的4個(gè)數(shù)據(jù)文件都做了同樣大小的擴(kuò)大。
通過(guò)這項(xiàng)練習(xí),希望大家體會(huì)到的有2點(diǎn)。
第一點(diǎn),雖然是對(duì)表空間進(jìn)行變更時(shí),但是使用的語(yǔ)句不是【alter tablespace】
而是【alter database】來(lái)進(jìn)行數(shù)據(jù)文件大小的變更。
第二點(diǎn),數(shù)據(jù)文件的數(shù)量越多,維護(hù)起來(lái)就越難。
尤其是在使用裸設(shè)備放置數(shù)據(jù)文件的時(shí)候,是很難擴(kuò)大數(shù)據(jù)文件的大小的。
所以隨著表空間大小的擴(kuò)大,需要被管理的裸設(shè)備以及數(shù)據(jù)文件數(shù)都會(huì)增加。
此外,也許有人有過(guò)這樣的經(jīng)驗(yàn),由于新追加的數(shù)據(jù)文件都是空的,
所以在追加數(shù)據(jù)文件后還要通過(guò)對(duì)數(shù)據(jù)做一次導(dǎo)出然后再做一次導(dǎo)入來(lái)避免問(wèn)題。
(不過(guò)這個(gè)問(wèn)題在ASM上已經(jīng)可以得到解決)
完成擴(kuò)大數(shù)據(jù)文件的操作后,可以使用下面的Select語(yǔ)句來(lái)進(jìn)行查詢,使用rollup的話,會(huì)很方便。
SQL> select tablespace_name, file_name, sum(bytes)/1024/1024 "size(MB)" from DBA_DATA_FILES
where tablespace_name = 'TBS_SMALL'
group by tablespace_name, rollup(file_name);
TABLESPACE_NAME FILE_NAME size(MB)
------------------------------ ------------------------------------------------ ----------
TBS_SMALL /oracle_datafile1/tbs_small01.dbf 125
TBS_SMALL /oracle_datafile1/tbs_small02.dbf 125
TBS_SMALL /oracle_datafile2/tbs_small03.dbf 125
TBS_SMALL /oracle_datafile2/tbs_small04.dbf 125
TBS_SMALL 500
■練習(xí)5。做一個(gè)名為【TBS_BIG】的Big File表空間。表空間的大小設(shè)置為300MB。
SQL> create bigfile tablespace TBS_BIG datafile '/oracle_datafile1/tbs_big01.dbf' size 100M,
'/oracle_datafile1/tbs_big02.dbf' size 100M,
'/oracle_datafile2/tbs_big03.dbf' size 100M;
上面的語(yǔ)句,會(huì)執(zhí)行失敗。錯(cuò)誤代碼ORA-32774。
發(fā)生錯(cuò)誤的原因,是因?yàn)锽IGFILE表空間里只允許指定一個(gè)數(shù)據(jù)文件。
這樣的話,對(duì)于多個(gè)數(shù)據(jù)文件的管理上的工作量就會(huì)少很多。
但是,可以包含多個(gè)數(shù)據(jù)文件的SMALLFILE表空間不是可以做擴(kuò)大的嗎?BIGFILE是什么樣的呢?
首先看一下Big File表空間中的數(shù)據(jù)文件大小的最大值:
[表空間的Block Size] × 4294967295 (= 2^32 -1) Block Size=8KB的話,大約是32TB。
BigFile表空間的數(shù)據(jù)文件大小的最大值是SmallFile表空間中一個(gè)數(shù)據(jù)文件大小的最大值的1000倍。
這是因?yàn)锽igFile表空間里只限定使用一個(gè)數(shù)據(jù)文件,而SmallFIle表空間里為了識(shí)別多個(gè)數(shù)據(jù)文件
而使用的10bit可以用來(lái)存放數(shù)據(jù)塊號(hào)了(22bit+10bit=32bit)。
不過(guò),由于SmallFile表空間中可以有1022個(gè)數(shù)據(jù)文件,因此表空間的最大大小,都是32TB左右。
那么使用BigFile表空間又有什么好處呢。
在這里,新的數(shù)據(jù)庫(kù)限制要登場(chǎng)了。
那就是,一個(gè)數(shù)據(jù)庫(kù)內(nèi)數(shù)據(jù)文件的最大個(gè)數(shù)(通常情況下為64000個(gè))。
因?yàn)榇嬖谶@個(gè)限制,所以可以考慮使用BigFile表空間來(lái)大幅增加數(shù)據(jù)庫(kù)的容量。
說(shuō)明有點(diǎn)長(zhǎng)了,練習(xí)5的答案在這里:
SQL> create bigfile tablespace TBS_BIG datafile '/oracle_datafile1/tbs_big.dbf' size 300M;
■練習(xí)6。通過(guò)數(shù)據(jù)字典視圖DBA_TABLESPACES來(lái)確認(rèn)表空間TBS_BIG是BIGFILE表空間
SQL> select tablespace_name,bigfile from dba_tablespaces
where tablespace_name in ('TBS_SMALL','TBS_BIG')
TABLESPACE_NAME BIGFILE
------------------------------ ----------------
TBS_BIG YES
TBS_SMALL NO
這里再多說(shuō)一點(diǎn)。練習(xí)1中執(zhí)行的create tablespace命令,實(shí)際上在做成表空間的時(shí)候命令
是create smallfile tablespace。認(rèn)為不指定smallfile的時(shí)候會(huì)默認(rèn)做成smallfile表空間的人一定會(huì)有,
但實(shí)際上默認(rèn)表空間的類型是依存于默認(rèn)表空間類型的。確認(rèn)默認(rèn)表空間類型的SQL如下:
SQL> -- Checking Default Tablespace Type
col property_value for a32
select PROPERTY_NAME, PROPERTY_VALUE
from DATABASE_PROPERTIES
where PROPERTY_NAME = 'DEFAULT_TBS_TYPE';
SQL> -- Setting Default Tablespace Type [BIGFILE]
alter database set default BIGFILE tablespace;
SQL> -- Setting Default Tablespace Type [SMALLFILE]
alter database set default SMALLFILE tablespace;
■練習(xí)7。用任意方法把表空間TBS_BIG的大小擴(kuò)大為500MB。
SQL> alter database datafile '/oracle_datafile1/tbs_big.dbf' resize 500M;
用的是跟練習(xí)4一樣的方法的話,當(dāng)然是不會(huì)有錯(cuò)的。
不過(guò)這也是作者盡量考慮到各個(gè)方面而想出來(lái)的問(wèn)題,大家沒有產(chǎn)生懷疑嗎?
是的,我期待的完美回答其實(shí)是下面這樣的:
SQL> alter tablespace TBS_BIG resize 500M;
希望大家可以產(chǎn)生一種“Bigfile表空間的話,管理起來(lái)會(huì)比較容易”的感覺。
smallfile表空間的話的擴(kuò)大,需要使用alter database并且指定數(shù)據(jù)文件名的方式來(lái)實(shí)施。
而bigfile表空間的話的擴(kuò)大,不用考慮數(shù)據(jù)文件名,直接使用alter tablespace這樣直觀的命令來(lái)做,
這樣不需要再通過(guò)數(shù)據(jù)字典視圖去確認(rèn)數(shù)據(jù)文件的名稱了。
通過(guò)上面的聯(lián)系,我們已經(jīng)學(xué)會(huì)生成表空間的方法了。create tablespace語(yǔ)句,除了這里介紹的,
其實(shí)還可以指定很多其他選項(xiàng)。但是大多數(shù)場(chǎng)合,這些選項(xiàng)不指定(使用默認(rèn)值)也是沒問(wèn)題的。
為了詳細(xì)理解,段和區(qū)的構(gòu)造也是需要去好好把握的。這里就不做過(guò)多的延伸了。
SMALLFILE表空間和BIGFILE表空間的區(qū)別,還是要通過(guò)手冊(cè)去好好研究。
想成為一個(gè)DBA的話,一定要去讀一讀這些手冊(cè)。
下回,我們來(lái)說(shuō)說(shuō)【表和表空間的關(guān)系】。
網(wǎng)頁(yè)名稱:【DBA之路】第1回表空間的做成和擴(kuò)張
新聞來(lái)源:http://www.js-pz168.com/article44/ihidhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、搜索引擎優(yōu)化、品牌網(wǎng)站建設(shè)、網(wǎng)站策劃、用戶體驗(yàn)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)