中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【DBA之路】第1回 表空間的做成和擴張

發布時間:2020-05-27 18:21:22 來源:網絡 閱讀:664 作者:DBA老菜鳥 欄目:數據庫

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

第一回,讓我們針對表空間來做一些練習。

對于每一個練習,我們將總結出答案和回答的例子,大家可以跟自己的答案來比較一下。

此外,在SQL中使用的目錄結構是基于Linux的。


■練習1。請創建一個名為[TBS_SMALL]的Small File表空間。這個表空間需要使用三個100MB的數據文件來構成。

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表空間】這樣的說法。其實,從Oracle Database10g Release 1

開始出現了【Big File表空間】,所以,以前傳統的表空間就被稱為【Small File表空間】了。

在這里希望可以理解,Small File表空間是可以由多個數據文件構成的。在以前32位的操作系統上,

一個文件的最大限制為2GB ,當你想做成一個超過2GB的表空間時,這個功能會非常有效。

當然,在進化成64位系統以后,對于這個文件大小2GB的限制,在操作系統層面已經不用再做過多考慮,

但是作為Oracle數據庫來說,還是要注意數據文件大小是有限制的。

Small File表空間中的一個數據文件大小的最大值:

[表空間的Block Size] × 4194303(= 2^22 -1)  Block Size=8KB的話,大約是32GB(一個數據文件內的
數據塊號要使用22bit來管理,另外,Block Size的大小也會影響計算結果)
順便說一句,像上面回答例中的DDL一樣,使用不同文件夾下的數據文件來做成一個表空間也是可以的。
但是ASM和BigFile表空間組合使用的情況下,其實并不需要考慮這個問題(以后再找機會介紹)。

■練習2。通過數據字典視圖【DBA_DATA_FILES】來確認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數據庫里準備了大量的數據字典視圖,可以用來確認數據庫內部的設定信息等。
作為DBA來講,不是僅僅執行完DDL語句就結束了,執行后的結果確認也是非常重要的。
練習2中使用的數據字典視圖【DBA_DATA_FILES】,可以用來確認全部數據文件的各種信息。
比如各個數據文件屬于哪個表空間。
根據上面的Select語句,就可以看出,TBS_SMALL表空間里的三個數據文件大小合計
(300MB = 100MB + 100MB + 100MB)。如果結果不是300MB,
那么練習1中表空間做成的時候可能存在誤操作。
關于數據字典視圖中各列所表示的意思,請參考相關的說明文檔。

■練習3。向TBS_SMALL表空間中追加新的數據文件,使其大小擴大至400MB。
SQL> alter tablespace TBS_SMALL add datafile '/oracle_datafile2/tbs_small04.dbf' size 100M;
很簡單吧?通過向SMALL FILE表空間內追加數據文件,可以實現將表空間擴大的目的。

■練習4。把TBS_SMALL表空間的大小擴大至500MB。
SQL> alter tablespace TBS_SMALL add datafile '/oracle_datafile2/tbs_small05.dbf' size 100M;
打算使用跟練習3一樣的語句的各位,先等一下。
這個語句當然是沒問題的,但是當我想把表空間擴大至50GB的話,怎么辦呢?
要重復500次這樣的操作的話,需要花費相當多的時間。
做成以后,數據文件的維護顯而易見也會成為一個×××煩。
而且,一個SMALL FILE表空間內可以包含的數據文件個數的上限是1022個,不能無限的追加下去。
所以,練習4,我們使用另外一個擴大表空間的辦法,也就是擴大數據文件的大小。
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;

當然,只把其中第4個文件的大小改為200MB也是可以實現要求的,但是這樣的組成不太整齊不是嗎。
作為一個老資格的DBA,當然是所有的數據文件大小都一直才會覺得舒服。
其實,這樣做是有理由的。舉個例子,表里的數據被均等的分布在各個數據文件,
100MB的數據文件滿了的時候,只有這個200MB的數據文件還有空間了,
這時候,數據文件的寫入就全部集中于這個文件上了。
當目錄【/oracle_datafile】和【/oracle_datafile2】在不同的磁盤上的時候,
對于特定的磁盤的寫入就會很集中,則會產生性能下降的可能。
另外,從各個磁盤上讀取的數據量也有可能會發生偏移。
所以,這次我們對存在的4個數據文件都做了同樣大小的擴大。

通過這項練習,希望大家體會到的有2點。
第一點,雖然是對表空間進行變更時,但是使用的語句不是【alter tablespace】
而是【alter database】來進行數據文件大小的變更。
第二點,數據文件的數量越多,維護起來就越難。
尤其是在使用裸設備放置數據文件的時候,是很難擴大數據文件的大小的。
所以隨著表空間大小的擴大,需要被管理的裸設備以及數據文件數都會增加。
此外,也許有人有過這樣的經驗,由于新追加的數據文件都是空的,
所以在追加數據文件后還要通過對數據做一次導出然后再做一次導入來避免問題。
(不過這個問題在ASM上已經可以得到解決)

完成擴大數據文件的操作后,可以使用下面的Select語句來進行查詢,使用rollup的話,會很方便。
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

■練習5。做一個名為【TBS_BIG】的Big File表空間。表空間的大小設置為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;
上面的語句,會執行失敗。錯誤代碼ORA-32774。
發生錯誤的原因,是因為BIGFILE表空間里只允許指定一個數據文件。
這樣的話,對于多個數據文件的管理上的工作量就會少很多。
但是,可以包含多個數據文件的SMALLFILE表空間不是可以做擴大的嗎?BIGFILE是什么樣的呢?
首先看一下Big File表空間中的數據文件大小的最大值:
[表空間的Block Size] × 4294967295 (= 2^32 -1)  Block Size=8KB的話,大約是32TB。
BigFile表空間的數據文件大小的最大值是SmallFile表空間中一個數據文件大小的最大值的1000倍。
這是因為BigFile表空間里只限定使用一個數據文件,而SmallFIle表空間里為了識別多個數據文件
而使用的10bit可以用來存放數據塊號了(22bit+10bit=32bit)。
不過,由于SmallFile表空間中可以有1022個數據文件,因此表空間的最大大小,都是32TB左右。
那么使用BigFile表空間又有什么好處呢。
在這里,新的數據庫限制要登場了。
那就是,一個數據庫內數據文件的最大個數(通常情況下為64000個)。
因為存在這個限制,所以可以考慮使用BigFile表空間來大幅增加數據庫的容量。
說明有點長了,練習5的答案在這里:
SQL> create bigfile tablespace TBS_BIG datafile '/oracle_datafile1/tbs_big.dbf' size 300M;

■練習6。通過數據字典視圖DBA_TABLESPACES來確認表空間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

這里再多說一點。練習1中執行的create tablespace命令,實際上在做成表空間的時候命令
是create smallfile tablespace。認為不指定smallfile的時候會默認做成smallfile表空間的人一定會有,
但實際上默認表空間的類型是依存于默認表空間類型的。確認默認表空間類型的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;
 
■練習7。用任意方法把表空間TBS_BIG的大小擴大為500MB。
SQL> alter database datafile '/oracle_datafile1/tbs_big.dbf' resize 500M;
用的是跟練習4一樣的方法的話,當然是不會有錯的。
不過這也是作者盡量考慮到各個方面而想出來的問題,大家沒有產生懷疑嗎?
是的,我期待的完美回答其實是下面這樣的:
SQL> alter tablespace TBS_BIG resize 500M;

希望大家可以產生一種“Bigfile表空間的話,管理起來會比較容易”的感覺。
smallfile表空間的話的擴大,需要使用alter database并且指定數據文件名的方式來實施。
而bigfile表空間的話的擴大,不用考慮數據文件名,直接使用alter tablespace這樣直觀的命令來做,
這樣不需要再通過數據字典視圖去確認數據文件的名稱了。

通過上面的聯系,我們已經學會生成表空間的方法了。create tablespace語句,除了這里介紹的,
其實還可以指定很多其他選項。但是大多數場合,這些選項不指定(使用默認值)也是沒問題的。
為了詳細理解,段和區的構造也是需要去好好把握的。這里就不做過多的延伸了。
SMALLFILE表空間和BIGFILE表空間的區別,還是要通過手冊去好好研究。
想成為一個DBA的話,一定要去讀一讀這些手冊。

下回,我們來說說【表和表空間的關系】。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

达日县| 琼结县| 富源县| 桓仁| 铜川市| 黎平县| 恩施市| 海安县| 高淳县| 海晏县| 萨迦县| 乡城县| 兴隆县| 濮阳县| 子长县| 津南区| 长乐市| 无棣县| 嵩明县| 申扎县| 酉阳| 马公市| 林西县| 闽侯县| 定南县| 英德市| 永安市| 襄垣县| 谢通门县| 柯坪县| 泾源县| 襄樊市| 肥西县| 平顶山市| 南阳市| 沽源县| 会泽县| 保康县| 华阴市| 中阳县| 万山特区|