兩臺oracle未安裝ARC,俺是小白,佔時不會玩arc。ADB高手在於分享,俺小白將
下面是Data Guard 主備環境配置過程分享給大家。備份是物理Data Guard
一,
系統:centos 6.4
IP 主:192.168.153.131 oracle 企業 Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
備:192.168.153.134 oracle 企業 Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
(1)在主庫上打開archive log
[oracle@node1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Sun Apr 23 10:04:49 2017
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oracle/app/product/11.2/db/dbs/arch
Oldest online log sequence 3
Next log sequence to archive 5
Current log sequence
(2)
在主庫上設置閃回大小
SQL> alter system set db_recovery_file_dest_size=50g scope=spfile;
System altered.
(3)在主庫上設置閃迴路徑及打開閃回
SQL> alter system set db_recovery_file_dest='/oracle/app/product/11.2/db/dbs/arch' scope=spfile;
System altered.
SQL> alter database flashback on;
alter database flashback on
*
ERROR at line 1:
ORA-38706: Cannot turn on FLASHBACK DATABASE logging.
ORA-38709: Recovery Area is not enabled.
SQL>
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1048059904 bytes
Fixed Size 2219992 bytes
Variable Size 725614632 bytes
Database Buffers 314572800 bytes
Redo Buffers 5652480 bytes
Database mounted.
SQL> alter database flashback on;
Database altered.
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------------------------
YES
SQL> alter database open;
Database altered.
(4)在主庫上查看閃回
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
FILE_TYPE PERCENT_SPACE_USED
---------------------------------------- ------------------
PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------- ---------------
CONTROL FILE 0
0 0
REDO LOG 0
0 0
ARCHIVED LOG 0
0 0
FILE_TYPE PERCENT_SPACE_USED
---------------------------------------- ------------------
PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------- ---------------
BACKUP PIECE 0
0 0
IMAGE COPY 0
0 0
FLASHBACK LOG .02
0 1
FILE_TYPE PERCENT_SPACE_USED
---------------------------------------- ------------------
PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------- ---------------
FOREIGN ARCHIVED LOG 0
0 0
7 rows selected.
SQL> show parameter recover;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
db_recovery_file_dest string
/oracle/app/product/11.2/db/db
s/arch
db_recovery_file_dest_size big integer
50G
recovery_parallelism integer
0
(4)在主庫上創建表空間做測試
SQL> create tablespace shanghai datafile '/oracle/app/oradata/test1/shanghai01.dbf' size 100m autoextend on;
Tablespace created.
SQL> create user shanghai identified by shanghai default tablespace shanghai;
User created.
SQL> grant connect,resource to shanghai;
Grant succeeded.
SQL> grant dba to shanghai;
Grant succeeded.
(5)在主庫上打開強制寫日誌
SQL> select force_logging from v$database;
FORCE_
------
NO
SQL> alter database force logging;
Database altered.
(6)在主庫上創建standby 日誌,通過redo與備庫進行同步
SQL> select group#,member from V$logfile;
GROUP#
----------
MEMBER
--------------------------------------------------------------------------------
3
/oracle/app/oradata/test1/redo03.log
2
/oracle/app/oradata/test1/redo02.log
1
/oracle/app/oradata/test1/redo01.log
SQL> alter database add standby logfile group 11 '/oracle/app/oradata/test1/standby_redo11.log' size 50m;
Database altered.
SQL> alter database add standby logfile group 12 '/oracle/app/oradata/test1/standby_redo12.log' size 50m;
Database altered.
SQL> alter database add standby logfile group 13 '/oracle/app/oradata/test1/standby_redo13.log' size 50m;
Database altered.
SQL> alter database add standby logfile group 14 '/oracle/app/oradata/test1/standby_redo14.log' size 50m;
Database altered.
SQL> select group#,member from v$logfile;
GROUP#
----------
MEMBER
--------------------------------------------------------------------------------
3
/oracle/app/oradata/test1/redo03.log
2
/oracle/app/oradata/test1/redo02.log
1
/oracle/app/oradata/test1/redo01.log
GROUP#
----------
MEMBER
--------------------------------------------------------------------------------
11
/oracle/app/oradata/test1/standby_redo11.log
12
/oracle/app/oradata/test1/standby_redo12.log
13
/oracle/app/oradata/test1/standby_redo13.log
GROUP#
----------
MEMBER
--------------------------------------------------------------------------------
14
/oracle/app/oradata/test1/standby_redo14.log
7 rows selected.
(7)
在主庫創建pfile文件,後面住庫啓動的時候要用到pfile文件,將主庫file文件複製爲備庫文件,我這裏是沒有修改前複製,也可以是修改後複製,將其scp到備份相應目錄
cp -rq inittest1.ora inittest2.ora
SQL> create pfile from spfile;
File created.
SQL>
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@node1 ~]$ cd /oracle/app/product/11.2/db/dbs/
[oracle@node1 dbs]$ ll
total 40
drwxr-xr-x 3 oracle oinstall 4096 Apr 23 2017 arch
-rw-rw---- 1 oracle oinstall 1544 Apr 23 2017 hc_DBUA0.dat
-rw-rw---- 1 oracle oinstall 1544 Apr 23 2017 hc_test1.dat
-rw-r--r-- 1 oracle oinstall 2851 May 15 2009 init.ora
-rw-r--r-- 1 oracle oinstall 1524 Apr 23 02:37 inittest1.ora
-rw-r--r-- 1 oracle oinstall 906 Apr 23 02:24 inittest1.ora.bak
-rw-r--r-- 1 oracle oinstall 1524 Apr 23 02:37 inittest2.ora
-rw-r----- 1 oracle oinstall 24 Apr 23 2017 lkTEST1
-rw-r----- 1 oracle oinstall 1536 Apr 23 2017 orapwtest1
-rw-r----- 1 oracle oinstall 2560 Apr 23 2017 spfiletest1.ora
下面是主庫pfile修改後的內容inittest1.ora
[oracle@node1 dbs]$ cat inittest1.ora
test1.__db_cache_size=310378496
test1.__java_pool_size=4194304
test1.__large_pool_size=4194304
test1.__oracle_base='/oracle/app'#ORACLE_BASE set from environment
test1.__pga_aggregate_target=423624704
test1.__sga_target=629145600
test1.__shared_io_pool_size=0
test1.__shared_pool_size=297795584
test1.__streams_pool_size=0
*.audit_file_dest='/oracle/app/admin/test1/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/oracle/app/oradata/test1/control01.ctl','/oracle/app/oradata/test1/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='test1'
*.db_recovery_file_dest_size=53687091200
*.db_recovery_file_dest='/oracle/app/product/11.2/db/dbs/arch'
*.diagnostic_dest='/oracle/app'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=test1XDB)'
*.memory_target=1050673152
*.open_cursors=300
*.processes=1500
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=1655
*.undo_tablespace='UNDOTBS1'
下面是修改的的內容
db_unique_name=test1
log_archive_config='dg_config=(test1,test2)'
log_archive_dest_1='location=/oracle/app/product/11.2/db/dbs/arch valid_for=(all_logfiles,all_roles) db_unique_name=test1'
log_archive_dest_2='service=test2 lgwr async valid_for=(online_logfiles,primary_roles) db_unique_name=test2'
log_archive_dest_state_1=enable
log_archive_dest_state_2=enable
db_file_name_convert='/oracle/app/oradata/test2','/oracle/app/oradata/test1'
log_file_name_convert='/oracle/app/oradata/test2','/oracle/app/oradata/test1'
fal_server=test2
fal_client=test1
standby_file_management=auto
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
下面是備份庫pfile文件內容inittest2.ora
cat
test1.__db_cache_size=310378496
test1.__java_pool_size=4194304
test1.__large_pool_size=4194304
test1.__oracle_base='/oracle/app'#ORACLE_BASE set from environment
test1.__pga_aggregate_target=423624704
test1.__sga_target=629145600
test1.__shared_io_pool_size=0
test1.__shared_pool_size=297795584
test1.__streams_pool_size=0
*.audit_file_dest='/oracle/app/admin/test2/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/oracle/app/oradata/test2/control01.ctl','/oracle/app/oradata/test2/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='test1'
*.db_recovery_file_dest_size=53687091200
*.db_recovery_file_dest='/oracle/app/product/11.2/db/dbs/arch'
*.diagnostic_dest='/oracle/app'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=test1XDB)'
*.memory_target=1050673152
*.open_cursors=300
*.processes=1500
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=1655
*.undo_tablespace='UNDOTBS1'
db_unique_name=test2
log_archive_config='dg_config=(test1,test2)'
log_archive_dest_1='location=/oracle/app/product/11.2/db/dbs/arch valid_for=(all_logfiles,all_roles) db_unique_name=test2'
log_archive_dest_2='service=test1 lgwr async valid_for=(online_logfiles,primary_roles) db_unique_name=test1'
log_archive_dest_state_1=enable
log_archive_dest_state_2=enable
db_file_name_convert='/oracle/app/oradata/test1','/oracle/app/oradata/test2'
log_file_name_convert='/oracle/app/oradata/test1','/oracle/app/oradata/test2'
fal_server=test1
fal_client=test2
standby_file_management=auto
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
(8)在主庫上創建控制文件
SQL> alter database create standby controlfile as '/oracle/app/oradata/test1/control03.ctl';
Database altered.
(9)配置監聽,將主備庫監聽都起來,lsnrctl start
測試主備是否通 tnsping test2
tnsping test1
主庫
[oracle@node1 admin]$ cat listener.ora
# listener.ora Network Configuration File: /oracle/app/product/11.2/db/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = test1)
(ORACLE_HOME = /oracle/app/product/11.2/db)
(SID_NAME = test1)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = node1)(PORT = 1521))
)
ADR_BASE_LISTENER = /oracle/app
[oracle@node1 admin]$
[oracle@node1 admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /oracle/app/product/11.2/db/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
TEST2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.153.134)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = test2)
)
)
TEST1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.153.131)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = test1)
)
)
[oracle@node1 admin]$
備份庫
[root@node2 admin]# cat listener.ora
# listener.ora Network Configuration File: /oracle/app/product/11.2/db/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = test2)
(ORACLE_HOME = /oracle/app/product/11.2/db)
(SID_NAME = test2)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = node2)(PORT = 1521))
)
ADR_BASE_LISTENER = /oracle/app
[root@node2 admin]#
[root@node2 admin]# cat tnsnames.ora
# tnsnames.ora Network Configuration File: /oracle/app/product/11.2/db/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
TEST2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.153.134)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = test2)
)
)
TEST1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.153.131)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = test1)
)
)
[root@node2 admin]#
SQL>
SQL> exit
Disconnected
[oracle@node1 dbs]$
[oracle@node1 dbs]$ lsnrctl start
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 23-APR-2017 03:25:35
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Starting /oracle/app/product/11.2/db/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /oracle/app/product/11.2/db/network/admin/listener.ora
Log messages written to /oracle/app/diag/tnslsnr/node1/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=node1)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=node1)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 23-APR-2017 03:25:35
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /oracle/app/product/11.2/db/network/admin/listener.ora
Listener Log File /oracle/app/diag/tnslsnr/node1/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=node1)(PORT=1521)))
Services Summary...
Service "test1" has 1 instance(s).
Instance "test1", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@node1 dbs]$
[oracle@node1 dbs]$
(10)用之前創建的pfile啓動主庫
[oracle@node1 dbs]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Sun Apr 23 03:25:58 2017
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup pfile='/oracle/app/product/11.2/db/dbs/inittest1.ora';
ORACLE instance started.
Total System Global Area 1048059904 bytes
Fixed Size 2219992 bytes
Variable Size 729808936 bytes
Database Buffers 310378496 bytes
Redo Buffers 5652480 bytes
ORA-00214: control file '/oracle/app/oradata/test1/control01.ctl' version 772 這裏是1和3控制文件不一樣報錯,也是pfile文件裏面加了一個103的控制文件路徑,將路徑去掉
inconsistent with file '/oracle/app/oradata/test1/control03.ctl' version 768
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL>
SQL>
SQL> startup pfile='/oracle/app/product/11.2/db/dbs/inittest1.ora';
ORACLE instance started.
Total System Global Area 1048059904 bytes
Fixed Size 2219992 bytes
Variable Size 729808936 bytes
Database Buffers 310378496 bytes
Redo Buffers 5652480 bytes
Database mounted.
Database opened.
(11)創建spfile文件,住庫原先是有spfile文件,但是原先的spfile文件不是dg環境的文件,如果將住庫關閉,在刺用startup啓動時,會有錯誤
SQL> create spfile from pfile;
.
關閉主庫
shutdown immediate;
先在備份庫創建完相應的目錄
複製數據文件,控制文件,redo文件,注意控制文件和文件的屬性,這裏是複製上面創建的控制文件不是主庫源先的控制文件。
scp *.log [email protected]:/oracle/app/oradata/test2/
scp *.dbf [email protected]:/oracle/app/oradata/test2/
scp control03.ctl [email protected]:/oracle/app/oradata/test2/
二,下面是備份庫的操作
(1)創建pfile文件的相應目錄
mkdir /oracle/app/product/11.2/db/dbs/arch -p
mkdir /oracle/app/oradata/test2 -p
mkdir /oracle/app/admin/test2/adump -p
mkdir /oracle/app/admin/test2/dpdump -p
mkdir /oracle/app/admin/test2/pfile -p
啓動備份庫到nomount 狀態
SQL> startup nomount
SQL> alter database mount atandby database 這個步驟做完後會有RFS進程,如果沒有請查看日誌
SQL> select process,pid,status,client_process from v$managed_standby;
PROCESS PID STATUS CLIENT_PROCESS
------------------ ---------- ------------------------ ----------------
ARCH 3678 CONNECTED ARCH
ARCH 3680 CONNECTED ARCH
ARCH 3682 CLOSING ARCH
ARCH 3684 CONNECTED ARCH
RFS 3698 IDLE N/A
RFS 3692 IDLE UNKNOWN
RFS 3694 IDLE UNKNOWN
RFS 3696 IDLE LGWR
SQL> alter database recover managed standby database disconnect from session; 這個步驟做完後會有MRP0進程,如果沒有請看日誌
QL> select process,pid,status,client_process from v$managed_standby;
PROCESS PID STATUS CLIENT_PROCESS
------------------ ---------- ------------------------ ----------------
ARCH 3678 CONNECTED ARCH
ARCH 3680 CONNECTED ARCH
ARCH 3682 CLOSING ARCH
ARCH 3684 CONNECTED ARCH
RFS 3698 IDLE UNKNOWN
RFS 3692 IDLE UNKNOWN
RFS 3727 IDLE UNKNOWN
RFS 3696 IDLE LGWR
MRP0 3715 WAIT_FOR_LOG N/A
下面是一些備份庫的查詢
SQL> select sequence# from v$log;
SEQUENCE#
----------
10
0
0
SQL> show parameter instance_name;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
instance_name string
test2
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
9
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
----------------------------------------
NOT ALLOWED
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
----------------------------------------
NOT ALLOWED
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
9
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
10
SQL> select database_role,open_mode from v$database;
DATABASE_ROLE OPEN_MODE
-------------------------------- ----------------------------------------
PHYSICAL STANDBY MOUNTED
SQL> select status from v$instance;
STATUS
------------------------
MOUNTED
下面是住庫的一些查看下
Database altered.
SQL> select sequence# from v$log;
SEQUENCE#
----------
10
8
9
SQL> show parameter instance_name;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
instance_name string
test1
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
9
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
----------------------------------------
TO STANDBY
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
9
SQL> alter system switch logfile;
System altered.
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
10
SQL>
SQL>
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
----------------------------------------
TO STANDBY
SQL> select process,pid,status,client_process from v$managed_standby;
PROCESS PID STATUS CLIENT_PROCESS
------------------ ---------- ------------------------ ----------------
ARCH 3548 CLOSING ARCH
ARCH 3550 CLOSING ARCH
ARCH 3552 CLOSING ARCH
ARCH 3554 CLOSING ARCH
LNS 3556 WRITING LNS
SQL>
SQL> select database_role,open_mode from v$database;
DATABASE_ROLE OPEN_MODE
-------------------------------- ----------------------------------------
PRIMARY READ WRITE
SQL> select status from v$instance;
STATUS
------------------------
OPEN
下面是一些報錯 解決方法是,在主庫創建密碼文件後,將其scp到備份庫,然後在啓動備份庫
orapwd file=orapwtest1 password=oracle entries=10 force=y
ORA-01034: ORACLE not available
PING[ARC2]: Heartbeat failed to connect to standby 'test2'. Error is 1034.
Sun Apr 23 03:37:48 2017
Error 1017 received logging on to the standby
------------------------------------------------------------
Check that the primary and standby are using a password file
and remote_login_passwordfile is set to SHARED or EXCLUSIVE,
and that the SYS password is same in the password files.
returning error ORA-16191
------------------------------------------------------------
Errors in file /oracle/app/diag/rdbms/test1/test1/trace/test1_arc2_3311.trc:
ORA-16191: Primary log shipping client not logged on standby
PING[ARC2]: Heartbeat failed to connect to standby 'test2'. Error is 16191.
Sun Apr 23 03:40:49 2017