您好,登錄后才能下訂單哦!
Oracle Study--RAW Device在Oracle下的應用
1、 什么是裸設備(RAW DEVICE)
裸設備是指未創建文件系統的磁盤分區(raw partition)或邏輯卷(raw logical volume),應用程序直接通過一
個字符設備驅動程序對它進行訪問。如何對設備上的數據讀寫決定于使用它的應用程序。由于對裸設備的操作不通過UNIX的緩沖區,數據在ORACLE的數據緩沖區(BUFFER CACHE)和磁盤之間直接傳遞,所以使用裸設備在一定程度上能夠提高I/O性能,適合I/O量大的系統。另外OPS/RAC (Oracle Parallel Server/Real Application Cluster)環境下,多個節點同時訪問同一個數據庫,所以CONTROL FILE、DATA FILE、REDO LOG都必須建在RAW DEVICE上。
2、裸設備的可用空間
不同的UNIX對裸設備的管理不完全相同,特別要注意的是某些UNIX在每個裸設備的頭部要保留一定的空間,應用程序在使用裸設備時不可以覆蓋這一部分,否則會對裸設備造成損壞。所以一個裸設備的實際可用空間是分配給裸設備的空間再減去這部分操作系統保留空間。下面是常用UNIX的OS Reserved Size列表:
UNIX OS Reserved Size ------------ - --------------- SUN Solaris 0 HP-UX 0 IBM AIX 4k Tru64 UNIX 64k Linux 0
Oracle下redo block size:
SQL> SELECT b.member, b.bytes, b.bytes+512 file_size FROM v$logfile a, v$log b WHERE a.group#=b.group# and a.member='/oradata/redo01.log '; MEMBER BYTES FILE_SIZE -------------------- -------- --------- /oradata/redo01.log 4194304 4194816 下表列出了常用OS上的ORACLE REDO_BLOCK_SIZE: OS REDO_BLOCK_SIZE ----------------- --------------- Windows 512 SUN Solaris 512 HP-UX 1024 IBM AIX 512 Compaq Tru64 UNIX 1024 Linux 512
3、dd命令
UNIX上讀寫裸設備不能使用cp, cpio, tar等命令,必須用dd,下面是幾個dd常用參數的簡單說明,更詳細的信息請參考UNIX使用手冊或用命令man dd。
dd [ operand=value ... ]
if=file 指定輸入文件,缺省值是標準輸入
of=file 指定輸出文件,缺省值是標準輸出
bs=n 設置輸入和輸出的塊大小為n字節,也可以用“k”作單位
skip=n 在拷貝之前跳過n個輸入塊,缺省值是0
seek=n 在拷貝之前從輸出文件首部跳過n塊,缺省值是0
count=n 指定拷貝的塊數,缺省拷貝到輸入文件結束
4、在raw上創建數據文件可用空間
SQL> CREATE TABLESPACE ts_test DATAFILE '/dev/rlv_data' SIZE 8180k; SIZE指定的數值必須小于或等于8180k,否則語句將會失敗: ORA-01119: error in creating database file '/dev/rlv_data' ORA-27042: not enough space on raw partition to fullfill request
這個最大值的計算方法如下:
8192k(RAW DEVICE SIZE) - 4k (OS_RESERVED_SIZE) - 8k (DB_BLOCK_SIZE) = 8180k
為什么還要減去一個DB_BLOCK_SIZE呢?這是因為ORACLE建立DATAFILE時,在命令中SIZE指定的大小之外,還要在文件頭另加一個BLOCK,叫作“Oracle OS Header Block”,里面保存有這個文件的邏輯塊大小和文件塊數等信息。這一點并不是在RAW DEVICE上建DATAFILE特有的,如果你在文件系統上建一個DATAFILE,指定SIZE 1000k的話,你用ls -l或dir命令看到的文件大小將是1008k (DB_BLOCK_SIZE=8K)。
案例分析:
查看vg信息: [oracle@aix211 ~]$lsvg datavg VOLUME GROUP: datavg VG IDENTIFIER: 00040f8a00004c000000014862af71b0 VG STATE: active PP SIZE: 64 megabyte(s) VG PERMISSION: read/write TOTAL PPs: 480 (30720 megabytes) MAX LVs: 256 FREE PPs: 372 (23808 megabytes) LVs: 19 USED PPs: 108 (6912 megabytes) OPEN LVs: 14 QUORUM: 2 (Enabled) TOTAL PVs: 1 VG DESCRIPTORS: 2 STALE PVs: 0 STALE PPs: 0 ACTIVE PVs: 1 AUTO ON: no Concurrent: Enhanced-Capable Auto-Concurrent: Disabled VG Mode: Concurrent Node ID: - Active Nodes: MAX PPs per VG: 32512 MAX PPs per PV: 1016 MAX PVs: 32 LTG size (Dynamic): 256 kilobyte(s) AUTO SYNC: no HOT SPARE: no BB POLICY: relocatable 創建lv大小為128M(2個pp) [root@aix211 /]#mklv -y 'tbs1' -t 'raw' datavg 2 tbs1 [root@aix211 /]#lsvg -l datavg datavg: LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT tbs1 raw 2 2 1 closed/syncd N/A 修改設備屬性 [root@aix211 /]#chown oracle:dba /dev/tbs1 [root@aix211 /]#chown oracle:dba /dev/rtbs1 [root@aix211 /]#chmod 660 /dev/tbs1 [root@aix211 /]#chmod 660 /dev/rtbs1 [root@aix211 /]#ls -l /dev |grep tbs1 crw-rw---- 1 oracle dba 88, 19 Sep 15 16:55 rtbs1 brw-rw---- 1 oracle dba 88, 19 Sep 15 16:55 tbs1 創建表空間tbs1 [oracle@aix211 ~]$ln -s /dev/rtbs1 /u01/app/oracle/oradata/prod/tbs1.dbf [oracle@aix212@ ~]$sqlplus '/as sysdba' SQL*Plus: Release 10.2.0.1.0 - Production on Mon Sep 15 17:44:10 2014 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production With the Partitioning, Real Application Clusters, OLAP and Data Mining options SQL> create tablespace tbs1 2 datafile '/u01/app/oracle/oradata/prod/tbs1.dbf' size 128m; create tablespace tbs1 * ERROR at line 1: ORA-01119: error in creating database file '/u01/app/oracle/oradata/prod/tbs1.dbf' ORA-27042: not enough space on raw partition to fullfill request IBM AIX RISC System/6000 Error: 6: No such device or address Additional information: 1 Additional information: 1 Additional information: -1 由于/dev/rtbs1大小為128m,不能全部用來創建表空間(最少要留有2X8k)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。