第一篇:用裸設備擴數據庫表空間專題(完整版)
硬件環境:小型機 IBM P670,存儲:IBM SHARK F-20 軟件環境:操作系統 AIX5.1 數據庫oracle9i 主題思想:物理卷PV->卷組VG->邏輯卷LV(類型:raw)->添加表空間 操作過程:
一、首先 #lsvg – o //查看所有可用卷組 datavg03 datavg02 datavg01 datavg00 rootvg
二、然后對用來專為數據庫準備的卷組進行如下操作: #lsvg –l datavg03 datavg09: LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT lvdata0316 raw 64 64 1 open/syncd N/A lvdata0317 raw 64 64 1 open/syncd N/A lvdata0318 raw 64 64 1 closed/syncd N/A lvdata0319 raw 64 64 1 closed/syncd N/A lvdata0320 raw 64 64 1 closed/syncd N/A lvdata0321 raw 64 64 1 closed/syncd N/A lvdata0322 raw 64 64 1 closed/syncd N/A lvdata0323 raw 64 64 1 closed/syncd N/A lvdata0324 raw 64 64 1 closed/syncd N/A lvdata0325 raw 64 64 1 closed/syncd N/A lvdata0326 raw 64 64 1 closed/syncd N/A lvdata0327 raw 64 64 1 closed/syncd N/A lvdata0328 raw 64 64 1 closed/syncd N/A lvdata0329 raw 64 64 1 closed/syncd N/A lvdata0330 raw 64 64 1 closed/syncd N/A 由顯示可知:該卷組還有13個邏輯卷(裸設備)未被使用(如果在顯示結果中沒有closed/syncd狀態的邏輯卷,可進入第3步)但如何知道這13個邏輯卷有多大容量呢,可以機使用如下命令:
#lslv lvdata0315 LOGICAL VOLUME: lvdata0309 VOLUME GROUP: datavg09 LV IDENTIFIER: 0037de1d00004c0000000105cd3b6816.11 PERMISSION: read/write VG STATE: active/complete LV STATE: opened/syncd TYPE: raw WRITE VERIFY: off MAX LPs: 512 PP SIZE: 64 megabyte(s)COPIES: 1 SCHED POLICY: parallel LPs: 64 PPs: 64 STALE PPs: 0 BB POLICY: relocatable INTER-POLICY: minimum RELOCATABLE: yes INTRA-POLICY: middle UPPER BOUND: 32 MOUNT POINT: N/A LABEL: None MIRROR WRITE CONSISTENCY: on/ACTIVE EACH LP COPY ON A SEPARATE PV ?: yes 可看到物理分區大小為64M,由于在同一卷組當中,所以可以知道所有物理分區大小都是64M,從lsvg - l datavg09的顯示結果可看到,PPs:LPs=1:1所以,每個邏輯卷的大小是:LPs×PPSIZE=64*64M=4096M=4G,進而可知還有13個4G的邏輯卷,未被使用。
但到此還不能完全保證就可以使用這13個邏輯卷對數據庫的表空間進行擴充,因為我們還不知到這些裸設備的屬主,所以還需要如下步驟: #cd /dev # ls –l rlvdata03* //顯示以rlvdata03開頭的文件屬性 crw-rw----1 oracle dba 58, 20 Aug 22 11:33 rlvdata0318 crw-rw----1 oracle dba 58, 21 Aug 22 11:35 rlvdata0319 crw-rw----1 oracle dba 58, 22 Aug 22 11:37 rlvdata0320 crw-rw----1 oracle dba 58, 23 Aug 22 12:35 rlvdata0321 crw-rw----1 oracle dba 58, 24 Aug 22 12:37 rlvdata0322 crw-rw----1 oracle dba 58, 25 Aug 22 12:39 rlvdata0323 crw-rw----1 oracle dba 58, 26 Aug 22 12:39 rlvdata0324 crw-rw----1 oracle dba 58, 27 Aug 19 16:14 rlvdata0325 從查詢結果可知,裸設備的屬主已經是oracle了,oracle可以添加這些裸設備了,但如果裸設備的屬主不是oracle而是其他用戶,那么需要
#chown oracle:dba rlvdata03* //要根據實際情況修改,千萬小心
三、添加表空間 我們可以登錄數據庫了,使用有創建或修改表空間權限的用戶登錄數據庫(有多種方法),我們以sqlplus為例: #su - oracle $ sqlplus /nolog
SQL*Plus: Release 9.2.0.5.0t ‘raw’ datavg09 64 說明:在卷組datavg09上創建邏輯卷lvdata0331,邏輯卷的類型是raw,邏輯卷的lps是64 邏輯卷大小太大對會影響數據庫性能,所以不宜創建過大的裸設備。然后進行前面的‘三’節
但是如果當前所有的卷組都已使用完,沒有可以用來添加裸設備的卷組,那么還要,創建卷組。
五、創建卷組 在創建之前,我們首先看一下有沒有可用的物理卷 #lspv vpath53 000b273dbe31ff50 datavg03 vpath54 000b273dbe320138 datavg03 vpath55 000b273dbe320303 datavg03 vpath56 000b273dbe320795 None vpath57 000b273dbe320a46 None vpath58 000b273dbe320c29 None 可以看到vpath56、vpath57、vpath58、還沒有備卷組使用。由于當前環境的存儲提供是磁盤陣列,所以vpath 是在陣列上指定了大小的,在小型機系統認到的所謂的“物理卷”(其實真正的物理卷,應該是
hdisk)。
# mkvg-f-y'datavg04'-s'64' '-n' vpath56 vpath57 vpath58 說明:用 vpath56 vpath57 vpath58 創建卷組datavg04,并且物理分區大小是64M 卷組創建好后,重復前面的步驟即可完成。
參考:
裸設備,也叫裸分區(原始分區),是一種沒有經過格式化,不被Unix通過文件系統來讀取的特殊字符設備。本文收集裸設備和Oracle問答20例。
1.什么叫做裸設備?
裸設備,也叫裸分區(原始分區),是一種沒有經過格式化,不被Unix通過文件系統來讀取的特殊字符設備。它由應用程序負責對它進行讀寫操作。不經過文件系統的緩沖。
2.如何辨別裸設備?
在Unix的/dev目錄下,有許多文件,其中有兩個大類:字符設備文件和塊設備文件。
字符設備特殊文件進行I/O操作不經過操作系統的緩沖區,而塊設備特殊文件用來同外設進行定長的包傳輸。字符特殊文件與外設進行I/o操作時每次只傳輸一個字符。而對于塊設備特殊文件來說,它用了cache機制,在外設和內存之間一次可以傳送一整塊數據。裸設備使用字符特殊文件。在/dev 目錄下,你可以看到許多這樣的文件。
3.使用裸設備的好處
因為使用裸設備避免了再經過Unix操作系統這一層,數據直接從Disk到Oracle進行傳輸,所以使用裸設備對于讀寫頻繁的數據庫應用來說,可以極大地提高數據庫系統的性能。當然,這是以磁盤的 I/O非常大,磁盤I/O已經稱為系統瓶頸的情況下才成立。如果磁盤讀寫確實非常頻繁,以至于磁盤讀寫成為系統瓶頸的情況成立,那么采用裸設備確實可以大大提高性能,最大甚至可以提高至40%,非常明顯。
而且,由于使用的是原始分區,沒有采用文件系統的管理方式,對于Unix維護文件系統的開銷也都沒有了,比如不用再維護I-node,空閑塊等,這也能夠導致性能的提高。
4.如何決定是否應該使用裸設備?
判斷是否使用裸設備要從以下方面進行考慮:首先,數據庫系統本身需要已經被比較好的經過了優化。優化是一門很有些技術的話題,很難簡單地講述。其次,使用Unix命令來辨別是否存在磁盤讀寫瓶頸。比如Unix的vmstat, sar等命令都可以較好的進行鑒別。如果決定采用裸設備,需要磁盤上還有空閑的分區。否則,就要新添磁盤,或者對原有系統重新規劃。
5.什么系統必須使用裸設備?
如果使用了Oracle并行服務器選項,則必須采用裸設備來存放所有的數據文件,控制文件,重做日志文件。只有把這些文件放到裸設備上,才能保證所有Oracle實例都可以讀取這個數據庫的文件。這是由Unix操作系統的特性決定的。
還有一種情況是,如果你想使用異步I/O,那么在有些Unix上也必須采用裸設備。這個需要參考具體Unix的相關文檔。
6.能夠使用一個磁盤的第一個分區作為裸設備嗎?
可以,但是不推薦。在Unix的比較舊的版本是銀行,磁盤的第一個分區常常包含這個磁盤的一些信息,以及邏輯卷的一些控制信息。若這些部分被裸設備覆蓋的話,磁盤就會變得不可識別,導致系統崩潰。
較新的Unix版本不會發生這樣的情況,因為它們采用了更復雜的技術來管理磁盤,邏輯卷的一些信息。
但是,除非很確信不要使用磁盤的第一個分區來作為裸設備。
7.我可以把整個裸設備都作為Oracle的數據文件嗎?
不行。必須讓數據文件的大小稍微小于該裸設備的實際大小。至少要空出兩個oracle塊的大小來。
8.裸設備應該屬于那個用戶?
應該由root來創建裸設備,然后再分配給Oracle用戶以供使用。同時還要把它歸入Oracle用戶所在的那個組里邊(通常都是DBA)。
9.在創建數據文件時如何指定裸設備?
和普通文件沒有什么太大的區別,一樣都是在單引號里邊寫上裸設備的詳細路徑就可以了。舉一個例子:要在創建一個表空間,使用兩個裸設備,每個分別為30M的大小,Oracle塊的大小為4K,可以用下面的命令:
CREATE TABLESPACE RAW_TS
DATAFILE'/dev/raw1' size 30712k
DATAFILE '/dev/raw2' size 30712k;
10.Oracle塊的大小和裸設備有什么關系嗎?
Oracle會必須是裸設備上物理塊大小的倍數。
11.如何在裸設備上進行備份?
在裸設備上,不能使用Unix實用程序來進行備份,唯一的辦法是使用最基本的Unix命令:DD來進行備份。比如:dd if=/dev/raw1of=/dev/rmt0bs=16k。dd的具體語法可以參考unix手冊,或者聯機幫助。你也可以先用dd把裸設備上的數據文件備份到磁盤上,然后再利用Unix實用程序進一步處理。行服務器選項,12。我可以在數據庫上讓一部分數據文件使用文件系統,另一部分使用裸設備嗎?
可以。但是這樣的話,會使備份過程更加復雜。
13.我應該把聯機重做日志文件放到裸設備上嗎?
這是一個極好的選擇。聯機重做日志文件是寫操作非常頻繁的文件,放到裸設備上非常合適。如果你使用了并行服務器選項,那么聯機重做日志文件必須放到裸設備上面。
14.可以把歸檔日志文件放到裸設備上嗎?
不行。歸檔日志文件必須放到常規的Unix文件系統上面,或者直接放到磁帶上面去。
15.我可以在裸設備上邊放置多個數據文件嗎?
不行。所以你必須在設置裸設備時非常小心。太小的話,會導致空間很快用完,太大的話,空間就白白浪費了。
16.因應該把幾個裸設備放到同一個物理磁盤上嗎?
這樣做不好。因為使用裸設備就是為了提高磁盤讀寫速度。而把多個裸設備放到同一個物理磁盤上會導致讀寫競爭,這樣對于提高I/O速度是不利的。應該盡量分散裸設備到不同的物理磁盤上,最好是分散到不同的磁盤控制器上。這是最佳選擇。
17.需要把所有裸設備都定義成同樣的大小嗎?
這不是必須得,但是劃分成同樣的大小對于管理數據庫比較有利。
18.為了在Unix上使用裸設備,我需要改變Unix核心參數嗎?
不需要。但可以選擇減小緩沖區的大小,如果沒有別的應用也在同一臺Unix機器上運行。因為運用了裸設備以后,不再使用Unix的系統緩沖區。
19.為了提高讀寫速度,在操作系統級別上,還有什么辦法可以采取嗎?
使用RAID(廉價冗余磁盤陣列)也是非常有效的辦法,尤其實那種讀寫非常頻繁的系統。
20.在考慮了以上所有方面后,還能有什么辦法可以提高性能的嗎?
這就需要對Oracle 進行優化,并且購買更多的磁盤和磁盤控制器,來分散I/O
第二篇:oracle-sql語句-創建表空間、數據庫
1、查看表空間的名稱及大小
select t.tablespace_name, round(sum(bytes/(1024*1024)),0)ts_size from dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name;
2、查看表空間物理文件的名稱及大小
select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0)total_space from dba_data_files order by tablespace_name;
3、查看回滾段名稱及大小
select segment_name, tablespace_name, r.status,(initial_extent/1024)InitialExtent,(next_extent/1024)NextExtent, max_extents, v.curext CurExtent From dba_rollback_segs r, v$rollstat v Where r.segment_id = v.usn(+)order by segment_name;
4、查看控制文件
select name from v$controlfile;獲取創建表空間的sql select
dbms_lob.substr(dbms_metadata.get_ddl('TABLESPACE',a.tablespace_name))from dba_tablespaces a;
SQL> select sid,serial# from v$session where username='TEST';alter system kill session '150,9019';查看被鎖的表 select object_name,machine,s.sid,s.serial#,s.event from gv$locked_object l,dba_objects o,gv$session s where l.object_id=o.object_id and l.session_id=s.sid;alter system kill session ‘sid,serial#’;
5、查看日志文件
select member from v$logfile;
6、查看表空間的使用情況
select sum(bytes)/(1024*1024)as free_space,tablespace_name from dba_free_space group by tablespace_name;
SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,(B.BYTES*100)/A.BYTES “% USED”,(C.BYTES*100)/A.BYTES “% FREE” FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;
Select b.tablespace_name as表空間名,b.bytes as字節數,(b.bytes-sum(nvl(a.bytes,0)))as已使用,sum(nvl(a.bytes,0))as剩余空間,sum(nvl(a.bytes,0))/(b.bytes)*100 as 剩余百分比 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;
7、查看數據庫庫對象
select owner, object_type, status, count(*)count# from all_objects group by owner, object_type, status;
8、查看數據庫的版本
Select version FROM Product_component_version Where SUBSTR(PRODUCT,1,6)='Oracle';
9.查看某個表空間內所占空間大于某個值的段(表或索引):
Select segment_name,bytes FROM dba_segments Where bytes>10000000 AND tablespace_name='tablespace_name';10.查看所有表空間的碎片程度(值在30以下表示碎片很多)
select tablespace_name,sum(bytes),sum(free),sum(free)*100/sum(bytes)from(select
b.file_id file_ID,b.tablespace_name tablespace_name,b.bytes Bytes,(b.bytes-sum(nvl(a.bytes,0)))used,sum(nvl(a.bytes,0))free,sum(nvl(a.bytes,0))/(b.bytes)*100
Percent
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)group by tablespace_name order by sum(free)*100/sum(bytes);11.查看自上次數據庫啟動以來所有數據文件的讀寫次數
select
substr(DF.NAME,1,5)Drive,DF.NAME file_name,(fs.phyblkrd+fs.phyblkwrt)
from v$filestat fs,v$datafile df
where df.file#=fs.file#;
創建臨時表空間: //創建臨時表空間
create temporary tablespace mytest tempfile 'E:/Program/oracle/product/10.1.0/oradata/orcl/mytest.dbf' size 32m autoextend on next 32m maxsize 1024m extent management local;
//創建數據表空間
create tablespace mytest_data logging datafile 'E:/Program/oracle/product/10.1.0/oradata/orcl/mytest_data.dbf' size 32m autoextend on next 32m maxsize 1024m extent management local;//創建用戶并指定表空間
create user testaccount identified by testpwd default tablespace mytest_data temporary tablespace mytest;//給用戶授予權限
grant connect,resource to testaccount;(db2:指定所有權限)12,創建一個用戶:
CREATE USER username IDENTIFIED BY password OR IDENTIFIED EXETERNALLYOR IDENTIFIED GLOBALLY AS ‘CN=user’[DEFAULT TABLESPACE tablespace][TEMPORARY TABLESPACE temptablespace][QUOTA [integer K[M] ] [UNLIMITED] ] ON tablespace[,QUOTA [integer K[M] ] [UNLIMITED] ] ON tablespace[PROFILES profile_name][PASSWORD EXPIRE][ACCOUNT LOCK or ACCOUNT UNLOCK];
//查看數據庫中的所有用戶: select * from all_users;//or select * from dba_users 13查看oracle最大連接數: Select session_max,session_current,sessions_highwater,users_max from v$license;Select username,count(username)from v$session group by username;加密存儲過程 WRAP
INAME=D:ORACLESOURCEDATE.SQL ONAME=D:ORACLESOURCEDATA.PLD
第三篇:1如何判斷數據庫表空間使用情況
如何判斷數據庫表空間使用情況
經常會有一些同事反映數據庫表空間不足,使用率達到90%以上,我遠程后發現,其實表空間還有很大的可擴展空間,之所有查出使用率95%以上,是與數據文件的擴展屬性與查詢語句有關,本文檔介紹如何查看表空間最大可擴展空間。
1,數據文件與表空間介紹
表空間是一個邏輯概念,數據文件是物理概念,數據文件是實實在在存在于磁盤上的文件。一個表空間可以1022個數據文件,公司項目中的一個數據文件如果開啟了自動擴展屬性,那最大可以擴展到32G。
2,查看數據文件信息
公司的絕大部分RAC環境是使用ASM方式管理數據文件的,可以通過數據文件名稱直觀的辨別數據文件是的存儲方式,一般ASM磁盤名都是以加號“+”開頭,例如“+DATA”、“+FRA”之類。如果是單機環境,那數據文件會存放在本地文件系統上,例如D盤或E盤的某個目錄下,使用select * from dba_data_files;命令查看當前數據庫的數據文件信息,如下圖:
建議按tablespace_name排序,圖中DLMIS表空間有12個數據文件,而且12個數據文件都開啟的自動擴展屬性(AUTOEXTENSIBLE=YES),都存儲在+DATA磁盤組上,最大可擴展到12*32G=384G。目前DLMIS表空間有4個文件擴展到了32G(圖中紅框標示)。另外8個數據文件還有很大的可擴展空間,目測估計還有約130G左右的可擴展空間,所以DLMIS表空間當前是足夠的。其他表空間也是這樣查看。
3,增加數據文件
如果某個表空間的所有數據文件都快擴展到了32G,那就需要手動增加數據文件,以DLMIS表空間為例,向DLMIS表空間增加一個數據文件: alter tablespace dlmis add datafile '+DATA' size 2000m autoextend on;命令意思是向dlmis表空間增加一個數據文件,存儲在+DATA的ASM磁盤組上(ASM有自動管理的功能,它會根據表空間名與數據庫名自動為數據文件生成一個唯一的名字,不需要手動寫全),初始大小為2000m,開啟自動擴展功能。如下圖:
該圖是另一個項目中截取的,最后兩個數據文件是新加了,同一條命令執行了兩次,只寫'+DATA',ASM為兩個數據文件自動唯一命名了。
4,存儲的空間
任何服務器磁盤或共享存儲陣列都有最大空間限制,不可能永無止境的擴展,單機環境服務器本地磁盤大小很空間查看,RAC環境可能通過select name,total_mb,free_mb from v$asm_diskgroup;命令查看數據庫使用的ASM磁盤組總大小與空閑大小
圖中兩個磁盤組都還在約500G的可用空間,足夠擴容。
第四篇:Linux裸設備總結
這幾天看了一下linux下的裸設備管理,做了一些筆記,不敢獨享,共享如下:
(筆記的內容不一定正確,有錯誤請指出)
1、什么裸設備?字符設備?塊設備?
裸設備:也叫裸分區(原始分區),是一種沒有經過格式化,不被Unix/Linux通過文件系統來讀取的特殊字符設備。裸設備可以綁定一個分區,也可以綁定一個磁盤。
字符設備:對字符設備的讀寫不需要通過OS的buffer。它不可被文件系統mount。
塊設備:對塊設備的讀寫需要通過OS的buffer,它可以被mount到文件系統中。
2、一個系統可以有多少個裸設備?
這個與linux的版本相關,在舊版本中,最多只可以有256個裸設備,Linux 4下做多可以綁定8192個裸設備。
但是在linux下,最多只能有255個分區,所以,如果用裸設備綁定分區,最多只能綁定255個裸設備。
如果是用lvm,則沒有這個限制。
3、Linux下單個磁盤最多可以有多少個分區?
15個。3個主分區 + 1個擴展分區 + 11個邏輯分區。
建議的分區方法是:先分3個主分區,第四個分區為擴展分區,然后在擴展分區中再分成11個邏輯分區。
注意,裸設備不要綁定在擴展分區上。
4、linux下是否需要綁定裸設備?unix呢?
linux下如果需要使用裸設備,則需要手工進行綁定。
unix下則不用。
因為Unix中每一個塊設備都會有一個對應的字符設備用于非緩存(unbuffered)I/O,這就是他對應的裸設備了。
而Linux中rawio的則實現了一套非綁定(unbound)的裸設備/dev/rawN或者/dev/raw/rawN和一個控制設備/dev /rawct用來把他們綁定到塊設備上。所以當需要使用一個裸設備的時候,就需要把他和一個真實存在的塊設備對應起來,這一個步驟實際上就是完成了 Unix里的自動對應一個非緩存字符設備。
5、linux如何綁定裸設備?
兩種方式:
1)命令綁定
raw /dev/raw/raw[n] /dev/xxx
其中n的范圍是0-8191。raw目錄不存在可以創建。
執行這個命令,就會在/dev/raw下生成一個對應的raw[n]文件
用命令方式綁定裸設備在系統重啟后會失效。
2)修改文件
修改/etc/sysconfig/rawdevices文件如下,以開機時自動加載裸設備,如:
/dev/raw/raw1 /dev/sdb1
這種方式是通過啟動服務的方式來綁定裸設備。
也可以把這個命令寫在/etc/rc.local上,使每次啟動都執行這些命令。
6、如何把裸設備作為oracle數據文件?有什么需要注意的?
1)綁定裸設備
參考上文
2)改變裸設備屬主
兩種方法:
.把命令卸載/etc/rc.local上
chown oracle:oinstall /dev/raw/raw1
.修改/etc/udev/permissions.d/50-udev.permissions文件
將/etc/udev/permissions.d/50-udev.permissions的113行
從
raw/*:root:disk:0660 修改為
raw/*:oracle:oinstall:0660
這個的意思是修改裸設備的默認屬主為oracle:oinstall,默認的mode是0660。
如果是用lvm,也需要把邏輯卷綁定到裸設備上,過程和綁定到普通分區類似。
7、使用裸設備作為oracle數據文件有什么需要注意的?
使用裸設備作為oracle的數據文件必須注意以下幾點:
1)一個裸設備只能放置一個數據文件
2)數據文件的大小不能超過裸設備的大小
如果是日志文件,則裸設備最大可用大小=裸設備對應分區大小2 * db_block_size(保留兩個block)
為了簡單起見,對所有的文件設置稱比裸設備小1M即可。
3)數據文件最好不要設置稱自動擴展,如果設置稱自動擴展,一定要把maxsize設置設置為比裸設備小
8、是否可以直接用邏輯卷作為oracle數據文件?
linux下oracle不能直接把邏輯卷作為裸設備,也要進行綁定。unix下就不需要。
9、如何知道當前綁定了什么裸設備?
rqw-qa命令列出當前綁定的所有裸設備。
10、如何知道某個裸設備的大小
比較笨的辦法是,找出看裸設備對應的是那個實際的塊設備,然后用fdisk-l /dev/[h,s]dXN看那個塊設備的大小就好了。比較簡單的辦法是用blockdev命令來計算,如:
#blockdev--getsize /dev/raw/raw1 11718750
11718750表示有多少OS BLIOCK。
一般一個OS BLOCK大小是512字節,所以11718750*512/1024/1024/1024 = 5722(m)就是裸設備的大小。
11、數據庫中可以同時以文件和裸設備作為數據文件嗎?
可以。甚至在同一個表空間中,也可以部分數據文件用文件系統,部分文件用裸設備。
但是不建議這樣做,因為會增加管理的復雜度。
12、可以把至于裸設備的數據文件設成自動擴展嗎?
可以,但同時要設置maxsize,且maxsize不能超過:裸設備大小-2*db_block_size
13、如何修改裸設備的默認權限
兩種方法:
1)要修改/etc/rc.d/rc.local文件,加入如下: chown root:oinstall /dev/raw/raw1 chown root:oinstall /dev/raw/raw2 chown root:oinstall /dev/raw/raw3...chmod 660 /dev/raw/raw1 chmod 660 /dev/raw/raw2 chmod 660 /dev/raw/raw3...2)實際上還有更簡單的方法就是,修改/etc/udev/permissions.d/50-udev.permissions文件: raw/*:root:disk:0660 為
raw/*:root:oinstall:0660
這樣就可以了!
14、如何取消裸設備的綁定
用raw把major and minor設成0就可以取消裸設備的綁定。如:
raw /dev/raw/raw1 0 0
這個命令取消綁定裸設備的綁定,/dev/raw/raw1會被刪除
15、裸設備可以綁定的對象可以什么?
可以綁定整個沒有分區的硬盤、可以綁定硬盤的某個分區、可以綁定邏輯卷等。
第五篇:oracle 數據文件、表空間、日志文件、控制文件數據庫管理
實驗四 oracle 數據庫管理
一、試驗目的
掌握對數據文件、表空間、日志文件、控制文件的常用命令,作為DBA的必要準備。
二、實驗內容
2.1 數據文件的管理
(1)在安裝完畢之后,在INITsid.ORA參數文件有一個DB_FILES 參數,用于設置當前實例的數據外文件的個數。如: db_files = 80 如果在INITsid.ORA文件沒有該參數,則可以用下面查詢語句從視圖中查到。如: SQL> col name for a20 SQL> col value for a50 SQL> set lin 100 SQL> select name,value from v$parameter where name = 'db_files';NAME VALUE---------------------------------------db_files 1024(2)行命令建立表空間:
例1 CREATE TABLESPACE user_stu DATAFILE 'h:/oracle/oradata/orcl/user_stu.dat' SIZE 20M DEFAULT STORAGE(INITIAL 10K NEXT 50K MINEXTENTS 1 MAXEXTENTS 99 PCTINCREASE 10)ONLINE;例2:建立一個新的表空間,具有兩個數據文件: CREATE TABLESPACE CRM_TAB
DATAFILE 'h:/oracle/oradata/orcl/crm01.dbf' size 10 MB,'h:/oracle/oradata/orcl/crm02.dbf' size 10 MB;(3)對一個已存在的表空間追加新數據文件: 例1 ALTER TABLESPACE user_stu
Add datafile 'H:/oracle/oradata/orcl/user_stu01.dbf' size 30M;例2 為表空間增加數據文件 ALTER TABLESPACE users ADD DATAFILE 'userora1.dbf ' SIZE 10M;(4)數據文件更名
ALTER TABLESPACE users RENAME DATAFILE? 'filename1', 'filename2' TO 'filename3', 'filename4';(5)變更數據文件大小 在創建表空間時,可以將表空間說明為自動擴展或固定大小。因而管理員的一項工作就是查看系統所有的表空間對應的數據文件情況??词欠駷樽詣訑U展。如: SQL> col tablespace_name for a12 SQL> col file_name for a48 SQL> select tablespace_name,file_name,AUTOEXTENSIBLE ,bytes from dba_data_files
(6)數據文件的自動擴展與調整。重新調整數據文件大小的命令如下: ALTER DATABASE DATAFILE [datafile_name] RESIZE [new_size];
當我們發現數據文件過大而不可能用完時,可以用上面命令將數據文件調小。對于設置數據文件的自動擴展問題,可用下面命令來達到: ALTER DATABASE DATAFILE [ file_spec ] AUTOEXTEND ON NEXT [increment_size] MAXSIZE [max_size,UNLIMITED]; 如:
ALTER DATABASE DATAFILE 'H:ORACLEORADATAORCLUSER_STU01.DBF' AUTOEXTEND ON NEXT 10m MAXSIZE 60M;(7)行命令修改表空間:
ALTER TABLESPACE USER_STU ONLINE;(8)ALTER TABLESPACE accounting OFFLINE NORMAL;(9)行命令刪除表空間:
DROP TABLESPACE 表空間名 INCLUDING CONTENTS CASCADE CONSTRAINTS(10)、與數據文件有關的視圖
select file_name from dba_data_files;select * from v$datafile;DBA_DATA_FILES DBA_EXTENTS DBA_FREE_SPACE V$DATAFILE V$DATAFILE_HEADER(11)、為了保證表空間的可用,除了掌握表空間的創建外,還應該查看dba_free_space中表空間的信息,以確保系統正常運行。一般管理員應該關心的內容有:表空間共有多少個;總共有多少自由空間;最大的自由空間是什么;下面例子是一個經常使用的腳本,可以查出數據文件和表空間的可用情況。clear buffer clear columns clear breaks column a1 heading 'Tablespace' format a15 column a2 heading 'data File' format a45 column a3 heading 'Total|Space' format 999,999.99 column a4 heading 'Free|Space' format 999,999.99 column a5 heading 'Free|perc' format 999,999.99 break on a1 on report compute sum of a3 on a1 compute sum of a4 on a1 compute sum of a3 on report compute sum of a4 on report set linesize 120 select a.tablespace_name a1, a.file_name a2, a.avail a3, nvl(b.free,0)a4, nvl(round(((free/avail)*100),2),0)a5 from(select tablespace_name, substr(file_name,1,45)file_name, file_id, round(sum(bytes/(1024*1024)),3)avail from sys.dba_data_files group by tablespace_name, substr(file_name,1,45), file_id)a,(select tablespace_name, file_id, round(sum(bytes/(1024*1024)),3)free from sys.dba_free_space group by tablespace_name, file_id)b where a.file_id = b.file_id(+)order by 1, 2;(12)查詢是否存在表的擴展超出表空間可用大小 一般在系統使用較長時間后,表空間的連續塊被多次的修改與刪除等操作后出現了許多的不連續的塊(叫碎片)。這樣就有可能出現表的擴展所需要的連續塊不能滿足的情況。為了避免這樣的情況發生而導致擴展失敗,管理員要經常查詢系統的表空間情況。下面就是這樣的一個腳本:
Col segment_name for a20 Select segment_name, segment_type, owner, a.tablespace_name tablespace, Initial_extent, next_extent, pct_increase,b.bytes max_bytes From dba_segments a,(select tablespace_name, max(bytes)bytes from dba_free_space group by tablespace_name)b where a.tablespace_name=b.tablespace_name and next_extent > b.bytes;(13)查詢表空間自由、最大及碎片
其實,平常管理最關系就是表空間的總量、最大字節、使用多少、碎片多少等。下面腳本可以查詢出所有表空間的自由空間、總空間數、已用空間、自由百分比及最大塊的字節數。set pau off
col free heading 'Free(Mb)' format 99999.9 col total heading 'Total(Mb)' format 999999.9 col used heading 'Used(Mb)' format 99999.9 col pct_free heading 'Pct|Free' format 99999.9 col largest heading 'Largest(Mb)' format 99999.9 compute sum of total on report compute sum of free on report compute sum of used on report break on report select substr(a.tablespace_name,1,13)tablespace, round(sum(a.total1)/1024/1024, 1)Total, round(sum(a.total1)/1024/1024, 1)-round(sum(a.sum1)/1024/1024, 1)used, round(sum(a.sum1)/1024/1024, 1)free, round(sum(a.sum1)/1024/1024, 1)*100/round(sum(a.total1)/1024/1024, 1)pct_free, round(sum(a.maxb)/1024/1024, 1)largest, max(a.cnt)fragment from(select tablespace_name, 0 total1, sum(bytes)sum1, max(bytes)MAXB, count(bytes)cnt from dba_free_space group by tablespace_name union select tablespace_name, sum(bytes)total1, 0, 0, 0 from dba_data_files group by tablespace_name)a group by a.tablespace_name 2.2 日志文件的管理
(0)日志查詢
select group#,bytes from v$log;? select group#,bytes from v$logfile;
(1)實現強行的日志切換 Alter system switch logfile;(2)檢測點(checkpoint)
Oracle為了在出現故障后能退回去重演原來的信息,就需要一個叫開始點。在這個開始點時刻,數據和事務是已知的。這樣的開始點就叫檢測點。在Oracle里,只要檢查點一到(出現)。Oracle就強行將當前的SGA中的redo區的改動過的塊寫入重做日志文件中。這個步驟完成后,在重做日志文件中放入一個特殊的檢測點標志記錄。如果在下一個檢測點完成前出現失敗,恢復操作進程就會在日志文件和數據文件前一個檢測點同步(改回去)。檢測點檢查完成后,對數據塊的任何改動都記錄在其檢測點標志后寫入重做日志項中。因此,恢復也就只能從最近的檢測點標志記錄開始。
Oracle在INITsid.ORA文件中給出LOG_CHECKPOINT_INTERVAL參數可以設置檢測點的數目。比如 日志文件大小為1000塊,而設置檢查點間隔LOG_CHECKPOINT_INTERVAL為250,則文件寫達到 1/
4、2/
4、3/4及4/4時產生檢測點(250塊、500塊、750塊和1000塊處)??捎孟旅婷顏聿槿罩疚募笮。?SQL> select group#,bytes from v$log;show parameter log_checkpoint_interval(3)添加日志組
建立一個新組4,組內有兩個成員 ALTER DATABASE ADD LOGFILE GROUP 4('H:/oracle/oradata/orcl/redo0401.log', 'H:/oracle/oradata/orcl/redo0402.log')size 10m;===當添加一個日志組時,可以不給出組號,有系統自動分配一個組號=== ALTER DATABASE ADD LOGFILE('H:/oracle/oradata/orcl/redo0501.log', 'H:/oracle/oradata/orcl/redo0502.log')size 10m;此時添加的組號為5
(4)為日志組增加成員 ALTER DATABASE ADD LOGFILE MEMBER 'log22.log' TO GROUP 2;===添加成員時,可以不給定成員的大小,因為oracle要求組內的所有成員的大小一律相等。
(5)如果將一個日志成員從一個硬盤移到另一個硬盤,就需要重新命名日志成員名字。需要進行下面步驟:
1. 關閉數據庫,并進行完全備份;
2. 使用操作系統命令拷貝原來的日志文件到新的地方; 3. 用startup mount 啟動數據庫; 4. 用ALTER DATABASE RENAME FILE '
ALTER DATABASE RENAME FILE 'filename1', 'filename2' TO 'filename3', 'filename4';
(6)日志刪除
a.刪除日志組成員:
在下面情況下可能需要刪除重做日志文件,如日志文件個數太多(超出需要);日志文件的大小不一致等。這樣的情況可以刪除日志組成員。b.當日志組損壞時,就刪除日志組,但必須滿足:
a)刪除一個日志組后,系統中至少還有兩個其它的日志組; b)被刪除的日志組必須是不需要存檔; c)不是正在使用的日志組。刪除日志文件的語法:
ALTER DATABASE database_name DROP LOGFILE GROUP group_number | file_name |(file_name,file_name(,...))刪除日志成員的語法:
ALTER DATABASE database_name DROP LOGFILE MEMBER file_name;c.聯機重做日志的緊急替換:
當一個重做日志組偶而被損壞使數據庫不能繼續使用時,不能直接刪除它們,而是要用一個干凈的文件或一組成員去替代這個損壞的日志組。聯機重做日志的緊急替換命令語法如下: ALTER DATABASE database_name CLEAR[UNARCHIVED] LOGFILE group_identifier [UNRECOVERABLE DATAFILE] 如果該文件正在等待存檔(歸檔模式),就需要UNARCHIVED。
如果需要脫機恢復一個數據文件,就用UNRECOVERABLE DATAFILE。d.了解重做日志的當前狀態: V$LOGFILE V$LOG V$THREAD V$LOG_HISTORY e.例子:
刪除一個組3:
ALTER DATABASE DROP LOGFILE GROUP 3;刪除一個成員:
ALTER DATABASE DROP? LOGFILE MEMBER '/orant/oradata'mydb02'redo02.log';4.了解重做日志的當前狀態的視圖主要有: V$LOGFILE V$LOG V$THREAD V$LOG_HISTORY 5.例子:
察看是否歸檔
ARCHIVE? LOG? LIST 日志歸檔
alter database noarchivelog;
3、控制文件的管理(1)關于控制文件
控制文件存放有數據庫的結構信息,包括數據文件、日志文件??刂莆募且粋€二進制文件,它是在數據庫建立時自動被建立。控制文件可以在當你改變文件名或移動文件時而被更新。在任何時候,你都不能編輯控制文件。控制文件的內容包括:
? 數據庫名字(控制文件只能屬于一個數據庫)。? 數據庫建立時的郵戳。
? 數據文件-名字,位置及聯機/脫機。? 重做日志文件-名字及位置。? 表空間名字。? 當前日志序列號。? 最近檢查點信息。
? 恢復管理器信息(RMAN)。(2)控制文件信息
在spfile.ora的配置文件中 有:
control_files =(“/home/oracle/app/oracle/oradata/s450/control01.ctl”, “/home/oracle/app/oracle/oradata/s450/control02.ctl”, “/home/oracle/app/oracle/oradata/s450/control03.ctl”)(3)查詢控制文件的信息
show parameters;select * from v$controlfile;desc V$CONTROLFILE_RECORD_SECTION v$datafile db_data_files v$logfile v$log v$controlfile show parameter control_files
其中,RECORD_SIZE NUMBER 記錄字節大小 RECORDS_TOTAL NUMBER 段的記錄數
RECORDS_USED NUMBER 段中已使用的記錄數 FIRST_INDEX NUMBER 第一個記錄索引位置 LAST_INDEX NUMBER 最后一個記錄索引位置 LAST_RECID NUMBER 最后一個記錄ID號
select * from V$CONTROLFILE_RECORD_SECTION;7.6.4 控制文件信息的更改
需要在spfile.ora中做出相應的更改。建立控制文件的步驟 1.建立控制文件準備。
必須有數據文件(查DBA_DATA_FILES數據字典)、日志文件(查V$LOGFILE數據字典)的詳細列表。下面是創建控制文件的命令:
CREATE CONTROLFILE SET DATABASE “ORACLE” NORESETLOGS NOARACHIVELOG MAXLOGFILES 32 MAXLOGMEMBERS 2 MAXDATAFILES 32 MAXINSTANCES 1 MAXLOGHISTORY 1630 LOGFILE GROUP 1 'C:ORACLEDATABASELOG1ORCL.LOG' SIZE 200K, GROUP 2 'C:ORACLEDATABASELOG2ORCL.LOG' SIZE 200K, DATAFILE 'C:ORACLEDATABASESYS1ORCL.ORA', 'C:ORACLEDATABASEUSER1ORCL.ORA', 'C:ORACLEDATABASERBS1ORCL.ORA', 'C:ORACLEDATABASETMP1ORCL.ORA', 'C:ORACLEDATABASEAPPDATA1.ORA', 'C:ORACLEDATABASEAPPINDX1.ORA',;在例子中,參數選件與 CREATE DATABASE類似。NORESETLOGS 指定聯機的日志文件不要重新設置。2. 關閉數據庫。
3. 用NOMOUNT選件啟動數據庫,記住,安裝數據庫,Oracle需要打開控制文件。4. 用類似上面建立新的控制文件。并在INITsid.ORA參數文件中指定。5. 使用ALTER DATABASE OPEN命令打開數據庫。6. 關閉數據庫并備份數據庫。
提示:如果你的數據庫正常,則可以用ALTER DATABASE BACKUP CONTROLFILE TO TRACE 命令來產生一個CREATE CONTROLFILE 的命令。該命令產生后被寫到跟蹤文件中。請參考INITsid.OAR的USER_DUMP_DEST所指的目錄找到跟蹤文件,它就在跟蹤文件中。
建立好控制文件后,就要確定如何來補救被丟失的數據文件,可以從V$DATAFILE視圖來查到丟失的數據文件,這些數據文件的名字為MISSINGnnnn。如果你建立的控制文件帶有RESETLOGS選件,則丟失的數據文件就不能加回數據庫中。如果你建立的控制文件帶有NORESETLOGS選件,則丟失的數據文件可以由數據庫的介質恢復被加回數據庫中。當數據庫啟動后可以 用下面命令進行備份:
ALTER DATABASE BACKUP CONTROL FILE TO '
可以從視圖V$CONTROLFILE中查到控制文件的信息,status字段表示控制文件的狀態,一般總是為空。如:
SQL> select * from v$controlfile;另外V$CONTROLFILE_RECORD_SECTION 視圖存儲控制文件所記錄的信息。它的結構如下:
SQL> desc V$CONTROLFILE_RECORD_SECTION