1. 程式人生 > >【Oracle RAC+DG實驗】Oracle RAC+ASM+DataGuard配置實驗記錄+常見問題

【Oracle RAC+DG實驗】Oracle RAC+ASM+DataGuard配置實驗記錄+常見問題

Oracle RAC+DG實驗】Oracle RAC+ASM+DataGuard配置實驗記錄+常見問題

1、環境規劃:

---RAC環境介紹(primary database)
           rac1       rac2
______________________________________________________

public ip                    192.168.110.11        192.168.110.12
______________________________________________________
virtual ip      192.168.110.21     192.168.110.22
_____________________________________________________
instance            racdb1          racdb2
______________________________________________________
db_name                  racdb
_______________________________________________________
storage mode                ASM
__________________________________________________

---單機環境介紹(standby database)
資料檔案可放至本地, 也可以放至ASM上,本實驗中先放至本地實驗
__________________________________________________________________________
ip                    192.168.110.11        192.168.110.12
___________________________________________________________________________
instance              192.168.110.13(rac3)
___________________________________________________________________________
storage mode     /oradata/racdb
___________________________________________________________________________

----hosts檔案

#Public Network - (eth0)
192.168.110.11   rac1
192.168.110.12   rac2
192.168.110.13   rac3

#Private Interconnect - (eth1)
10.10.10.11     rac1priv
10.10.10.12     rac2priv

#Public Virtual IP (VIP) addresses - (eth0)
192.168.110.21   rac1vip
192.168.110.22   rac2vip

--檢查環境

1)、啟動archivelog歸檔模式

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     54
Next log sequence to archive   56
Current log sequence           56

SQL> show parameter RECOVERY

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      +DG_RECOVERY
db_recovery_file_dest_size           big integer 2G
recovery_parallelism                 integer     0

2)、啟動FORCE_LOGGING模式

SQL> alter database FORCE LOGGING;

Database altered.

SQL> select FORCE_LOGGING from v$database;

FOR
---
YES

2、首先配置兩個資料庫的tnsnames.ora和listener.ora

tnsnames.ora(兩臺主機相同)

racdb_rac1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.110.21)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = racdb_s)
   (SERVICE_NAME = racdb1)
 )
)
 
racdb_rac2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.110.22)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = racdb_s)
   (SERVICE_NAME = racdb2)
 )
)

racdb_standby =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.110.13)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = racdb)
    )
 )
 
 
standby主機上的listener.ora

SID_LIST_LISTENER =
  (SID_LIST =
     (SID_DESC =
      (GLOBAL_DBNAME = racdb)
      (ORACLE_HOME = /oracle/app/product/10.2.0/db_1)
      (SID_NAME = racdb)
    )
     (SID_DESC =
      (GLOBAL_DBNAME = PLSExtProc)
      (ORACLE_HOME = /oracle/app/product/10.2.0/db_1)
      (SID_NAME = PLSExtProc)
    )
)

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.110.13)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )


3、準備引數檔案

RAC環境下的引數變化增加如下:

RAC主庫:(注意使用ASM的時候,不要改變db_unique_name引數,否則之後建立的asm檔案就會放入至新的db_unique_name目錄下面,導致DB_FILE_NAME_CONVERT失效。)

#add below parameter for standy database
*.service_names=racdb_s
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(racdb,racdb_standby)'
*.LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=racdb'
*.LOG_ARCHIVE_DEST_2='SERVICE=racdb_standby LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=racdb_standby'
*.FAL_SERVER='racdb_standby'
*.STANDBY_ARCHIVE_DEST='/oradata/arch'
*.racdb1.fal_client=racdb1
*.racdb2.fal_client=racdb2
*.STANDBY_FILE_MANAGEMENT=AUTO
*.DB_FILE_NAME_CONVERT='/oradata/racdb/datafile','+DG_DATA/racdb/datafile','/oradata/racdb/tempfile','+DG_DATA/racdb/tempfile'
*.LOG_FILE_NAME_CONVERT='/oradata/racdb/onlinelog','+DG_DATA/racdb/onlinelog'

單機備庫增加以下:
*.db_name='racdb'
*.db_unique_name='racdb_standby'
*.service_names='racdb_standby'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(racdb_standby,racdb)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/oradata/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=racdb_standby'
*.LOG_ARCHIVE_DEST_2='SERVICE=racdb1 LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=racdb'
*.STANDBY_FILE_MANAGEMENT='AUTO'
STANDBY_ARCHIVE_DEST='/oradata/arch'
*.FAL_SERVER='racdb1','racdb2'
fal_client='racdb_standby'
*.DB_FILE_NAME_CONVERT='+DG_DATA/racdb/datafile','/oradata/racdb/datafile','+DG_DATA/racdb/tempfile','/oradata/racdb/tempfile'
*.LOG_FILE_NAME_CONVERT='+DG_DATA/racdb/onlinelog','/oradata/racdb/onlinelog'*
racdb1.thread=1
*.undo_management='AUTO'

單機備庫引數如下:

#add below parameter for standy database
*.audit_file_dest='/oracle/app/admin/racdb/adump'
*.background_dump_dest='/oracle/app/admin/racdb/bdump'
*.compatible='10.2.0.4'
*.control_files='/oradata/racdb/datafile/racdb.ctl'
*.core_dump_dest='/oracle/app/admin/racdb/cdump'
*.db_block_size=16384
*.db_domain=''
*.db_name='racdb'
*.db_file_multiblock_read_count=16
*.DB_FILE_NAME_CONVERT='+DG_DATA/racdb/datafile','/oradata/racdb/datafile','+DG_DATA/racdb/tempfile','/oradata/racdb/tempfile'
*.db_unique_name='racdb_standby'
fal_client='racdb_standby'
*.FAL_SERVER='racdb1','racdb2'
*.job_queue_processes=10
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(racdb_standby,racdb_s)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/oradata/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=racdb_standby'
*.LOG_ARCHIVE_DEST_2='SERVICE=racdb1 LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=racdb'
*.LOG_FILE_NAME_CONVERT='+DG_DATA/racdb/onlinelog','/oradata/racdb/onlinelog'
*.open_cursors=300
*.pga_aggregate_target=89128960
*.processes=150
*.remote_login_passwordfile='exclusive'
*.service_names='racdb_standby'
*.sga_target=268435456
*.STANDBY_FILE_MANAGEMENT='AUTO'
racdb1.thread=1
*.undo_management='AUTO'
racdb1.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/oracle/app/admin/racdb/udump'
STANDBY_ARCHIVE_DEST='/oradata/arch'

5、在rac上進行備份


rman target /

backup database  format '/soft/racdb/racdbfull%u_%s_%p';

RMAN> backup database  format '/soft/racdb/racdbfull%u_%s_%p';

Starting backup at 11-JUN-10
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=127 instance=racdb1 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current SPFILE in backupset
including current control file in backupset
input datafile fno=00001 name=+DG_DATA/racdb/datafile/system.268.719166757
input datafile fno=00002 name=+DG_DATA/racdb/datafile/undotbs1.269.719166777
input datafile fno=00003 name=+DG_DATA/racdb/datafile/sysaux.270.719166783
input datafile fno=00004 name=+DG_DATA/racdb/datafile/undotbs2.272.719166797
input datafile fno=00006 name=+DG_DATA/racdb/datafile/rman_tbs.dbf
input datafile fno=00005 name=+DG_DATA/racdb/datafile/users.273.719166803
channel ORA_DISK_1: starting piece 1 at 11-JUN-10
channel ORA_DISK_1: finished piece 1 at 11-JUN-10
piece handle=/soft/racdb/racdbfull0elfvhv4_14_1 tag=TAG20100611T143204 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:38
Finished backup at 11-JUN-10


將備份的檔案拷到另一臺備機相同目錄下。

[[email protected] racdb]$ ls -ls
total 498268
498268 -rw-r----- 1 oracle oinstall 509722624 Jun 11 12:10 racdbfull_0clfv9jn_12_1
[[email protected] racdb]$ pwd
/soft/racdb
[[email protected] racdb]$ scp racdbfull_0clfv9jn_12_1 rac3:/soft/racdb/

6、建立standby控制檔案

在rac兩個例項上進行幾次歸檔。

alter system archive log current;

建立standby控制檔案

alter database create standby controlfile as '/oracle/standby.ctl';

建立spfile並啟動standby至nomount狀態。

startup nomount;

7、利用rman建立standby資料庫

rac1:

allocate channel c1 device type disk format '/soft/racdb/%U' connectsys/[email protected];
allocate channel c2 device type disk format '/soft/racdb/%U' connectsys/[email protected];
allocate auxiliary channel ac1 device type disk format '/soft/racdb/%U';
allocate auxiliary channel ac2 device type disk format '/soft/racdb/%U';

duplicate target database for standby;

過程如下:

[[email protected] racdb]$ rman target / auxiliarysys/[email protected]_standby

Recovery Manager: Release 10.2.0.4.0 - Production on Fri Jun 11 13:41:48 2010

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

connected to target database: RACDB (DBID=716783510)
connected to auxiliary database: RACDB (not mounted)

RMAN> duplicate target database for standby;

Starting Duplicate Db at 11-JUN-10
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=155 devtype=DISK

contents of Memory Script.:
{
   restore clone standby controlfile;
   sql clone 'alter database mount standby database';
}
executing Memory Script

Starting restore at 11-JUN-10
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: copied control file copy
input filename=/oracle/standby.ctl
output filename=/oradata/racdb/datafile/racdb.ctl
Finished restore at 11-JUN-10

sql statement: alter database mount standby database
released channel: ORA_AUX_DISK_1

contents of Memory Script.:
{
   set newname for tempfile  1 to
 "/oradata/racdb/tempfile/temp.271.719166789";
   switch clone tempfile all;
   set newname for datafile  1 to
 "/oradata/racdb/datafile/system.268.719166757";
   set newname for datafile  2 to
 "/oradata/racdb/datafile/undotbs1.269.719166777";
   set newname for datafile  3 to
 "/oradata/racdb/datafile/sysaux.270.719166783";
   set newname for datafile  4 to
 "/oradata/racdb/datafile/undotbs2.272.719166797";
   set newname for datafile  5 to
 "/oradata/racdb/datafile/users.273.719166803";
   set newname for datafile  6 to
 "/oradata/racdb/datafile/rman_tbs.dbf";
   restore
   check readonly
   clone database
   ;
}
executing Memory Script

executing command: SET NEWNAME

renamed temporary file 1 to /oradata/racdb/tempfile/temp.271.719166789 in control file

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 11-JUN-10
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=155 devtype=DISK

channel ORA_AUX_DISK_1: starting datafile backupset restore
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /oradata/racdb/datafile/system.268.719166757
restoring datafile 00002 to /oradata/racdb/datafile/undotbs1.269.719166777
restoring datafile 00003 to /oradata/racdb/datafile/sysaux.270.719166783
restoring datafile 00004 to /oradata/racdb/datafile/undotbs2.272.719166797
restoring datafile 00005 to /oradata/racdb/datafile/users.273.719166803
restoring datafile 00006 to /oradata/racdb/datafile/rman_tbs.dbf
channel ORA_AUX_DISK_1: reading from backup piece /soft/racdb/racdbfull_0clfv9jn_12_1
channel ORA_AUX_DISK_1: restored backup piece 1
piece handle=/soft/racdb/racdbfull_0clfv9jn_12_1 tag=TAG20100611T120926
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:01:39
Finished restore at 11-JUN-10

contents of Memory Script.:
{
   switch clone datafile all;
}
executing Memory Script

datafile 1 switched to datafile copy
input datafile copy recid=10 stamp=721116136 filename=/oradata/racdb/datafile/system.268.719166757
datafile 2 switched to datafile copy
input datafile copy recid=11 stamp=721116137 filename=/oradata/racdb/datafile/undotbs1.269.719166777
datafile 3 switched to datafile copy
input datafile copy recid=12 stamp=721116137 filename=/oradata/racdb/datafile/sysaux.270.719166783
datafile 4 switched to datafile copy
input datafile copy recid=13 stamp=721116137 filename=/oradata/racdb/datafile/undotbs2.272.719166797
datafile 5 switched to datafile copy
input datafile copy recid=14 stamp=721116137 filename=/oradata/racdb/datafile/users.273.719166803
datafile 6 switched to datafile copy
input datafile copy recid=15 stamp=721116137 filename=/oradata/racdb/datafile/rman_tbs.dbf
Finished Duplicate Db at 11-JUN-10

RMAN>

8、檢查standby資料庫

SQL> select status from v$instance;

STATUS
------------
MOUNTED

SQL> select open_mode from v$database;

OPEN_MODE
----------
MOUNTED


SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/oradata/racdb/onlinelog/group_1.266.719166749
/oradata/racdb/onlinelog/group_2.267.719166751
/oradata/racdb/onlinelog/group_3.274.719167937
/oradata/racdb/onlinelog/group_4.275.719167939
/oradata/racdb/onlinelog/group5
/oradata/racdb/onlinelog/group6

6 rows selected.

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/oradata/racdb/datafile/system.268.719166757
/oradata/racdb/datafile/undotbs1.269.719166777
/oradata/racdb/datafile/sysaux.270.719166783
/oradata/racdb/datafile/undotbs2.272.719166797
/oradata/racdb/datafile/users.273.719166803
/oradata/racdb/datafile/rman_tbs.dbf

6 rows selected.


SQL> select name from v$tempfile;

NAME
--------------------------------------------------------------------------------
/oradata/racdb/tempfile/temp.271.719166789

SQL> show parameter control

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7
control_files                        string      /oradata/racdb/datafile/racdb.
                                                 ctl
            
9、建立standby redo log日誌。

建立原則和單例項一樣,大小相等,但日誌組數量要比primary資料庫多一組。如之前為6組12個,則現在要建立7組14個。


alter database add standby logfile thread 1 group 7 '/oradata/racdb/onlinelog/group_7.log' size 50M;
 
alter database add standby logfile thread 1 group 8 '/oradata/racdb/onlinelog/group_8.log' size 50M;

alter database add standby logfile thread 1 group 9 '/oradata/racdb/onlinelog/group_9.log' size 50M;

alter database add standby logfile thread 2 group 10 '/oradata/racdb/onlinelog/group_10.log' size 50M;
 
alter database add standby logfile thread 2 group 11 '/oradata/racdb/onlinelog/group_11.log' size 50M;
 
alter database add standby logfile thread 2 group 12 '/oradata/racdb/onlinelog/group_12.log' size 50M;

alter database add standby logfile thread 1 group 13 '/oradata/racdb/onlinelog/group_13.log' size 50M;

alter database add standby logfile thread 2 group 14 '/oradata/racdb/onlinelog/group_14.log' size 50M;


10、開始同步

啟動MRP:

SQL> alter database recover managed standby database disconnect from session;

Media recovery complete.

停止MRP:

alter database recover managed standby database cancel;

11、在rac各個例項上檢視日誌傳送情況:

col DEST_NAME format a20

select dest_name,status,error from v$archive_dest;


DEST_NAME            STATUS    ERROR
-------------------- --------- -----------------------------------------------------------------
LOG_ARCHIVE_DEST_1   INACTIVE
LOG_ARCHIVE_DEST_2   ERROR     ORA-16057: DGID from server not in Data Guard configuration
LOG_ARCHIVE_DEST_3   INACTIVE
LOG_ARCHIVE_DEST_4   INACTIVE
LOG_ARCHIVE_DEST_5   INACTIVE
LOG_ARCHIVE_DEST_6   INACTIVE
LOG_ARCHIVE_DEST_7   INACTIVE
LOG_ARCHIVE_DEST_8   INACTIVE
LOG_ARCHIVE_DEST_9   INACTIVE
LOG_ARCHIVE_DEST_10  VALID

錯誤1:
ORA-16057: DGID from server not in Data Guard configuration
原因:主庫沒有設定引數log_archive_config
解決方法*.log_archive_config='dg_config=(orcl,auxdb)'
alter system set log_archive_config='dg_config=(racdb,racdb_standby)' scope=both;

SQL> select dest_name,status,error from v$archive_dest;

DEST_NAME            STATUS    ERROR
-------------------- --------- -----------------------------------------------------------------
LOG_ARCHIVE_DEST_1   VALID
LOG_ARCHIVE_DEST_2   VALID
LOG_ARCHIVE_DEST_3   INACTIVE
LOG_ARCHIVE_DEST_4   INACTIVE
LOG_ARCHIVE_DEST_5   INACTIVE
LOG_ARCHIVE_DEST_6   INACTIVE
LOG_ARCHIVE_DEST_7   INACTIVE
LOG_ARCHIVE_DEST_8   INACTIVE
LOG_ARCHIVE_DEST_9   INACTIVE
LOG_ARCHIVE_DEST_10  INACTIVE

10 rows selected

---測試看日誌是否傳送成功。

主庫:
Sql>alter system switch logfile;
Sql> select max(SEQUENCE#) from v$archived_log;
備庫:
Sql> select max(SEQUENCE#) from v$archived_log;
#或者更詳細的:select FIRST_TIME,NEXT_TIME, APPLIED,SEQUENCE# from v$archived_log order by SEQUENCE#;


SELECT MAX(R.SEQUENCE#) LAST_SEQ_RECD, MAX(L.SEQUENCE#) LAST_SEQ_SENT FROM V$ARCHIVED_LOG R, V$LOG L WHERE R.DEST_ID=2 AND   L.ARCHIVED='YES'

SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 85 AND 86;


測試在RAC主庫上建立一個表空間:

CREATE TABLESPACE FMISMAIN
    LOGGING
    DATAFILE '+dg_data' SIZE 20M AUTOEXTEND
    ON NEXT  10M EXTENT MANAGEMENT LOCAL SEGMENT SPACE
    MANAGEMENT  AUTO;
 
建立使用者:

CREATE USER "FMISMAIN"  PROFILE "DEFAULT"
    IDENTIFIED BY "FMISMAIN" DEFAULT TABLESPACE "FMISMAIN"
    TEMPORARY TABLESPACE "TEMP"
    ACCOUNT UNLOCK;
GRANT DBA TO "FMISMAIN";

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
+DG_DATA/racdb/datafile/system.268.719166757
+DG_DATA/racdb/datafile/undotbs1.269.719166777
+DG_DATA/racdb/datafile/sysaux.270.719166783
+DG_DATA/racdb/datafile/undotbs2.272.719166797
+DG_DATA/racdb/datafile/users.273.719166803
+DG_DATA/racdb/datafile/rman_tbs.dbf
+DG_DATA/racdb/datafile/fmismain.287.721410885


SQL> conn fmismain/fmismain
Connected.
SQL> select count(*) from xtdw3;

  COUNT(*)
----------
        30

SQL> select dh from xtdw3;

DH
--------
MAIN
0600
0601
1200
1201
0602
0100
0101
0400
0401
0500

DH
--------
0501
0700
0701
1300
1301
1800
1801
1900
1901
5100
5101

DH
--------
5300
5301
0301
0300
1500
1501
1600
1601

30 rows selected.

在兩個RAC例項上分別手工執行檢視結果:

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

檢查rac3備庫的日誌傳送:

[[email protected] oradata]$ ls -lsR

total 24
 4 drwxr-xr-x 2 oracle oinstall  4096 Jun 11 16:15 arch
16 drwxrwxrwx 2 oracle dba      16384 Jun  8 03:21 lost+found
 4 drwxr-xr-x 5 oracle oinstall  4096 Jun  8 03:25 racdb

./arch:
total 4888
  36 -rw-r----- 1 oracle oinstall   36352 Jun  8 07:26 1_76_719166742.dbf
  76 -rw-r----- 1 oracle oinstall   73728 Jun  8 07:26 1_77_719166742.dbf
 152 -rw-r----- 1 oracle oinstall  151040 Jun  8 07:26 1_78_719166742.dbf
 168 -rw-r----- 1 oracle oinstall  165888 Jun  8 07:26 1_79_719166742.dbf
 168 -rw-r----- 1 oracle oinstall  166400 Jun  8 07:51 1_80_719166742.dbf
 148 -rw-r----- 1 oracle oinstall  144896 Jun  8 07:51 1_81_719166742.dbf
   4 -rw-r----- 1 oracle oinstall    1024 Jun  8 07:51 1_82_719166742.dbf
 144 -rw-r----- 1 oracle oinstall  140288 Jun  8 07:51 1_83_719166742.dbf
   4 -rw-r----- 1 oracle oinstall    1024 Jun  8 07:42 1_84_719166742.dbf
  72 -rw-r----- 1 oracle oinstall   66048 Jun  8 07:47 1_85_719166742.dbf
1464 -rw-r----- 1 oracle oinstall 1492992 Jun  8 08:25 1_86_719166742.dbf
  16 -rw-r----- 1 oracle oinstall   13824 Jun 11 16:15 1_87_719166742.dbf
   4 -rw-r----- 1 oracle oinstall    2560 Jun 11 16:15 1_88_719166742.dbf
  24 -rw-r----- 1 oracle oinstall   23040 Jun  8 07:27 2_36_719166742.dbf
 176 -rw-r----- 1 oracle oinstall  175104 Jun  8 07:27 2_37_719166742.dbf
 148 -rw-r----- 1 oracle oinstall  143872 Jun  8 07:27 2_38_719166742.dbf
 768 -rw-r----- 1 oracle oinstall  778752 Jun  8 07:51 2_39_719166742.dbf
 152 -rw-r----- 1 oracle oinstall  149504 Jun  8 07:51 2_40_719166742.dbf
   4 -rw-r----- 1 oracle oinstall    1024 Jun  8 07:51 2_41_719166742.dbf
 140 -rw-r----- 1 oracle oinstall  139264 Jun  8 07:43 2_42_719166742.dbf
   4 -rw-r----- 1 oracle oinstall    1024 Jun  8 07:42 2_43_719166742.dbf
  60 -rw-r----- 1 oracle oinstall   54272 Jun  8 07:51 2_44_719166742.dbf
 948 -rw-r----- 1 oracle oinstall  963584 Jun 11 16:14 2_45_719166742.dbf
   4 -rw-r----- 1 oracle oinstall    2048 Jun 11 16:15 2_46_719166742.dbf
   4 -rw-r----- 1 oracle oinstall    1536 Jun 11 16:15 2_47_719166742.dbf

./lost+found:
total 0

./racdb:
total 12
4 drwxr-xr-x 2 oracle oinstall 4096 Jun 11 16:14 datafile
4 drwxr-xr-x 2 oracle oinstall 4096 Jun  8 06:55 onlinelog
4 drwxr-xr-x 2 oracle oinstall 4096 Jun  8 08:05 tempfile

./racdb/datafile:
total 1245228
 20520 -rw-r----- 1 oracle oinstall  20987904 Jun 11 16:22 fmismain.287.721410885
 15076 -rw-r----- 1 oracle oinstall  15417344 Jun 11 16:29 racdb.ctl
 51272 -rw-r----- 1 oracle oinstall  52445184 Jun 11 16:22 rman_tbs.dbf
215272 -rw-r----- 1 oracle oinstall 220217344 Jun 11 16:22 sysaux.270.719166783
440772 -rw-r----- 1 oracle oinstall 450904064 Jun 11 16:22 system.268.719166757
292148 -rw-r----- 1 oracle oinstall 298860544 Jun 11 16:22 undotbs1.269.719166777
205020 -rw-r----- 1 oracle oinstall 209731584 Jun 11 16:22 undotbs2.272.719166797
  5148 -rw-r----- 1 oracle oinstall   5259264 Jun 11 16:22 users.273.719166803

./racdb/onlinelog:
total 717640
51260 -rw-r----- 1 oracle oinstall 52429312 Jun 11 16:29 group_10.log
51260 -rw-r----- 1 oracle oinstall 52429312 Jun  8 07:26 group_11.log
51260 -rw-r----- 1 oracle oinstall 52429312 Jun  8 06:55 group_1.266.719166749
51260 -rw-r----- 1 oracle oinstall 52429312 Jun  8 07:47 group_12.log
51260 -rw-r----- 1 oracle oinstall 52429312 Jun  8 07:37 group_13.log
51260 -rw-r----- 1 oracle oinstall 52429312 Jun  8 07:37 group_14.log
51260 -rw-r----- 1 oracle oinstall 52429312 Jun  8 06:55 group_2.267.719166751
51260 -rw-r----- 1 oracle oinstall 52429312 Jun  8 06:55 group_3.274.719167937
51260 -rw-r----- 1 oracle oinstall 52429312 Jun  8 06:55 group_4.275.719167939
51260 -rw-r----- 1 oracle oinstall 52429312 Jun  8 06:55 group5
51260 -rw-r----- 1 oracle oinstall 52429312 Jun  8 06:55 group6
51260 -rw-r----- 1 oracle oinstall 52429312 Jun 11 16:29 group_7.log
51260 -rw-r----- 1 oracle oinstall 52429312 Jun  8 07:25 group_8.log
51260 -rw-r----- 1 oracle oinstall 52429312 Jun  8 07:39 group_9.log

./racdb/tempfile:
total 84
84 -rw-r----- 1 oracle oinstall 20987904 Jun  8 08:05 temp.271.719166789


在備庫中檢視剛才建立的表空間與使用者是否生效。

首先將資料庫啟動到read only模式下:

SQL> alter database recover managed standby database cancel;

Database altered.

SQL> alter database open read only;

Database altered.

SQL> !hostname
rac3

SQL>
SQL> conn fmismain/fmismain
Connected.
SQL> show parameter db_unique

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_unique_name                       string      racdb_standby
SQL>
SQL> select count(*) from xtdw3;

  COUNT(*)
----------
        30

SQL> select dh from xtdw3;

DH
--------
MAIN
0600
0601
1200
1201
0602
0100
0101
0400
0401
0500

DH
--------
0501
0700
0701
1300
1301
1800
1801
1900
1901
5100
5101

DH
--------
5300
5301
0301
0300
1500
1501
1600
1601

30 rows selected.


12、增加temp檔案

---在管理恢復模式下到只讀模式

SQL>alter database recover managed standby database cancel;

SQL>alter database open read only;

這個時候,可以給資料庫增加臨時資料檔案(這個在熱備份的時候是沒有備份過來的)

alter tablespace temp add tempfile '/oradata/racdb/tempfile/temp.271.719166789' reset 100M;

--從只讀方式到管理恢復方式
SQL>recover managed standby database disconnect from session;


13、少日誌的時候,維護故障解決

故障1
由於網路等原因導致歸檔日誌沒有全部傳輸到從庫中,這些需要我們手動干預。
常見因素:從庫關閉、網路故障、從庫空間不足等。

維護的通常步驟;關閉:先關主庫後關從庫,啟動:先啟動從庫然後啟動主庫。
關於日誌傳輸的控制可以通過MANDATORY、REOPEN、MAX_FAILURE來控制
MANDATORY REOPEN=5 MAX_FAILURE=3 每5秒重試一次,最大允許錯誤次數為3次,如果重試3次仍然不能成功,那麼主庫的日誌傳輸服務就會停止。
*.log_archive_dest_2='service=AUX VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) MANDATORY REOPEN=5 MAX_FAILURE=3 DB_UNIQUE_NAME=auxdb'

1)、查詢不在standby的日誌。

SQL>
SELECT MAX(R.SEQUENCE#) LAST_SEQ_RECD, MAX(L.SEQUENCE#) LAST_SEQ_SENT FROM V$ARCHIVED_LOG R, V$LOG L WHERE R.DEST_ID=2 AND   L.ARCHIVED='YES';
 LAST_SEQ_RECD LAST_SEQ_SENT
------------- -------------
7 10

2)、查詢primary的所在路徑
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 5 AND 10;
NAME
--------------------------------------------------------------------------------
/primary/thread1_dest/arcr_1_7.arc
/primary/thread1_dest/arcr_1_8.arc
/primary/thread1_dest/arcr_1_9.arc

3)、將日誌copy到standby的STANDBY_ARCHIVE_DEST下,將STANDBY_ARCHIVE_DEST的日誌copy到 LOG_ARCHIVE_DEST下

4)、
SQL> STARTUP MOUNT
SQL> ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
至此恢復成功。

故障2:
歸檔日誌之間經常產生gap

1)、確認歸檔日誌之間有無遺漏
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
1 90 92
2)、將遺漏的歸檔日誌copy到備庫的standby_archive_dest下
然後對其分別註冊
ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
3)、恢復歸檔日誌
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
4)、然後就可以按切換步驟進行切換了。


14、 引數說明


COMPATIBLE='10.2.0.1.0':資料庫版本號,主庫與從庫要統一,否則有可能redo的資料不能從主庫傳送到從庫。
DB_FILE_NAME_CONVERT=主庫資料檔案地址,從庫資料檔案地址:用於主從庫在同一臺機器上或主從庫資料檔案的路徑不一致的情況下
DB_UNIQUE_NAME=:資料庫的唯一名稱。推薦使用,如果使用了LOG_ARCHIVE_CONFIG,那麼就必須有改引數。
FAL_CLIENT=,指向從庫的服務名,本例為aux
FAL_SERVER 指向主庫的服務名,本例為orcl
LOG_ARCHIVE_CONFIG='DG_CONFIG=(主庫的db_unique_name,從庫的db_unique_name)'
LOG_ARCHIVE_DEST_n:日誌歸檔的地址,最少需要兩個,一個指向主庫,另一個指向從庫
LOG_ARCHIVE_DEST_STATE_n ={ENABLE|DEFER|ALTERNATE|RESET} 指定:enable or disable來決定是否傳輸redo的資料到從庫中。
LOG_FILE_NAME_CONVERT:同DB_FILE_NAME_CONVERT
STANDBY_ARCHIVE_DEST:指定路徑存放接收從主庫傳輸過來的歸檔日誌。
STANDBY_FILE_MANAGEMENT={AUTO|MANUAL} :AUTO當主庫新增或減少資料檔案時會自動同步從庫而不需要手動干預。


15、 經常遇到錯誤

錯誤1:
ORA-16057: DGID from server not in Data Guard configuration
原因:主庫沒有設定引數log_archive_config
解決方法*.log_archive_config='dg_config=(orcl,auxdb)'
alter system set log_archive_config='dg_config=(orcl,auxdb)' scope=both;

錯誤2:
PING[ARC0]: Heartbeat failed to connect to standby 'aux'. Error is 1031.
ORA-01031: insufficient privileges
解決問題思路:1、檢查sys密碼是否正確,大部分是這個原因。


錯誤3:Oracle使用者有寫standby_archive_dest的許可權
ORA-16025: parameter LOG_ARCHIVE_DEST_2 contains repeated or conflicting attributes
出現該錯誤的原因是LOG_ARCHIVE_DEST_2='SERVICE=orcl LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
db_unique_name前少了一個空格導致的


16、日常管理
(1) 啟動到管理模式
SQL>shutdown immediate;
SQL>startup nomount;
SQL>alter database mount standby database;
SQL>alter database recover managed standby database disconnect from session;


(2)啟動到只讀方式
SQL>shutdown immediate;
SQL>startup nomount;
SQL>alter database mount standby database;
SQL>alter database open read only;


(3)在管理恢復模式下到只讀模式
SQL>recover managed standby database cancel;
SQL>alter database open read only;
這個時候,可以給資料庫增加臨時資料檔案(這個在熱備份的時候是沒有備份過來的)

alter tablespace temp add tempfile '/oracle/oradata/ddd/temp01.dbf' size 100M;


(4)從只讀方式到管理恢復方式
SQL>recover managed standby database disconnect from session;

(5)開啟備庫

#sqlplus /nolog
Sql> connsys/[email protected]as sysdba;
Sql> startup mount;
Sql> alter database recover managed standby database disconnect from session;
如果要取消恢復:alter database recover managed standby database cancel;

(5)開啟主庫

# sqlplus /nolog
Sql> connsys/[email protected]as sysdba;
Sql> startup;

(6)測試是否OK

主庫:
Sql>alter system switch logfile;
Sql> select max(SEQUENCE#) from v$archived_log;
備庫:
Sql> select max(SEQUENCE#) from v$archived_log;
#或者更詳細的:select FIRST_TIME,NEXT_TIME, APPLIED,SEQUENCE# from v$archived_log order by SEQUENCE#;

17 角色轉換(switchover)

注意:Swithover時只能先從Primary切到Standby,再從Standby切到Primary.啟動備庫,再啟動主庫,先停主庫再停備庫。

主庫:
SQL> alter database commit to switchover to physical standby with session shutdown;

alter database mount standby database;

alter database recover managed standby database disconnect;

select OPEN_MODE, PROTECTION_MODE, ACTIVATION#,DATABASE_ROLE, SWITCHOVER# ,SWITCHOVER_STATUS from v$database;

OPEN_MODE  PROTECTION_MODE      ACTIVATION# DATABASE_ROLE    SWITCHOVER# SWITCHOVER_STATUS
---------- -------------------- ----------- ---------------- ----------- --------------------
MOUNTED    MAXIMUM PERFORMANCE            0 PHYSICAL STANDBY           0 SESSIONS ACTIVE

備庫:
SQL>
select OPEN_MODE, PROTECTION_MODE, ACTIVATION#,DATABASE_ROLE, SWITCHOVER# ,SWITCHOVER_STATUS from v$database;

OPEN_MODE  PROTECTION_MODE      ACTIVATION# DATABASE_ROLE    SWITCHOVER# SWITCHOVER_STATUS
---------- -   -------------------      -----------  ---------------- -----------   --------------------
MOUNTED    MAXIMUM PERFORMANCE            0 PHYSICAL STANDBY           0       TO PRIMARY


SQL> alter database commit to switchover to physical primary with session shutdown;

SQL>shutdown immediate

SQL> startup

Database altered.


角色轉換工作完成。剩下的是補救措施(針對原primary 資料庫),由於此時primary 資料庫已經不再是
data guard 配置的一部分,我們需要做的就是嘗試看看能否恢復原primary 資料庫,將其改造為新的standby
伺服器。具體操作方式可以分為二類:1.重建2.備份恢復。所涉及的技術前面的系列文章中均有涉及,此
處不再贅述。

SQL> alter database commit to switchover to physical standby with session shutdown;
alter database commit to switchover to physical standby with session shutdown
*
ERROR at line 1:
ORA-16416: Switchover target is not synchronized with the primary


更簡單的方式就是重新從主庫建立一個備用控制檔案,就可以啟動了。


3.1 準備備機備庫日誌(在原先的主庫,即現在的備庫上操作)

alter database add standby logfile thread 1 group 7 size 50M;
 
alter database add standby logfile thread 1 group 8 size 50M;

alter database add standby logfile thread 1 group 9 size 50M;

alter database add standby logfile thread 2 group 10 size 50M;
 
alter database add standby logfile thread 2 group 11size 50M;
 
alter database add standby logfile thread 2 group 12 size 50M;

alter database add standby logfile thread 1 group 13 size 50M;

alter database add standby logfile thread 2 group 14 size 50M;


3.2 準備主庫和備庫的引數檔案


準備主庫和備庫的引數檔案,最好就是將兩個資料庫的引數檔案互換,在兩臺機器上同時保留主庫和備庫的引數檔案,同時更換兩臺機的tnsnames.ora檔案primary和standby相關ip。


3.3 檢視狀態
SQL>select OPEN_MODE, PROTECTION_MODE, ACTIVATION#,DATABASE_ROLE, SWITCHOVER# ,SWITCHOVER_STATUS from v$database;
狀態如果是to standby或者to primary,則可以轉換。如果是session active.則有會話沒有斷開。
詳見三思筆記


3.4 從primary 切換到standby

SQL> connsys/[email protected]as sysdba;
SQL> alter database commit to switchover to physical standby with session shutdown;
SQL> shutdown
SQL> create spfile from pfile= C:\oracle\product\10.2.0\admin\fmis\pfile\init.standby;
SQL> alter database recover managed standby database disconnect;
SQL> startup mount;
檢查狀態和日誌傳輸,同步情況。


3.5 啟動新備庫端的Listener (port=1522)
[[email protected] admin]$ lsnrctl stop
[[email protected] admin]$ lsnrctl start LISTENER1


3.6 從standby 切換到primary
SQL> connsys/[email protected] as sysdba;
SQL> alter database commit to switchover to primary;
SQL> shutdown
SQL> create spfile from pfile= C:\oracle\product\10.2.0\admin\fmis\pfile\init.primary;
SQL> startup
檢查狀態和日誌傳輸,同步情況。


3.7 啟動新主庫端的Listener (port=1522)
[[email protected] admin]$ lsnrctl stop
[[email protected] admin]$ lsnrctl start LISTENER1


3.8 日誌檔案丟失註冊
如果主備資料庫日誌丟失,可以把備用日誌檔案複製過來,或者重新註冊。
alter database register logfile 'filename'

18、Data Guard資料庫模式的轉換

將一個data guard配置從最高效能模式改為最高可用性模式

切換時:RAC環境,切換時primary和standby 都只能有一個instance活動,其它的instance必須關閉。

關閉第二個rac例項:

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
[[email protected] ~]$