日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

在UNIX裸設(shè)備與文件系統(tǒng)間移動(dòng)Oracle

一、裸設(shè)備的相關(guān)問(wèn)題 1.1 裸設(shè)備(RAW DEVICE)是什么? 裸設(shè)備是指未創(chuàng)建文件系統(tǒng)的磁盤分區(qū)(raw partition)或邏輯卷(raw logical volume) , 應(yīng)用程序直接通過(guò)一 個(gè)字符設(shè)備驅(qū)動(dòng)程序?qū)λM(jìn)行訪問(wèn) 。如何對(duì)設(shè)備上的數(shù)據(jù)讀寫決定于使用它的應(yīng)用程序 。由于對(duì)裸設(shè)備的操作不通過(guò)UNIX的緩沖區(qū) , 數(shù)據(jù)在ORACLE的數(shù)據(jù)緩沖區(qū)(BUFFER CACHE)和磁盤之間直接傳遞 , 所以使用裸設(shè)備在一定程度上能夠提高I/O性能 , 適合I/O量大的系統(tǒng) 。另外OPS/RAC (Oracle Parallel Server/Real Application Cluster)環(huán)境下 , 多個(gè)節(jié)點(diǎn)同時(shí)訪問(wèn)同一個(gè)數(shù)據(jù)庫(kù) , 所以CONTROL FILE、DATA FILE、REDO LOG都必須建在RAW DEVICE上 。1.2 裸設(shè)備的可用空間 不同的UNIX對(duì)裸設(shè)備的管理不完全相同 , 特別要注意的是某些UNIX在每個(gè)裸設(shè)備的頭部要保留一定的空間 , 應(yīng)用程序在使用裸設(shè)備時(shí)不可以覆蓋這一部分 , 否則會(huì)對(duì)裸設(shè)備造成損壞 。所以一個(gè)裸設(shè)備的實(shí)際可用空間是分配給裸設(shè)備的空間再減去這部分操作系統(tǒng)保留空間 。下面是常用UNIX的OS Reserved Size列表: UNIXOS Reserved Size ---------------------------- SUN Solaris0 HP-UX0 IBM AIX4k Tru64 UNIX64k Linux0 1.3 dd命令 UNIX上讀寫裸設(shè)備不能使用cp, cpio, tar等命令 , 必須用dd , 下面是幾個(gè)dd常用參數(shù)的簡(jiǎn)單說(shuō)明 , 更詳細(xì)的信息請(qǐng)參考UNIX使用手冊(cè)或用命令man dd 。dd [ operand=value ... ] if=file 指定輸入文件 , 缺省值是標(biāo)準(zhǔn)輸入 of=file 指定輸出文件 , 缺省值是標(biāo)準(zhǔn)輸出 bs=n 設(shè)置輸入和輸出的塊大小為n字節(jié) , 也可以用“k”作單位 skip=n 在拷貝之前跳過(guò)n個(gè)輸入塊 , 缺省值是0 seek=n 在拷貝之前從輸出文件首部跳過(guò)n塊 , 缺省值是0 count=n 指定拷貝的塊數(shù) , 缺省拷貝到輸入文件結(jié)束 1.4 本文中相關(guān)示例的說(shuō)明 a. 所有例子中ORACLE的DB_BLOCK_SIZE都是8k b. /oradata是一文件系統(tǒng)目錄 c. /dev/rlv_data , /dev/rlv_redo和/dev/rlv_ctrl是三個(gè)RAW DEVICE , 大小均為8MB(8192k) d. 在未提到操作系統(tǒng)時(shí) , 默認(rèn)是AIX , OS_RESERVED_SIZE=4K
二、移動(dòng)數(shù)據(jù)文件(DATAFILE) 2.1 在裸設(shè)備上建立數(shù)據(jù)文件 用以下命令建立表空間: SQL> CREATE TABLESPACE ts_test DATAFILE "/dev/rlv_data" SIZE 8180k; SIZE指定的數(shù)值必須小于或等于8180k , 否則語(yǔ)句將會(huì)失?。?ORA-01119: error in creating database file "/dev/rlv_data" ORA-27042: not enough space on raw partition to fullfill request 這個(gè)最大值的計(jì)算方法如下: 8192k(RAW DEVICE SIZE) - 4k (OS_RESERVED_SIZE) - 8k (DB_BLOCK_SIZE) = 8180k 為什么還要減去一個(gè)DB_BLOCK_SIZE呢?這是因?yàn)镺RACLE建立DATAFILE時(shí) , 在命令中SIZE指定的大小之外 , 還要在文件頭另加一個(gè)BLOCK , 叫作“Oracle OS Header Block” , 里面保存有這個(gè)文件的邏輯塊大小和文件塊數(shù)等信息 。這一點(diǎn)并不是在RAW DEVICE上建DATAFILE特有的 , 如果你在文件系統(tǒng)上建一個(gè)DATAFILE , 指定SIZE 1000k的話 , 你用ls -l或dir命令看到的文件大小將是1008k (DB_BLOCK_SIZE=8K) 。2.2 在文件系統(tǒng)和裸設(shè)備之間移動(dòng)數(shù)據(jù)文件 2.2.1 從文件系統(tǒng)到裸設(shè)備 a. 在文件系統(tǒng)上建一個(gè)4M的DATAFILE SQL> CREATE TABLESPACE test DATAFILE "/oradata/test.dbf" SIZE 4M; b. 查看一下這個(gè)新建的DATAFILE的大小 (注:4202496 = 4M8K) $ ls -l /oradata/test.dbf -rw-r----- 1 oracle dba 4202496 Aug 29 15:01 /oradata/test.dbf c. 按下表公式確定dd的參數(shù) d. 在數(shù)據(jù)庫(kù)沒(méi)有OPEN的狀態(tài)下 , 用dd進(jìn)行拷貝 , 下面給出命令及輸出 AIX$ dd if=/oradata/test.dbf of=/dev/rlv_data bs=4k seek=1 1026 0 records in 1026 0 records out Tru64$ dd if=/oradata/test.dbf of=/dev/rlv_data bs=64k seek=1 64 1 records in 64 1 records out Other$ dd if=/oradata/test.dbf of=/dev/rlv_data bs=1024k 4 1 records in 4 1 records out 2.2.2 從裸設(shè)備到文件系統(tǒng) a. 確定數(shù)據(jù)文件實(shí)際大小file_size , 用于下一步計(jì)算dd的參數(shù)count 。如果count計(jì)算不對(duì) , 拷貝出的數(shù)據(jù)文件無(wú)效 , 數(shù)據(jù)庫(kù)無(wú)法打開 。SQL> SELECT bytes, blocks, bytes/blocks db_block_size, bytes bytes/blocks file_size FROM dba_data_files WHERE file_name="/dev/rlv_data"; BYTESBLOCKSDB_BLOCK_SIZEFILE_SIZE ---------- -------- ------------- --------- 419430451281924202496 b. 按下表公式確定dd的參數(shù) , min表示二者之中取較小的 c. 在數(shù)據(jù)庫(kù)沒(méi)有OPEN的狀態(tài)下 , 用dd進(jìn)行拷貝 , 下面給出命令及輸出 AIX$ dd if=/dev/rlv_data of=/oradata/test2.dbf bs=4k skip=1 count=1026 1026 0 records in 1026 0 records out Tru64$ dd if=/dev/rlv_data of=/oradata/test2.dbf bs=8k skip=8 count=513 513 0 records in 513 0 records out Other$ dd if=/dev/rlv_data of=/oradata/test2.dbf bs=8k count=513 513 0 records in 513 0 records out

推薦閱讀