[oracle@oracle11 admin]$ sqlplus '/as sysdba'
SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 27 22:04:17 2012
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> alter system set log_archive_dest_1='location=/home/oracle/archivelog' scope =both;
System altered.
SQL> shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 304807936 bytes
Fixed Size 2212856 bytes
Variable Size 134220808 bytes
Database Buffers 163577856 bytes
Redo Buffers 4796416 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/oracle/archivelog
Oldest online log sequence 70
Next log sequence to archive 72
Current log sequence 72
SQL> exit
rman备份数据库
[oracle@oracle11 ~]$ rman target /
Recovery Manager: Release 11.2.0.1.0 - Production on Fri Apr 27 19:47:32 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORA11 (DBID=725596258)
RMAN> run{
2> allocate channel ch1 device type disk format '/home/oracle/rman/%d_%p_%Y_%M';
3> CONFIGURE CONTROLFILE AUTOBACKUP ON;
4> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/home/oracle/rman/%d_%F.ctl';
5> backup database ;
6> release channel ch1;
7> }
将备份文件拷贝到备机
[root@oracle11 rman]# ll
总用量 976580
-rw-r-----. 1 oracle oinstall 990183424 4月 27 19:48 ORA11_1_2012_04
-rw-r-----. 1 oracle oinstall 9830400 4月 27 19:48 ORA11_c-725596258-20120427-00.ctl
[root@oracle11 rman]# scp ORA11_1_2012_04 root@192.177.100.110:/home/oracle/rman/
root@192.177.100.110's password:
ORA11_1_2012_04 100% 944MB 10.1MB/s 01:34
[root@oracle11 rman]#
[root@oracle11 rman]#
[root@oracle11 rman]# ll
总用量 976580
-rw-r-----. 1 oracle oinstall 990183424 4月 27 19:48 ORA11_1_2012_04
-rw-r-----. 1 oracle oinstall 9830400 4月 27 19:48 ORA11_c-725596258-20120427-00.ctl
[root@oracle11 rman]# scp ORA11_c-725596258-20120427-00.ctl root@192.177.100.110:/home/oracle/rman/
root@192.177.100.110's password:
ORA11_c-725596258-20120427-00.ctl 100% 9600KB 9.4MB/s 00:01
修改主库参数
SQL> alter system set log_archive_config=(ora11,ora11standby) scope=both;
alter system set log_archive_config=(ora11,ora11standby) scope=both
*
ERROR at line 1:
ORA-02065: illegal option for ALTER SYSTEM
SQL> alter system set log_archive_config='dg_config=(ora11,ora11standby)' scope=both;
System altered.
SQL> alter system set log_archive_dest_2='location=/home/oracle/dg_archive valid_for=(all_logfiles,all_roles) db_unique_name=ora11' scope =both;
System altered.
SQL> alter system set log_archive_dest_3='service=ora11standby valid_for=(online_logfiles,primary_role) db_unique_name=ora11standby' scope=both;
System altered.
SQL> alter system set fal_client=ora11 scope=both;
System altered.
SQL> alter system set fal_server=ora11standby scope=both;
System altered.
在主库的tns文件中增加到备库的连接串
ora11standby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.177.100.110)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora11)
(SERVER = DEDICATED)
)
)
要保证是联通的
主库上生成备库的控制文件以及pfile
[oracle@oracle11 ~]$ sqlplus '/as sysdba'
SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 27 19:54:33 2012
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> alter database create standby controlfile as '/home/oracle/stanby.ctl'
2 ;
SQL> create pfile from spfile;
将上面2个文件scp到备机,到这主库的操作就完成了
以下是备库的操作:
修改主库传过来的pfile文件
[oracle@oracle11g-std dbs]$ more initora11.ora
ora11.__db_cache_size=163577856
ora11.__java_pool_size=4194304
ora11.__large_pool_size=4194304
ora11.__oracle_base='/home/oracle/app'#ORACLE_BASE set from environment
ora11.__pga_aggregate_target=104857600
ora11.__sga_target=306184192
ora11.__shared_io_pool_size=0
ora11.__shared_pool_size=125829120
ora11.__streams_pool_size=0
*.audit_file_dest='/home/oracle/app/admin/ora11/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/home/oracle/app/oradata/ora11/control01.ctl','/home/oracle/app/flash_recovery_area/ora11/control02.ctl'
*.db_block_size=8192
*.db_domain='us.oracle.com'
*.db_name='ora11'
*.db_recovery_file_dest='/home/oracle/app/flash_recovery_area'
*.db_recovery_file_dest_size=5218762752
*.diagnostic_dest='/home/oracle/app'
*.log_archive_dest_1='location=/home/oracle/archivelog'
*.open_cursors=300
*.pga_aggregate_target=101711872
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=306184192
*.undo_tablespace='UNDOTBS1'
*.db_unique_name=ora11standby----新增一个参数
主库上的参数如下:
[oracle@oracle11 admin]$ more /home/oracle/app/product/11.2.0.1/dbs/initora11.ora
ora11.__db_cache_size=163577856
ora11.__java_pool_size=4194304
ora11.__large_pool_size=4194304
ora11.__oracle_base='/home/oracle/app'#ORACLE_BASE set from environment
ora11.__pga_aggregate_target=104857600
ora11.__sga_target=306184192
ora11.__shared_io_pool_size=0
ora11.__shared_pool_size=125829120
ora11.__streams_pool_size=0
*.audit_file_dest='/home/oracle/app/admin/ora11/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/home/oracle/app/oradata/ora11/control01.ctl','/home/oracle/app/flash_recovery_area/ora11/control02.ctl'
*.db_block_size=8192
*.db_domain='us.oracle.com'
*.db_name='ora11'
*.db_recovery_file_dest='/home/oracle/app/flash_recovery_area'
*.db_recovery_file_dest_size=5218762752
*.diagnostic_dest='/home/oracle/app'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ora11XDB)'
*.log_archive_dest_1='location=/home/oracle/archivelog'
*.open_cursors=300
*.pga_aggregate_target=101711872
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=306184192
*.undo_tablespace='UNDOTBS1'
将备库启动到nomount状态
[oracle@oracle11g-std ~]$ sqlplus '/as sysdba'
SQL*Plus: Release 11.2.0.1.0 Production on Sat Apr 28 00:25:49 2012
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup nomount pfile='/home/oracle/app/product/11.2.0.1/dbs/initora11.ora';
ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated
ORA-01262: Stat failed on a file destination directory
Linux-x86_64 Error: 2: No such file or directory
删除上面的参数
SQL> startup nomount pfile='/home/oracle/app/product/11.2.0.1/dbs/initora11.ora';
ORA-09925: Unable to create audit trail file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 9925
接着删除
但是在删除之后还是出现上面的错误说是无法创建audit文件,这个就郁闷了,但是此时oracle已经启动了nomount状态可以看到进程已经存在了
那是为什么那???经查发现audit会在默认位置创建文件,但是我没有那个路径文件,导致出错,创建就可以了
When connected to the database, may you check the parameter "audit_file_dest":
Then, check if this directory exists or if the Unix right are corrects on it.
If you cannot logon into the database may you check for the following directories:
$ORACLE_HOME/rdbms/audit
These are the default value for this parameter.
修改备库参数
SQL> alter system set log_archive_dest_2='service=ora11 valid_for=(online_logfiles,primary_roles) db_unique_name=ora11';
System altered.
SQL> alter system set fal_client=ora11standby;
System altered.
SQL> alter system set fal_server=ora11;
System altered.
SQL> alter system set log_archive_config='dg_config=(ora11standby,ora11)';
System altered.
SQL> create spfile from pfile;
File created.
nomount结束需要把数据库启动到mount状态进行恢复,而此时还没有控制文件,因此需要生成standby 的控制文件
生成备库的控制文件
[oracle@oracle11g-std rdbms]$ rman target /
Recovery Manager: Release 11.2.0.1.0 - Production on Sat Apr 28 01:19:05 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORA11 (not mounted)
RMAN> restore standby controlfile from '/home/oracle/rman/stanby.ctl';
Starting restore at 28-APR-12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 04/28/2012 01:19:49
ORA-19504: failed to create file "/home/oracle/app/oradata/ora11/control01.ctl"
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory
ORA-19600: input file is control file (/home/oracle/rman/stanby.ctl)
ORA-19601: output file is control file (/home/oracle/app/oradata/ora11/control01.ctl)
RMAN> restore standby controlfile from '/home/oracle/rman/stanby.ctl';
Starting restore at 28-APR-12
using channel ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 04/28/2012 01:21:53
ORA-19504: failed to create file "/home/oracle/app/flash_recovery_area/ora11/control02.ctl"
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory
ORA-19600: input file is control file (/home/oracle/app/oradata/ora11/control01.ctl)
ORA-19601: output file is control file (/home/oracle/app/flash_recovery_area/ora11/control02.ctl)
RMAN> restore standby controlfile from '/home/oracle/rman/stanby.ctl';
Starting restore at 28-APR-12
using channel ORA_DISK_1
channel ORA_DISK_1: copied control file copy
output file name=/home/oracle/app/oradata/ora11/control01.ctl
output file name=/home/oracle/app/flash_recovery_area/ora11/control02.ctl
Finished restore at 28-APR-12
RMAN> exit
Recovery Manager complete.
[oracle@oracle11g-std rdbms]$ sqlplus '/as sysdba'
SQL*Plus: Release 11.2.0.1.0 Production on Sat Apr 28 01:22:36 2012
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> alter database mount standby database;
Database altered.
SQL>
恢复备库数据库
rman>restore database;
开启备库的实时应用
SQL> alter database recover managed standby database using current logfile disconnect;
alter database recover managed standby database using current logfile disconnect
*
ERROR at line 1:
ORA-38500: USING CURRENT LOGFILE option not available without standby redo logs
备库没有添加standby redo log file。但是主库采用的是:lgwr async传送的日志。当备库的RFS进程接收到日志后,发现备库没有standby redo log的时候,备库会自动用ARCH将其写入归档文件。
在主库也添加一下standby redo log,以备切换。
就是说要在备库也加上standby redo log file才能使用 using current logfile disconnect;
在standby库没有standby logfile,在maxmize pretection,maxmize availability中必须
要有standby logfile,为了避免数据的损失最少,maxmize performance 也最好创建standby logfile,考虑角色切换
primary库也要创建standby logfile,
standby logfile创建的要求, 与primary的redo logfile的大小相同,个数要至少多一个
SQL> select OPEN_MODE ,PROTECTION_MODE from v$database;
OPEN_MODE PROTECTION_MODE
-------------------- --------------------
MOUNTED MAXIMUM PERFORMANCE
那就创建standby log file
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/home/oracle/app/oradata/ora11/redo01.log
/home/oracle/app/oradata/ora11/redo02.log
/home/oracle/app/oradata/ora11/redo03.log
SQL> alter database add standby logfile group 4 '/home/oracle/app/oradata/ora11/stdredo01.log' size 10m;
Database altered.
SQL> alter database add standby logfile group 5 '/home/oracle/app/oradata/ora11/stdredo02.log' size 10m;
Database altered.
SQL> alter database recover managed standby database using current logfile disconnect;
Database altered.
primary:
SQL> select max(sequence#) from v$log;
MAX(SEQUENCE#)
--------------
77
备库:
SQL> select max(sequence#) from v$log;
MAX(SEQUENCE#)
--------------
77
主库,切换一个归档:
SQL> alter system switch logfile;
System altered.
SQL> select max(sequence#) from v$log;
MAX(SEQUENCE#)
--------------
78
SQL>
备库:
SQL> select max(sequence#) from v$log;
MAX(SEQUENCE#)
--------------
78
到此物理standby搭建完成。
因为是11g可以以只读的方式打开数据库:
SQL> alter database recover managed standby database cancel;
Database altered.
SQL> alter database open read only;
Database altered.
SQL> alter database recover managed standby database using current logfile disconnect;
Database altered.