日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle查询file_name,Oracle DG环境下db_file_name_convert的实际意义

發布時間:2023/12/3 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle查询file_name,Oracle DG环境下db_file_name_convert的实际意义 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于DG環境下備庫數據文件重命名的問題:

**前言:**

主要想表明DG環境下備庫數據文件重命名的問題,以及db_file_name_convert與log_file_name_convert的作用。

**實驗證明:**

主庫為備庫備份一份控制文件

RMAN> backup current controlfile for standby format '/home/oracle/rman/standby.ctl';

拷貝到備庫進行恢復

**備庫此時不設置db_file_name_convert ,log_file_name_convert兩個參數:**

```

SQL> show parameter db_file_name_convert;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

db_file_name_convert string

SQL> show parameter log_file_name_convert;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

log_file_name_convert string

```

**恢復備庫控制文件:**

RMAN> restore controlfile from '/home/oracle/rman/standby.ctl';

SQL> alter database mount;

**查看控制文件中記錄的數據文件信息:**(proddg2為主庫,prod為備庫,曾做過主備切換)

```

SQL> select name from v$datafile;

NAME

/oracle/app/oradata/proddg2/system01.dbf

/oracle/app/oradata/proddg2/sysaux01.dbf

/oracle/app/oradata/proddg2/undotbs01.dbf

/oracle/app/oradata/proddg2/users01.dbf

/oracle/app/oradata/proddg2/example01.dbf

SQL> select member from v$logfile;

MEMBER

/oracle/app/oradata/proddg2/redo03.log

/oracle/app/oradata/proddg2/redo02.log

/oracle/app/oradata/proddg2/redo01.log

/oracle/app/oradata/proddg2/std_redo04.log

/oracle/app/oradata/proddg2/std_redo05.log

/oracle/app/oradata/proddg2/std_redo06.log

```

控制文件中記錄的數據文件位置都是主庫的,進行restore前,需要進行數據文件重命名

**手動重命名:**

```

SQL> set line 500

SQL> set pages 0

SQL> select q'[alter database rename file ']' || name || q'[' to ]' || q'['/oracle/app/oradata/prod/]' || substr(name,instr(name,'/',-1)+1) || q'[';]' from v$datafile;

執行:

alter database rename file '/oracle/app/oradata/proddg2/system01.dbf' to '/oracle/app/oradata/prod/system01.dbf';

alter database rename file '/oracle/app/oradata/proddg2/sysaux01.dbf' to '/oracle/app/oradata/prod/sysaux01.dbf';

alter database rename file '/oracle/app/oradata/proddg2/undotbs01.dbf' to '/oracle/app/oradata/prod/undotbs01.dbf';

alter database rename file '/oracle/app/oradata/proddg2/users01.dbf' to '/oracle/app/oradata/prod/users01.dbf';

alter database rename file '/oracle/app/oradata/proddg2/example01.dbf' to '/oracle/app/oradata/prod/example01.dbf';

ERROR at line 1:

ORA-01511: error in renaming log/data files

ORA-01141: error renaming data file 1 - new file '/oracle/app/oradata/prod/system01.dbf' not found

ORA-01110: data file 1: '/oracle/app/oradata/proddg2/system01.dbf'

ORA-27037: unable to obtain file status

Linux-x86_64 Error: 2: No such file or directory

Additional information: 3

```

**使用sqlplus手動進行重命名,重命名后的文件要在指定目錄存在。(適用于熱備份方式同步搭建DG)**

**使用RMAN在restore前重命名:**

```

SQL> select q'[set newname for datafile ']' || name || q'[' to ]' || q'['/oracle/app/oradata/prod/]' || substr(name,instr(name,'/',-1)+1) || q'[';]' from v$datafile;

```

將獲取到的內容復制到RMAN命令塊中形成腳本

```

recovery.sh:

rman target / log=recover_log << EOF

run

{

allocate channel d1 device type disk;

allocate channel d2 device type disk;

allocate channel d3 device type disk;

catalog start with '/home/oracle/rman';

set newname for datafile '/oracle/app/oradata/proddg2/system01.dbf' to '/oracle/app/oradata/prod/system01.dbf';

set newname for datafile '/oracle/app/oradata/proddg2/sysaux01.dbf' to '/oracle/app/oradata/prod/sysaux01.dbf';

set newname for datafile '/oracle/app/oradata/proddg2/undotbs01.dbf' to '/oracle/app/oradata/prod/undotbs01.dbf';

set newname for datafile '/oracle/app/oradata/proddg2/users01.dbf' to '/oracle/app/oradata/prod/users01.dbf';

set newname for datafile '/oracle/app/oradata/proddg2/example01.dbf' to '/oracle/app/oradata/prod/example01.dbf';

release channel d1;

release channel d2;

release channel d3;

restore database;

switch datafile all;

}

exit

EOF

```

Recovery Manager complete.

**查看數據文件以及日志文件的記錄:**

**數據文件:**

```

SQL> select name from v$datafile;

NAME

/oracle/app/oradata/prod/system01.dbf

/oracle/app/oradata/prod/sysaux01.dbf

/oracle/app/oradata/prod/undotbs01.dbf

/oracle/app/oradata/prod/users01.dbf

/oracle/app/oradata/prod/example01.dbf

```

數據文件重命名成功也恢復成功。

**日志文件:**

```

SQL> select member from v$logfile;

MEMBER

/oracle/app/oradata/proddg2/redo03.log

/oracle/app/oradata/proddg2/redo02.log

/oracle/app/oradata/proddg2/redo01.log

/oracle/app/oradata/proddg2/std_redo04.log

/oracle/app/oradata/proddg2/std_redo05.log

/oracle/app/oradata/proddg2/std_redo06.log

```

**日志文件還需要手動重命名,因為不存在proddg2目錄,重命名至prod目錄下**

**(日志文件是可以在sqlplus中mount狀態下重命名的,不需要在對應目錄存在日志文件)。**

**2.如果在備庫此時存在如下參數時的情況:**

```

db_file_name_convert =/oracle/app/oradata/proddg2, /oracle/app/oradata/prod

log_file_name_convert=/oracle/app/oradata/proddg2, /oracle/app/oradata/prod

```

**恢復備庫的控制文件:**

```

RMAN> restore controlfile from '/home/oracle/rman/standby.ctl';

SQL> alter database mount;

Database altered.

```

**查看數據文件與日志文件信息:**

```

SQL> select name from v$datafile;

NAME

/oracle/app/oradata/prod/system01.dbf

/oracle/app/oradata/prod/sysaux01.dbf

/oracle/app/oradata/prod/undotbs01.dbf

/oracle/app/oradata/prod/users01.dbf

/oracle/app/oradata/prod/example01.dbf

SQL> select member from v$logfile;

MEMBER

/oracle/app/oradata/prod/redo03.log

/oracle/app/oradata/prod/redo02.log

/oracle/app/oradata/prod/redo01.log

/oracle/app/oradata/prod/std_redo04.log

/oracle/app/oradata/prod/std_redo05.log

/oracle/app/oradata/prod/std_redo06.log

```

**再直接使用RMAN執行restore database即可。**

```

RMAN> restore database;

```

**總結:**

兩種方式將主庫的控制文件傳給備庫。

**1**.alter database create standby controlfile as '/home/oracle/control01.ctl';

```

拷貝到備庫,將數據庫啟動到mount模式后,需要手動進行數據文件重命名,**但是要保證重命名后的路徑下存在相應的數據文件。**

//該控制文件中記錄的數據文件路徑仍為主庫的數據文件路徑。

```

2.backup current controlfile for standby format '/home/oracle/%d_%I_%s_%p.bkp';

```

使用RMAN備份的控制文件,拷貝到備庫時,使用RMAN進行恢復控制文件時

如果備庫設置了db_file_name_convert與log_file_name_convert參數,

那么當數據庫啟動到mount時,就無需手動進行數據文件重命名,因為RMAN在恢復控制文件過程中,會依據該參數設置,自行修改控制文件中記錄的數據文件路徑日志文件路徑。

如果備庫沒有設置db_file_name_convert與log_file_name_convert參數

那么就需要在restore前在RMAN的run塊中對數據文件進行set new name 然后執行switch datafile all。

但是日志文件還是需要手動重命名。

```

3.另外意義

```

db_file_name_convert與log_file_name_convert參數的另外一個意義就是當主庫創建數據文件等操作時,備庫會根據該參數轉化路徑后自動創建一個相對應位置的數據文件,前提是STANDBY_FILE_MANAGEMENT參數為auto模式。

```

**疑問:備庫的redo與standby redo是如何生成的,何時生成的。**

總結

以上是生活随笔為你收集整理的oracle查询file_name,Oracle DG环境下db_file_name_convert的实际意义的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。