国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

巧用Rman 來管理裸設備上的數據庫

2024-07-21 02:37:53
字體:
來源:轉載
供稿:網友

  我們知道,Unix 上面的Oracle 數據庫大多都存放在裸設備上面,以利于磁盤IO 性能的提升。但是裸設備的治理比較麻煩,尤其是把數據文件從文件系統轉換到裸設備,或者從裸設備把數據文件轉換到文件系統,這些給dba 帶來很頭疼的事情。
  
  本文介紹一個辦法,可以用Rman 來輕松搞定裸設備/文件系統之間數據文件的遷移。
  
  在傳統方法里面,我們必須對于每個Unix 不同的Block 大小,OS 卷治理的overhead 的值作計算,才能非常小心的用dd 來做這些拷貝和移動,但是現在在Rman 的幫助下,我們可以完全忽略這些不同的地方,在所有Unix 平臺/NT 平臺上直接在Oracle 內部實現這種數據
  
  一. 把數據文件從文件系統轉移到裸設備
  比如我們現在有一個數據庫,其rbs.dbf 數據文件的IO 量非常大,造成比較大的IO 等待,我們希望把它轉移到裸設備上,以提升性能。可以看到,我們這個rbs.dbf 的大小為60M,所以我們需要創建一個61M 的裸設備(1M 空間用來讓操作系統使用,治理卷組信息,其實不用1M 也可以,我們方便起見,給1M)。
  s80_svc:oraprd 22> ls -l rbs.dbf
  -rw-r----- 1 oraPRd dba 62916608 Jan 20 21:48 rbs.dbf
  我們先要知道操作系統的一個PP(Physical Partition)的大小,我們這個例子里面,他
  VOLUME GROUP: oravg VG IDENTIFIER: 000c738d015de954
  VG STATE: active PP SIZE: 64 megabyte(s)
  VG PERMISSION: read/write TOTAL PPs: 543 (34752 megabytes)
  MAX LVs: 256 FREE PPs: 114 (7296 megabytes)
  LVs: 8 USED PPs: 429 (27456 megabytes)
  OPEN LVs: 8 QUORUM: 2
  TOTAL PVs: 1 VG DESCRipTORS: 2
  STALE PVs: 0 STALE PPs: 0
  ACTIVE PVs: 1 AUTO ON: no
  MAX PPs per PV: 1016 MAX PVs: 32
  我們轉換到root 用戶,創建這樣一個邏輯卷,大小是66M, 并且把這個邏輯卷給oracle
  # mklv -y lvorarbs oravg 1
  # chown oraprd:dba /dev/rlvorarbs
  由于這個是回滾段所在的表空間,需要把表空間offline,先要offline 回滾段:
  
  SQL> select segment_name,status from dba_rollback_segs;
  SEGMENT_NAME STATUS
  ------------------------------ ----------------
  SYSTEM ONLINE
  RBS01 ONLINE
  RBS02 ONLINE
  RBS03 ONLINE
  SQL> alter rollback segment rbs01 offline;
  Rollback segment altered.
  SQL> alter rollback segment rbs02 offline;
  Rollback segment altered.
  SQL> alter rollback segment rbs03 offline;
  Rollback segment altered.
  然后我們登陸進入rman,連接到目標數據庫:
  s80_svc:oraprd 25> rman target / nocatalog
  Recovery Manager: Release 8.1.7.2.0 - ProdUCtion
  RMAN-06005: connected to target database: TEST (DBID=1749460842)
  RMAN-06009: using target database controlfile instead of recovery catalog
  我們開始把數據文件從文件系統拷貝到磁盤裸設備上面:
  RMAN> run{
  2> allocate channel c3 type disk;
  3> sql 'alter tablespace rbs offline';
  4> copy datafile '/backup/test/datafile/rbs.dbf' to '/dev/rlvorarbs';
  5> }
  執行這個命令可以看到,命令成功執行:
  RMAN-03022: compiling command: allocate
  RMAN-03023: executing command: allocate
  RMAN-08030: allocated channel: c3
  RMAN-08500: channel c3: sid=9 devtype=DISK
  RMAN-03022: compiling command: sql
  RMAN-06162: sql statement: alter tablespace rbs offline
  RMAN-03023: executing command: sql
  RMAN-03022: compiling command: copy
  
  RMAN-03023: executing command: copy
  RMAN-08000: channel c3: copied datafile 4
  RMAN-08501: output filename=/dev/rlvorarbs recid=8 stamp=451692882
  RMAN-08031: released channel: c3
  然后我們再更新控制文件里面回滾段表空間數據文件的定義:
  SQL> alter tablespace rbs rename datafile
  2 '/backup/test/datafile/rbs.dbf' to '/dev/rlvorarbs';
  Tablespace altered.
  SQL> alter tablespace rbs online;
  Tablespace altered.
  我們檢查數據字典,可以看到正確的新的數據文件:
  SQL> l
  1* select tablespace_name,file_name from dba_data_files where
  tablespace_name='RBS'
  SQL> /
  TABLESPACE_NAME FILE_NAME
  ------------------------------ --------------------
  RBS /dev/rlvorarbs
  把幾個回滾段分別重新online 就可以了。

  
  二. 把數據文件從裸設備轉移到文件系統
  下面我們再演示一下如何把數據文件從裸設備轉移到文件系統上面:
  我們先建立一個裸設備,再歸屬于Oracle 用戶,用這個裸設備來創建標空間:
  # mklv -y lvrawtest oravg 1
  lvrawtest
  # chown oraprd:dba /dev/rlvrawtest
  然后我們再Oracle 里面創建表空間,創建表,插入示例數據:
  SQL> create tablespace rawtofs datafile
  2 '/dev/rlvrawtest' size 60m;
  Tablespace created.
  注重這里我們創建的表空間大小不能大于65M,因為裸分區大小只有66M,有1M 要作為OS 的治理使用。
  SQL> create table testforraw (id number) tablespace rawtofs;
  
  Table created.
  SQL> insert into testforraw values(100);
  1 row created.
  SQL> commit;
  Commit complete.
  RMAN> run{
  2> allocate channel c3 type disk;
  3> sql 'alter tablespace rawtofs offline';
  4> copy datafile '/dev/rlvrawtest' to '/backup/test/datafile/testforraw.dbf';
  5> }
  RMAN-03022: compiling command: allocate
  RMAN-03023: executing command: allocate
  RMAN-08030: allocated channel: c3
  RMAN-08500: channel c3: sid=13 devtype=DISK
  RMAN-03022: compiling command: sql
  RMAN-06162: sql statement: alter tablespace rawtofs offline
  RMAN-03023: executing command: sql
  RMAN-03022: compiling command: copy
  RMAN-03023: executing command: copy
  RMAN-08000: channel c3: copied datafile 5
  RMAN-08501: output filename=/backup/test/datafile/testforraw.dbf recid=7
  stamp=451692581
  RMAN-08031: released channel: c3
  然后我們再在Oracle 里面對這個數據文件更新定義:
  SQL> alter tablespace rawtofs rename datafile '/dev/rlvrawtest' to
  '/backup/test/datafile/testforraw.dbf';
  Tablespace altered.
  SQL> alter tablespace rawtofs online;
  Tablespace altered.
  我們檢查一下我們插入的數據,沒有問題:
  SQL> select *from testforraw;
  ID
  ----------
  100
  我們檢查數據字典,也正確反映了這個新的數據文件:
  
  SQL> L
  1* select tablespace_name,file_name from dba_data_files where
  tablespace_name='RAWTOFS'
  SQL> /
  TABLESPACE_NAME FILE_NAME
  ------------------------------ --------------------------------------------------
  RAWTOFS /backup/test/datafile/testforraw.dbf
  >

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵丘县| 册亨县| 丽江市| 白朗县| 六枝特区| 金堂县| 青田县| 山阴县| 大姚县| 潼南县| 黄石市| 土默特右旗| 溧阳市| 库尔勒市| 柯坪县| 湖口县| 芷江| 英山县| 河西区| 冷水江市| 石林| 湖州市| 合山市| 左贡县| 昌宁县| 武邑县| 宁波市| 股票| 石柱| 通许县| 和平区| 南宁市| 中超| 于都县| 民勤县| 荣成市| 亚东县| 丁青县| 连平县| 新宁县| 兴安县|