Oracle10g的DataGuard的详细过程

CentOS5.5 linux Oracle10g 32-bit 单实例做DataGuard 过程


/usr/bin/rz,sz 报错:解决linux安装软件:/lib/ld-linux.so.2: bad ELF interpreter问题
yum install -y glibc.i686 




http://blog.csdn.net/w63667329/article/details/7890172   (安装oracle10g)
http://blog.csdn.net/w63667329/article/details/7890417   ( 安装oracle10g 配置dataguard 介绍和步骤)




前面的各种配置后
root:xhost +


su - oralce
export LANG=en --->如果没有这个命令,调出的图形界面是没有文字介绍的。
cd /u01/app/database
./runinstaller




错误原因:缺少支持打印的图形化动态链接库libXp.so.6


解决办法:


1,  去下载缺少的包:libXp-1.0.0-8.1.el5.i386.rpm


2,安装此包:


[root@test ~]# rpm -ivh libXp-1.0.0-8.1.el5.i386.rpm
warning: libXp-1.0.0-8.1.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID e8562897
Preparing...                ########################################### [100%]
   1:libXp                  ########################################### [100%]


 


iSQL*Plus URL:
http://standby:5560/isqlplus


iSQL*Plus DBA URL:
http://standby:5560/isqlplus/dba


Database Control URL:
http://standby:1158/em


parameter filename :/u01/app/oracle/product/10.2.0/db_1/dbs/spfileorcl.oracle/product/10








名词解释:数据库名,实例名,唯一性库名,SID,服务名


数据库名 :                  
数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的。




数据库实例名:       是用于和操作系统进行联系的标识,就是说数据库和操作系统之间的交互用的是数据库实例名。实例名也被写入参数文件中,该参数为instance_name,在winnt平台中,实例名同时也被写入注册表。数据库名和实例名可以相同也可以不同。在一般情况下,数据库名和实例名是一对一的关系,但如果在oracle并行服务器架构(即oracle实时应用集群)中,数据库名和实例名是一对多的关系。




数据库实例名 和 ORACLE_SID  :
虽然两者都表是oracle实例,但两者是有区别的。instance_name是oracle数据库参数。而ORACLE_SID是操作系统的环境变 量。




全局数据库名:                
全局数据库名 = 数据库名 + 数据库域名,如前述福建节点的全局数据库名是:oradb.fj.jtyz




什么是数据库服务名         : 
从oracle9i版本开始,引入了一个新的参数,即数据库服务名。参数名是SERVICE_NAME。 如果数据库有域名,则数据库服务名就是全局数据库名;否则,数据库服务名与数据库名相同。


数据库服务名 = 全局数据库名  = 数据库名 + 数据库域名
service_name = global_dbname = db_name  + domain 


刚开始建库的时候会设置两个参数GLobal Database Name和SID,GLobal Database Name:ORCL 一般情况下SID和GLobal Database Name是一样的。
即:GLobal Database Name = SID = $ORACLE_SID = SID_NAME = SERVICE_NAME = db_name  + domain


修改主备上面的监听和tnsnames.ora的配置后重新来过


 sid == SID = $ORACLE_SID = SID_NAME = SERVICE_NAME = db_name  + domain

GLobal Database Name = SID = $ORACLE_SID = SID_NAME = SERVICE_NAME = db_name  + domain

GLobal Database Name = SID = $ORACLE_SID = SID_NAME = SERVICE_NAME = db_name  + domain


  net_service_name(tnsname.ora中的代码段的开头) ==>> instance_service_name(tnsname.ora中的SERVICE_NAME的值) ==>> global_dbname(listener.ora中的) ==>> sid_name(listener.ora中的) ==>> sid  == SID 


(主库上)sqlplus sys/uddippl@primary  注:service_name为tnsname.ora中的网络服务名,global_name与tnsname.ora中的实例服务名必须完全一样。


   primary         ==>    orclprimary         ==> orclprimary   ==>  orcl       ==>   orcl 
      |                       |                          |               |
net_service_name   ==> instance_service_name  ==>  GLOBAL_DBNAME  ==> SID_NAME    ==>   $ORACLE_SID 
            \            /                                \            /
tnsnames.ora                                   listener.ora



   standby         ==>    orclstandby         ==> orclstandby   ==>  standby     ==>   standby 
      |                       |                          |               |
net_service_name   ==> instance_service_name  ==>  GLOBAL_DBNAME  ==> SID_NAME     ==>   $ORACLE_SID 
            \            /                                \            /
tnsnames.ora                                   listener.ora









2、主库的信息搜集、更改,和备库的信息同步(需要关闭数据库一次)。


一,操作系统类型和位数:CentOS5.5 i386平台,安装在/u01/app/oracle目录中 ,数据库的版本


[root@orc2 admin]# lsb_release -id 
Distributor ID: n/a
Description: redhat-4 (Final)
[root@orc2 admin]# uname -i -m -p 
i686 i686 i386




外网的1.5的配置([root@ecoracle ~]# lsb_release -i -d 
Distributor ID: CentOS
Description: CentOS release 5.11 (Final)
[root@ecoracle ~]# uname -i -m -p 
i686 i686 i386
[root@ecoracle ~]# 




确认Oracle是版本和位数


从登陆中看,64bit, 如果没有则是32位的。
[oracle@dboracle ~]$ sqlplus / as sysdba --->从登陆中看,64bit, 如果没有则是32位的。


SQL*Plus: Release 11.2.0.1.0 Production on Thu Nov 24 14:26:10 2016


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




从v$sql视图获取
a.如果输出为8位16进制数,则为32位Oracle
SQL> select address from v$sql where rownum<2;
ADDRESS
--------
578428D8
b.如果输出为16位16进制数,则为64位Oracle
SQL> select address from v$sql where rownum<2;
ADDRESS
----------------
000000040DFA01E0


从session中看,
SQL> select * from v$version;


BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production


二,确认数据库名,实例名,唯一性库名   (如果做dataguard的话唯一性库名要和数据库名不一样。一般实例名和数据库名是一样的。)
SQL> select (select instance_name from v$instance) instance_name ,name ,db_unique_name from v$database;


INSTANCE_NAME NAME   DB_UNIQUE_NAME
---------------- --------- ------------------------------
primary DBLIWAI    dbliwai
(实例名)       (数据库名)   orc2(唯一性库名)


修改db_unique_name过程:
SQL> show parameter name;


SQL>  show parameter name;


NAME     TYPE    VALUE
------------------------------------ ---------------------- ------------------------------
db_file_name_convert     string
db_name         string    dbliwai
db_unique_name     string    dbliwai
global_names     boolean FALSE
instance_name     string    primary
lock_name_space     string
log_file_name_convert string
service_names     string    dbliwai


SQL> shutdown immediate 
Database closed.
Database dismounted.
ORACLE instance shut down.


SQL> create pfile from spfile;
SQL> create pfile from spfile;


File created.








编辑pfile
vim  /u01/app/oracle/product/10.2.0/db_1/dbs/initorcl.ora  ---->这个就是pfile
添加一个行
*.db_unique_name='ORCLPRIMARY'


SQL> startup pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initorcl.ora';
ORACLE instance started.


Total System Global Area 1241513984 bytes
Fixed Size    1219136 bytes
Variable Size  318768576 bytes
Database Buffers  905969664 bytes
Redo Buffers   15556608 bytes
Database mounted.
Database opened.
SQL> show parameter name;


NAME     TYPE       VALUE
--------------------- ----------- ------------------------------
db_file_name_convert        string
db_name         string    dbliwai
db_unique_name     string    dbprimary
global_names     boolean FALSE
instance_name     string    primary
lock_name_space     string
log_file_name_convert string
service_names     string    dbprimary
SQL> 


这个时候db_unique_name变成了dbprimary,service_names 也变成了dbprimary




SQL> create spfile from pfile;


File created.


SQL> 
SQL> 
SQL> shutdown immediate 
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup 
ORACLE instance started.


Total System Global Area 1241513984 bytes
Fixed Size    1219136 bytes
Variable Size  318768576 bytes
Database Buffers  905969664 bytes
Redo Buffers   15556608 bytes
Database mounted.
Database opened.
SQL> select (select instance_name from v$instance) instance_name ,name ,db_unique_name from v$database;


INSTANCE_NAME NAME   DB_UNIQUE_NAME
---------------- --------- ------------------------------
primary DBLIWAI    dbprimary  ----------------------------------------->这里就对了,是想要的效果。


SQL> 




三,确认归档模式,闪回模式和强制日志记录方式。(做DataGuard是的话,主库一定要开启归档和强制日志记录方式)
SQL> select log_mode,flashback_on,force_logging from v$database;


LOG_MODE     FLASHBACK_ON               FOR
------------ ------------------            ---
ARCHIVELOG   NO(开闪回是要重启实例的) YES




【开启归档,闪回,强制logging模式】
SQL> select log_mode,flashback_on,force_logging from v$database;


LOG_MODE     FLASHBACK_ON FOR
------------ ------------------ ---
NOARCHIVELOG NO NO


SQL> archive log list;
Database log mode       No Archive Mode
Automatic archival       Disabled
Archive destination       USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     4
Current log sequence       6
SQL> 
SQL> 
SQL> shutdown immediate 
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.


Total System Global Area 1241513984 bytes
Fixed Size    1219136 bytes
Variable Size  318768576 bytes
Database Buffers  905969664 bytes
Redo Buffers   15556608 bytes
Database mounted.
SQL> alter database archivelog;


Database altered.


SQL> alter database force logging;


Database altered.


SQL> alter database flashback on;


Database altered.


SQL> alter database open;


Database altered.


确定归档模式,强制归档方式,闪回模式,明确密码文件包含的密码。下面的结果有说明有密码文件,需要把文件拷贝到备库指定的位置。
SQL>  select log_mode,flashback_on,force_logging from v$database;


LOG_MODE     FLASHBACK_ON FOR
------------ ------------------ ---
ARCHIVELOG   YES YES


SQL> 




四,确认数据文件和临时表空间文件的路径,是否使用ASM ---> ????


SQL> select substr(name,1,regexp_instr(name,'\/[[:alnum:]]+.dbf',1,1,0,'i')) as name from v$datafile;


NAME
--------------------------------------------------------------------------------
/u01/app/oracle/ORCL/
/u01/app/oracle/ORCL/
/u01/app/oracle/ORCL/
/u01/app/oracle/ORCL/
/u01/app/oracle/ORCL/


SQL> select substr(name,1,regexp_instr(name,'\/[[:alnum:]]+.dbf',1,1,0,'i')) as name from v$tempfile;


NAME
--------------------------------------------------------------------------------
/u01/app/oracle/ORCL/




五,确认日志文件唯一路径,数组和 大小,是否使用ASM??


SQL> select distinct substr(member,1,regexp_instr(member,'\/([a-z]|[0-9])+.log',1,1,0,'i')) as member from v$logfile;


MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/   -->redo日志3个
/u01/app/oradata/archive/      --->1118个归档日志文件




六,确认ORACLE_HOME ,ORACLE_BASE和ORACLE_SID的变量的值


SQL> ho echo $ORACLE_HOME
/u01/app/oracle/product/10.2.0/db_1


SQL> ho echo $ORACLE_BASE
/u01/app/oracle


SQL> ho echo $ORACLE_SID
orcl




七,确认数据存储方式,容量,闪回恢复区的大小和位置,服务器的型号


SQL> show parameter db_recovery_file_dest


NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest     string /u01/app/oracle/flash_recovery_area  
db_recovery_file_dest_size     big integer 2G






八,确定归档模式,强制归档方式,闪回模式,明确密码文件包含的密码。下面的结果有说明有密码文件,需要把文件拷贝到备库指定的位置。






SQL> select * from v$pwfile_users;


USERNAME       SYSDB SYSOP
------------------------------ ----- -----
SYS           TRUE  TRUE
ECUSER       TRUE  FALSE 


SQL> alter database add standby logfile group 11 ('/u01/app/oracle/oradata/dbliwai_standby/sredo01.log') size 50m;


Database altered.


SQL> alter database add standby logfile group 12 '/u01/app/oracle/oradata/dbliwai_standby/sredo02.log' size 50m;


Database altered.


SQL> alter database add standby logfile group 13 '/u01/app/oracle/oradata/dbliwai_standby/sredo03.log' size 50m;


Database altered.


SQL> alter database add standby logfile group 14 '/u01/app/oracle/oradata/dbliwai_standby/sredo04.log' size 50M;


Database altered.








五,配置主库的网络,即$ORACLE_HOME/network/admin/listenner.ora  和 $ORACLE_HOME/network/admin/tnsname.ora








oracle 监听的配置详细讲解:
primary上的/u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora配置如下:
[oracle@primary admin]$pwd
/u01/app/oracle/product/10.2.0/db_1/network/admin
[oracle@primary admin]$ vim tnsname.ora


主上的监听的配置/u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora如下:
[oracle@dbprimary admin]$ cat listener.ora 
# listener.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.


SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = primary)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (GLOBAL_DBNAME = primary)
    )
    (SID_DESC =
      (SID_NAME = standby)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (GLOBAL_DBNAME = standby)
    )
  )


LISTENER =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.115.14)(PORT = 1521))
    )


[oracle@dbprimary admin]$ cat tnsnames.ora 
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.


PRIMARY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.115.14)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = primary)
    )
  )


STANDBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.115.15)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = standby)
    )
  )
  
  
  
STANDBY的监听的配置/u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora如下:


[oracle@dbstandby admin]$ cat tnsnames.ora 
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.




PRIMARY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.115.14)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = primary)
    )
  )


STANDBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.115.15)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = standby)
    )
  )
[oracle@dbstandby admin]$ cat listener.ora 
# listener.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.


SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = standby)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (SID_NAME = standby)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = primary)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (SID_NAME = primary)
    )
  )


LISTENER =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.115.15)(PORT = 1521))
    )










3、主库的参数配置备份,并拷贝到备库


vim /home/oracle/.bash_profile  ---->添加下面内容


TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME
ORACLE_SID=standby; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
#LD_ASSUME_KERNEL=2.4.1; export LD_ASSUME_KERNEL
#export LANG=en
export NLS_LANG=american_america.ZHS16GBK
export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
#alias ls="ls -FA"
alias home="cd $ORACLE_HOME"
alias base="cd $ORACLE_BASE"


(主库中操作)创建pfile和控制文件,并拷贝到从库的相应的位置
SQL> alter database create standby controlfile as '/u01/app/oracle/standby.ctl';


Database altered.


SQL> create pfile='/u01/app/oracle/init.ora' from spfile;


File created.
[oracle@primary dbs]$scp init.ora standby.ctl  [email protected]:/u01/app/oracle




(从库中操作)
[oracle@standby oracle]$ cp init.ora /u01/app/oracle/product/10.2.0/db_1/dbs/initstandby.ora






[oracle@standby oracle]$vim /u01/app/oracle/product/10.2.0/db_1/dbs/initstandby.ora


primary.__db_cache_size=905969664
primary.__java_pool_size=16777216
primary.__large_pool_size=16777216
primary.__shared_pool_size=285212672
primary.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/standby/adump'
*.background_dump_dest='/u01/app/oracle/admin/standby/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/u01/app/oracle/standby.ctl'
*.core_dump_dest='/u01/app/oracle/admin/standby/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=8
*.db_file_name_convert='/u01/app/oracle/oradata/dbliwai/','/u01/app/oracle/oradata/dbliwai_standby/'
*.db_name='dbliwai'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.db_unique_name='dbstandby'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=primaryXDB)'
*.fal_server='PRIMARY'
*.fal_client='STANDBY'
*.job_queue_processes=10
*.log_archive_config='dg_config=(DBPRIMARY,DBSTANDBY)'
*.log_archive_dest_1='location=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dbstandby'
*.log_archive_dest_2='SERVICE=primary lgwr ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dbprimary'
*.LOG_ARCHIVE_DEST_STATE_1='enable'
*.LOG_ARCHIVE_DEST_STATE_2='enable'
*.log_archive_format='%t_%s_%r.dbf'
*.log_archive_max_processes=10
*.log_file_name_convert='/u01/app/oracle/oradata/dbliwai/','/u01/app/oracle/oradata/dbliwai_standby/'
*.open_cursors=300
*.pga_aggregate_target=413138944
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=1241513984
*.standby_file_management=auto
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/app/oracle/admin/standby/udump'






这里要说明一下,fal_server 是对方的TNSNAMES.ORA 中的网络服务名称。
1、FAL_SERVER specifies the FAL (fetch archive log) server for a standby database. The value is an Oracle Net service name, which is assumed to be configured properly on the standby database system to point to the desired FAL server.


2、*.log_archive_dest_2='SERVICE 这里的SERVICE也是 Net service name 




[oracle@standby ~]$ sqlplus / as sysdba


SQL*Plus: Release 10.2.0.1.0 - Production on Thu Dec 1 22:34:15 2016


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


Connected to an idle instance.


SQL> startup nomount 
ORACLE instance started.


Total System Global Area 1241513984 bytes
Fixed Size    1219136 bytes
Variable Size  318768576 bytes
Database Buffers  905969664 bytes
Redo Buffers   15556608 bytes
SQL>


[oracle@standby dbs]$ ls 
hc_orcl.dat  hc_standby.dat  initdw.ora  initstandby.ora  lkORCLSTANDBY  orapwstandby


SQL> create spfile from pfile;


File created.
[oracle@standby dbs]$ ls 
hc_orcl.dat  hc_standby.dat  initdw.ora  initstandby.ora  lkORCLSTANDBY  orapwstandby  spfilestandby.ora
[oracle@standby dbs]$ 


SQL> show parameter db_unique_name


NAME     TYPE                             VALUE
---------------------- --------------------------   --------------------------
db_unique_name     string              DBSTANDBY


到此从库读取了参数文件,开启到了nomount状态。也可以读取控制文件到mounted状态。下面要对主库的参数进行调整。










配置主库的监听和备库的监听和tnsnames.ora (内容见上面的配置)


配置主库的一些参数命令




SQL> alter system set log_archive_dest_1='location=/u01/app/oracle/arch valid_for=(all_logfiles,all_roles) db_unique_name=dbprimary';
SQL> alter system set log_archive_dest_2='service=standby lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=dbstandby';   -->Net service name 
SQL> alter system set log_archive_config='dg_config=(dbprimary,dbstandby)';  ---->这里定义的db_unique_name
SQL> alter system set log_archive_dest_state_1=enable;
SQL> alter system set log_archive_dest_state_2=enable;
SQL> alter system set log_archive_max_processes=5;
SQL> alter system set fal_server=standby;          --->本地TNSNAMES.ORA 中的对方的Net service name (如果自己是从,那么就是自己的tnsnames.ora中的主的网络服务名 )
SQL> alter system set fal_client=primary;         --->本地TNSNAMES.ORA 中的对方的Net service name  
SQL> alter system set standby_file_management=auto;
SQL> alter system set db_unique_name='dbprimary' scope=spfile;
SQL> alter system set db_file_name_convert='/u01/app/oracle/oradata/dbliwai_standby','/u01/app/oracle/oradata/dbliwai' scope=spfile;
SQL> alter system set log_file_name_convert='/u01/app/oracle/oradata/dbliwai_standby','/u01/app/oracle/oradata/dbliwai' scope=spfile;


SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.




Total System Global Area  612368384 bytes
Fixed Size                  2085872 bytes
Variable Size             167775248 bytes
Database Buffers          436207616 bytes
Redo Buffers                6299648 bytes
Database mounted.
Database opened.


主库的初始化参数:
vim $ORACLE_HOME/dbs/initprimary.ora


primary.__db_cache_size=905969664
primary.__java_pool_size=16777216
primary.__large_pool_size=16777216
primary.__shared_pool_size=285212672
primary.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/dbliwai/adump'
*.background_dump_dest='/u01/app/oracle/admin/dbliwai/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/u01/app/oracle/oradata/dbliwai/control01.ctl','/u01/app/oracle/oradata/dbliwai/control02.ctl','/u01/app/oracle/oradata/dbliwai/control03.ctl'
*.core_dump_dest='/u01/app/oracle/admin/dbliwai/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=8
*.db_file_name_convert='/u01/app/oracle/oradata/dbliwai_standby','/u01/app/oracle/oradata/dbliwai'
*.db_name='dbliwai'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.db_unique_name='dbprimary'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=primaryXDB)'
*.fal_client='PRIMARY'
*.fal_server='STANDBY'
*.job_queue_processes=10
*.log_archive_config='dg_config=(dbprimary,dbstandby)'
*.log_archive_dest_1='location=/u01/app/oracle/arch valid_for=(all_logfiles,all_roles) db_unique_name=dbprimary'
*.log_archive_dest_2='service=standby lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=dbstandby'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.dbf'
*.log_archive_max_processes=10
*.log_file_name_convert='/u01/app/oracle/oradata/dbliwai_standby','/u01/app/oracle/oradata/dbliwai'
*.open_cursors=300
*.pga_aggregate_target=413138944
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=1241513984
*.standby_file_management='AUTO'
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/app/oracle/admin/dbliwai/udump'








--备份primary db,并且传到standby服务器/bak下
[root@primary admin]# mkdir /bak
[root@primary admin]# chown -R oracle:oinstall /bak 




[oracle@dbprimary dbs]$ rman target / 


Recovery Manager: Release 10.2.0.1.0 - Production on Fri Dec 2 21:58:07 2016


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


connected to target database: DBLIWAI (DBID=1575389156)


RMAN> run {
2> allocate channel c1 type disk;
3> backup database format '/bak/%U';
4> release channel c1;
5> }


using target database control file instead of recovery catalog
allocated channel: c1
channel c1: sid=127 devtype=DISK


Starting backup at 2016-12-02 21:59:07
channel c1: starting full datafile backupset
channel c1: specifying datafile(s) in backupset
input datafile fno=00001 name=/u01/app/oracle/oradata/dbliwai/system01.dbf
input datafile fno=00003 name=/u01/app/oracle/oradata/dbliwai/sysaux01.dbf
input datafile fno=00005 name=/u01/app/oracle/oradata/dbliwai/example01.dbf
input datafile fno=00002 name=/u01/app/oracle/oradata/dbliwai/undotbs01.dbf
input datafile fno=00004 name=/u01/app/oracle/oradata/dbliwai/users01.dbf
channel c1: starting piece 1 at 2016-12-02 21:59:08
channel c1: finished piece 1 at 2016-12-02 22:00:03
piece handle=/bak/01rmg7hc_1_1 tag=TAG20161202T215907 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:55
channel c1: starting full datafile backupset
channel c1: specifying datafile(s) in backupset
including current control file in backupset
channel c1: starting piece 1 at 2016-12-02 22:00:05
channel c1: finished piece 1 at 2016-12-02 22:00:06
piece handle=/bak/02rmg7j4_1_1 tag=TAG20161202T215907 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:02
Finished backup at 2016-12-02 22:00:06


released channel: c1


RMAN> exit 




Recovery Manager complete.




(备库上操作)
[root@standby ~]# mkdir /bak
[root@standby ~]# chown -R oracle:oinstall /bak


(主库上操作)
[oracle@primary bak]$ scp * [email protected]:/u01/app/oracle/bak
[email protected]'s password: 
03rmdn8t_1_1                                                                                       100%  633MB   4.2MB/s   02:31    
04rmdn9m_1_1                                                                                       100% 6976KB   3.4MB/s   00:02    
[oracle@primary bak]$ 


[oracle@dbprimary dbs]$ scp orapwprimary [email protected]:/u01/app/oracle/product/10.2.0/db_1/dbs/
[email protected]'s password: 
orapwprimary                                                                   100% 1536     1.5KB/s   00:00    
[oracle@dbprimary dbs]$ sqlplus sys/uddippl@standby as sysdba


SQL*Plus: Release 10.2.0.1.0 - Production on Fri Dec 2 22:11:57 2016


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


ERROR:
ORA-01031: insufficient privileges








(备库上操作)
[oracle@dbstandby dbs]$ cp orapwprimary orapwstandby




(主库上操作)
--克隆duplicate standby db
[oracle@primary bak]$ sqlplus sys/uddippl@standby as sysdba   ---------->说明链接到备库是没有问题的了。


SQL*Plus: Release 10.2.0.1.0 - Production on Thu Dec 1 23:38:51 2016


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




Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> show user;
USER is "SYS"
SQL> show parameter db_unique_name;


NAME                   TYPE                 VALUE
------------------------------------ ----------- ------------------------------
db_unique_name              string            ORCLSTANDBY
SQL> select open_mode from v$database;


OPEN_MODE
--------------------
MOUNTED
SQL> startup force nomount 
ORACLE instance started.


Total System Global Area 1241513984 bytes
Fixed Size    1219136 bytes
Variable Size  318768576 bytes
Database Buffers  905969664 bytes
Redo Buffers   15556608 bytes
SQL> 




--克隆duplicate standby db
[oracle@dbprimary dbs]$ rman target / auxiliary  sys/uddippl@standby 


Recovery Manager: Release 10.2.0.1.0 - Production on Fri Dec 2 22:19:47 2016


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


connected to target database: DBLIWAI (DBID=1575389156)
connected to auxiliary database: DBLIWAI (DBID=1575389156, not open)


RMAN> exit 




Recovery Manager complete.
[oracle@dbprimary dbs]$ rman target / auxiliary  sys/uddippl@standby 


Recovery Manager: Release 10.2.0.1.0 - Production on Fri Dec 2 22:20:33 2016


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


connected to target database: DBLIWAI (DBID=1575389156)
connected to auxiliary database: DBLIWAI (not mounted)


[oracle@dbprimary dbs]$ rman target / auxiliary  sys/uddippl@standby 


Recovery Manager: Release 10.2.0.1.0 - Production on Fri Dec 2 22:20:33 2016


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


connected to target database: DBLIWAI (DBID=1575389156)
connected to auxiliary database: DBLIWAI (not mounted)


RMAN> 
RMAN> run {
2> allocate auxiliary channel c1 type disk;
3> duplicate target database for standby nofilenamecheck;
4> release channel c1;
5> }


using target database control file instead of recovery catalog
allocated channel: c1
channel c1: sid=155 devtype=DISK


Starting Duplicate Db at 2016-12-02 22:24:28


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


Starting restore at 2016-12-02 22:24:28


channel c1: restoring control file
channel c1: copied control file copy
input filename=/u01/app/oracle/standby.ctl
output filename=/u01/app/oracle/standby.ctl
Finished restore at 2016-12-02 22:24:30


sql statement: alter database mount standby database


contents of Memory Script:
{
   set newname for tempfile  1 to 
 "/u01/app/oracle/oradata/dbliwai_standby/temp01.dbf";
   switch clone tempfile all;
   set newname for datafile  1 to 
 "/u01/app/oracle/oradata/dbliwai_standby/system01.dbf";
   set newname for datafile  2 to 
 "/u01/app/oracle/oradata/dbliwai_standby/undotbs01.dbf";
   set newname for datafile  3 to 
 "/u01/app/oracle/oradata/dbliwai_standby/sysaux01.dbf";
   set newname for datafile  4 to 
 "/u01/app/oracle/oradata/dbliwai_standby/users01.dbf";
   set newname for datafile  5 to 
 "/u01/app/oracle/oradata/dbliwai_standby/example01.dbf";
   restore
   check readonly
   clone database
   ;
}
executing Memory Script


executing command: SET NEWNAME


renamed temporary file 1 to /u01/app/oracle/oradata/dbliwai_standby/temp01.dbf in control file


executing command: SET NEWNAME


executing command: SET NEWNAME


executing command: SET NEWNAME


executing command: SET NEWNAME


executing command: SET NEWNAME


Starting restore at 2016-12-02 22:24:37


channel c1: starting datafile backupset restore
channel c1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /u01/app/oracle/oradata/dbliwai_standby/system01.dbf
restoring datafile 00002 to /u01/app/oracle/oradata/dbliwai_standby/undotbs01.dbf
restoring datafile 00003 to /u01/app/oracle/oradata/dbliwai_standby/sysaux01.dbf
restoring datafile 00004 to /u01/app/oracle/oradata/dbliwai_standby/users01.dbf
restoring datafile 00005 to /u01/app/oracle/oradata/dbliwai_standby/example01.dbf
channel c1: reading from backup piece /bak/01rmg7hc_1_1
channel c1: restored backup piece 1
piece handle=/bak/01rmg7hc_1_1 tag=TAG20161202T215907
channel c1: restore complete, elapsed time: 00:00:36
Finished restore at 2016-12-02 22:25:15


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


datafile 1 switched to datafile copy
input datafile copy recid=9 stamp=929571913 filename=/u01/app/oracle/oradata/dbliwai_standby/system01.dbf
datafile 2 switched to datafile copy
input datafile copy recid=10 stamp=929571913 filename=/u01/app/oracle/oradata/dbliwai_standby/undotbs01.dbf
datafile 3 switched to datafile copy
input datafile copy recid=11 stamp=929571913 filename=/u01/app/oracle/oradata/dbliwai_standby/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy recid=12 stamp=929571914 filename=/u01/app/oracle/oradata/dbliwai_standby/users01.dbf
datafile 5 switched to datafile copy
input datafile copy recid=13 stamp=929571914 filename=/u01/app/oracle/oradata/dbliwai_standby/example01.dbf
Finished Duplicate Db at 2016-12-02 22:25:16


released channel: c1


released channel: c1


RMAN> 


RMAN> exit 




Recovery Manager complete.


执行完后,从库的状态就变成了mounted状态了。
SQL> select open_mode from v$database;


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


SQL> select status from v$instance;


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




===================================================================================


--查询primary online redo log
SQL> select group#,bytes from v$log;


    GROUP# BYTES
---------- ----------
1   52428800
2   52428800
3   52428800


SQL> 


配置standby




--创建standby logfile文件




SQL> select open_mode from v$database;


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


SQL> 
SQL> 
SQL> select group# from v$standby_log;


    GROUP#
----------
11
12
13
14




#添加备库redo日志文件


SQL> alter database add standby logfile  '/u01/app/oracle/oradata/dbliwai_standby/standbyredo01.log' size 50m;


Database altered.


SQL> alter database add standby logfile  '/u01/app/oracle/oradata/dbliwai_standby/standbyredo02.log' size 50m;


Database altered.


SQL> alter database add standby logfile  '/u01/app/oracle/oradata/dbliwai_standby/standbyredo03.log' size 50m;


Database altered.


SQL> alter database add standby logfile  '/u01/app/oracle/oradata/dbliwai_standby/standbyredo04.log' size 50m;


Database altered.


 alter database add standby logfile  '/u01/app/oracle/oradata/ec/standbyredo01.log' size 50m;






启用日志应用


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


Database altered.


验证主从同步
1,在从库上查看最大序列日志号
SQL> select max(sequence#) from v$archived_log;


MAX(SEQUENCE#)
--------------
    2


2,在主库上切换日志
SQL> alter system switch logfile;


System altered.


3,在备库上上再次查看最大序列日志号,如果后者比前者的数值大,说明同步了,负责不同步。
SQL> select max(sequence#) from v$archived_log;


MAX(SEQUENCE#)
--------------
    3


4,验证接收到的Redo是否被应用到物理备库中  
SQL> select sequence# ,applied  from v$archived_log where sequence#=3;


 SEQUENCE# APPLIE
---------- ------
3     YES
 
主从同步正常




SQL> select open_mode  from v$database;


OPEN_MODE
--------------------
MOUNTED
这个时候数据还是MOUNTED状态,还没有加载数据文件,还没有打开。


#至此物理DataGuard搭建完成




switchover切换
现在的primary主机是备库状态,standby主机是主库状态


从库的查询语句


SQL> set linesize 500
SQL> col database_role format a20
SQL> select database_role, OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;


DATABASE_ROLE     OPEN_MODE  PROTECTION_MODE   PROTECTION_LEVEL    SWITCHOVER_STATUS
-------------------- -------------------- ---------------------------------------- ---------------------------------------- ----------------------------------------
PHYSICAL STANDBY     MOUNTED  MAXIMUM PERFORMANCE   MAXIMUM PERFORMANCE    NOT ALLOWED




主库的查询语句


SQL> set linesize 500
SQL> col database_role format a20
SQL> select database_role, OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;


DATABASE_ROLE     OPEN_MODE  PROTECTION_MODE   PROTECTION_LEVEL    SWITCHOVER_STATUS
-------------------- -------------------- ---------------------------------------- ---------------------------------------- ----------------------------------------
PRIMARY     READ WRITE  MAXIMUM AVAILABILITY   RESYNCHRONIZATION    SESSIONS ACTIVE












DataGuard主备库手动switchover切换过程:




1,备库要是日志应用状态
SQL>alter database  recover managed standby database disconnect from session;


2、主库切换状态,关库,重启到nomount,开启到备库到mount状态
SQL>alter database commit to switchover to  physical standby with session shutdown;
SQL>shutdown immediate 
SQL>startup nomount 
SQL>alter database mount standby database;


3、备库切换主库
SQL>alter database commit to switchover to primary with session shutdown;
SQL>shutdown immediate 
SQL>startup 


4、现备库(原主库)开启日志应用
SQL>alter database  recover managed standby database disconnect from session;












常用的Oracle DataGuard的日常操作 
1.停止Standby
select process, status from v$managed_standby; --查看备库是否在应用日志进行恢复
alter database recover managed standby database cancel;
shutdown immediate;
 
2.切换到只读模式
-----由shutdown模式切换到只读模式-------
startup nomount;
alter database mount standby database;
alter database open read only;
-----由应用日志模式切换到只读模式-------
alter database recover managed standby database cancel; -- 取消日志应用
alter database open read only;
 
3.切换回管理恢复模式
startup nomount;
alter database mount standby database;
alter database recover managed standby database disconnect from session; -- 启动日志应用
alter database recover managed standby database using current logfile disconnect from session;
 
4.主库和备库之间角色切换
4.1 主库切换为备库
alter database commit to switchover to physical standby;
alter database commit to switchover to physical standby with session shutdown;-- 主库有会话连接的时候
shutdown immediate
startup nomount;
alter database mount standby database;
alter database recover managed standby database disconnect from session;
 
4.2 从库切换为主库
alter database commit to switchover to primary;
shutdown immediate;
startup
alter system switch logfile;
 
5.备库自动使用主库传过来的日志进行恢复
alter database recover automatic standby database;
 
6.更改保护模式
alter database set standby database to maximize protection;
alter database set standby database to maximize availability;
alter database set standby database to maximize performancen;
 
7.取消自动恢复模式
alter database recover managed standby database cancel;
alter database recover managed standby database finish;
alter database recover managed standby database finish force;






































5、启用实时同步与查询,主库的数据更新,备库的信息同步测试(待测试)




1,取消备库的自动恢复,并打开数据库












































6、测试,备库的备份和恢复


/*第1步:创建临时表空间 *


SQL> CREATE SMALLFILE TEMPORARY TABLESPACE "EC_TEMP" TEMPFILE '/u01/app/oracle/ORCL/EC_TEMP.dbf' SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED  EXTENT MANAGEMENT LOCAL;


Tablespace created.


/*第2步:创建数据表空间 */
SQL> CREATE SMALLFILE TABLESPACE "EC" DATAFILE '/u01/app/oracle/ORCL/EC.dbf' SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;


Tablespace created.


/*第3步:设置默认数据表空间 */
SQL>ALTER DATABASE DEFAULT TABLESPACE "EC";


Database altered.


/*第4步:创建用户并指定表空间 */
SQL> CREATE USER "USCMUSER" PROFILE "DEFAULT" IDENTIFIED BY "laffif$#m96oy9m1l1l#" DEFAULT TABLESPACE "EC" TEMPORARY TABLESPACE "EC_TEMP" ACCOUNT UNLOCK;


User created.


/*第5步:授权用户dba权限 */
SQL> GRANT "DBA" TO "USCMUSER";


Grant succeeded.


  
  
  

猜你喜欢

转载自blog.csdn.net/u014057054/article/details/72730837