一、 Primary 数据库配置及相关操作
源数据库
IP地址:192.168.52.201
数据库SID: sean
DB_UNIQUE_NAME:jsspre
目标数据库
IP地址:192.168.52.199
数据库SID:sean
DB_UNIQUE_NAME:jsspdg
1、 确认主库处于归档模式
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 1
Next log sequence to archive 3
Current log sequence 3
2、 将primary数据库置为FORCE LOGGING模式。通过下列语句:
3、 创建standby数据库控制文件
4、 创建primary数据库客户端初始化参数文件
注:主要此处修改项较多,为了方便,我们首先创建并修改pfile,然后再通过pfile重建spfile,你当然也可以通过alter system set命令直接修改spfile内容。
原内容:
sean.__db_cache_size=205520896
sean.__java_pool_size=4194304
sean.__large_pool_size=4194304
sean.__shared_pool_size=71303168
sean.__streams_pool_size=0
*.audit_file_dest='/u01/admin/sean/adump'
*.background_dump_dest='/u01/admin/sean/bdump'
*.compatible='10.2.0.2.0'
*.control_files='/u01/oradata/sean/control01.ctl','/u01/oradata/sean/control02.ctl','/u01/oradata/sean/control03.ctl'#Restore
Controlfile
*.core_dump_dest='/u01/admin/sean/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='sean'
*.db_recovery_file_dest='/u01/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=seanXDB)'
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=96468992
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=289406976
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/admin/sean/udump'
修改客户端初始化参数文件,增加下列内容
#add below parameter for standy database
*.DB_UNIQUE_NAME=jsspre
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(jsspre,jsspdg)'
*.LOG_ARCHIVE_DEST_2='SERVICE=JSSPDG_192.168.52.199 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=jsspdg'
*.LOG_ARCHIVE_DEST_STATE_2=DEFER
#-------- 配置standby角色的参数用于角色转换
*.FAL_SERVER=JSSPDG_192.168.52.199
*.FAL_CLIENT=JSSPRE_192.168.52.201
*.DB_FILE_NAME_CONVERT='/u01/oradata/sean','/u01/oradata/sean'
*.LOG_FILE_NAME_CONVERT='/u01/oradata/sean','/u01/oradata/sean'
*.STANDBY_FILE_MANAGEMENT=AUTO
为什么有的加星号了呢?
星号(*)是RAC中使用的,多个实例共用1参数文件,通过前缀区分。
比如两个实例名分别是ora1, ora2。那么可以这样在参数中设置各自的undo表空间:
ora1.undo_tablespace=undo1
ora2.undo_tablesapce=undo2
而*.pga_target=10000代表:
两个实例的pga_target都是10000 |
通过pfile重建spfile
5、 复制数据文件到standby服务器
注意需要复制所有数据文件,备份的控制文件及客户端初始化参数文件
复制方法:
1、SCP(Secure Copy)
scp 命令是 SSH 中最方便有用的命令了,试想,在两台服务器之间直接传送文件,仅仅用 scp 一个命令就完全解决了。你可以在一台服务器上以 root 身份运行 #scp servername:/home/ftp/pub/file1 ./ 这样就把另一台服务器上的文件 /home/ftp/pub/file1 直接传到本机器的当前目录下,当然你也可以用 #scp /tmp/file2 servername:/boot 把本机上的文件 /tmp/file2 送到另一台机器的 /boot 目录下。而且整个传送过程仍然是用 SSH 加密的。
scp就是secure copy,是用来进行远程文件拷贝的。数据传输使用 ssh,并且和ssh 使用相同的认证方式,提供相同的安全保证 。 与rcp 不同的是,scp 在需要进行验证时会要求你输入密码或口令。
最简单的应用实例 最简单的应用如下 :
scp 本地用户名@IP地址:文件名 1 远程用户名 @IP 地址 : 文件名 2
[ 本地用户名 @IP 地址:] 可以不输入 , 可能需要输入远程用户名所对应的密码 .
可能有用的几个参数 :
-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .
-C 使能压缩选项 .
-P 选择端口 . 注意 -p 已经被 rcp 使用 .
-4 强行使用 IPV4 地址 .
-6 强行使用 IPV6 地址 .
-r Recursively copy entire directories.
如——
copy 本地的档案到远程的机器上
scp /etc/lilo.conf my@
会将本地的 /etc/lilo.conf 这个档案 copy 到 ,使用者my 的家目录下。
=====================================================
例如:
copy 本地的档案到远程的机器上
scp /etc/lilo.conf k@net67.ee.oit.edu.tw:/home/k
会将本地的 /etc/lilo.conf 这个档案 copy 到 net67.ee.oit.edu.tw,使用者 k 的家目录下。
copy远程机器上的档案到本地来
scp k@net67.ee.oit.edu.tw:/etc/lilo.conf /etc
会将 net67.ee.oitdu.tw 中 /etc/lilo.conf 档案 copy 到本地的 /etc 目录下。
保持从来源 host 档案的属性
scp –p k@net67.ee.tw:/etc/lilo.conf /etc
在此必须注意使用者的权限是否可读取远程上的档案,若想知道更多关于 scp 的使用方法,可去看看 scp 的使用手册。
2、ftp
在ftp中也非常简单,只需要输入:ftp 192.168.52.199
输入用户名
密码
就可以登陆了
ftp命令详解
(另:在学习过程中,有很多不明白,如:rsh,rlogin,ssh等区别与用法等,望各位不吝赐教!))
6、 配置listener及net service names。
#vi listener.ora
加入
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME=sean)
(ORACLE_HOME = /u01/oracle)
(SID_NAME=sean)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.52.199)(PORT = 1521))
)
)
配完之后重启listener:
注意:有时候出现TNS-12541错误 请用root用户查看/etc/hosts下是否ip对应本计算机名
记着要在dg的两个主机都查看哦!!
#lsnrctl stop #lsnrctl start
#vi tnsnames.ora
加入
JSSPDG_192.168.52.199 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST=192.168.52.199)(PORT=1521))
)
(CONNECT_DATA =
(SID = sean)
(SERVER=DEDICATED)
)
)
JSSPRE_192.168.52.201 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST=192.168.52.201)(PORT=1521))
)
(CONNECT_DATA =
(SID = sean)
(SERVER=DEDICATED)
)
)
通过tnsping测试tnsnames是否正确有效:
# tnsping JSSPDG_192.168.52.199
...
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.201)(PORT = 1521)) (CONNECT_
DATA = (SERVER = DEDICATED) (SERVICE_NAME = sean)))
OK (30 毫秒)
#tnsping JSSPRE_192.168.52.201
...
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.199)(PORT = 1521)) (CONNECT_
DATA = (SERVER = DEDICATED) (SERVICE_NAME = sean))) OK (10 毫秒)
二、 Standby 数据库配置及相关操作
在主库:
solaris下oracle默认的位置是$ORACLE_HOME/dbs目录,默认的文件名是orapwSID,对于别的文件名是不认的。
orapwd file=/u01/oracle/dbs/orapwsean password=verysafe entries=30
复制到备库。
orapwd详解
创建密码文件,注意保持sys密码与primary数据库一致。
5、 修改初始化参数文件
增加下列参数:
*.LOG_ARCHIVE_DEST_1='LOCATION=/u01/oradata/sean/archive'
*.db_unique_name=jsspdg
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(jsspre,jsspdg)'
*.LOG_ARCHIVE_DEST_2='SERVICE=JSSPRE_192.168.52.201 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=jsspre'
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_SERVER=JSSPRE_192.168.52.201
*.FAL_CLIENT=JSSPDG_192.168.52.199
注意同时修改*_dest的路径。
通过该pfile创建spfile
6、 启动standby到mount
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1289484 bytes
Variable Size 62915316 bytes
Database Buffers 96468992 bytes
Redo Buffers 7098368 bytes 数据库装载完毕。
7、 启动redo应用
SQL> alter database recover managed standby database using current logfile disconnect from session;
注意这个时候要看aler警告文件,等出现Mem# 0 errs 0: /u01/oradata/sean/stdREDO02.LOG
8、 查看同步情况
首先连接到primary数据库
SQL> show parameter instance_name;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string jssweb
SQL> alter system switch logfile;
系统已更改。
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
-------------- 51
连接到standby数据库
SQL> show parameter instance_name;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string jsspdg
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
-------------- 51
接收归档文件
在主库
JSSPRE>alter system set log_archive_dest_state_2=enable;
9、 暂停应用
通过下列语句暂停redo应用。
注意,此时只是暂时redo应用,并不是停止Standby数据库,standby仍会保持接收只不过不会再应用接收到的归档,直到你再次启动redo应用为止。
SQL> alter database recover managed standby database using current logfile disconnect from session; alter database recover managed standby database using current logfile disconnect from session * 第 1 行出现错误: ORA-38500: USING CURRENT LOGFILE option not available without stand
这个错误说明,在standby库没有standby logfile,在maxmize pretection,maxmize availability中必须 要有standby logfile,为了避免数据的损失最少,maxmize performance 也最好创建standby logfile,考虑角色切换 primary库也要创建standby logfile,
standby logfile创建的要求, 与primary的redo logfile的大小相同,个数要至少多一个
SQL> shutdown immeidate; SP2-0717: 非法的 SHUTDOWN 选项 SQL> shutdown immediate; ORA-01109: 数据库未打开
已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup mount; ORACLE 例程已经启动。
Total System Global Area 612368384 bytes Fixed Size 1250428 bytes Variable Size 167775108 bytes Database Buffers 436207616 bytes Redo Buffers 7135232 bytes 数据库装载完毕。
SQL> select member from v$logfile;
MEMBER --------------------------------------------------------------------------------
/u01/oradata/sean/redo03.log
/u01/oradata/sean/redo02.log
/u01/oradata/sean/redo01.log
SQL> alter database add standby logfile group 4 '/u01/oradata/sean/stdREDO01.LOG' size 50m;
数据库已更改。
SQL> alter database add standby logfile group 5 '/u01/oradata/sean/stdREDO02.LOG' size 50m;
数据库已更改。
SQL> alter database add standby logfile group 6 '/u01/oradata/sean/stdREDO03.LOG' size 50m;
数据库已更改。
SQL> alter database add standby logfile group 7 '/u01/oradata/sean/stdREDO04.LOG' size 50m;
数据库已更改。
现在,再启用实时应用, 就ok了!!!
SQL> alter database recover managed standby database using current logfile disconnect from session;
数据库已更改。
ORA-16004
另:
查看主库是否有错误:
select status,error from v$archive_dest where dest_id=2;
oracle警告日志文件ALERT.LOG位置
vi /u01/admin/sean/bdump/alert_sean.log
记录系统日志,比如日志切换的记录,修改系统参数等系统事件。 位置在参数background_dump_dest指定的路径下,一般为: %ORACLE_BASE%\admin\%ORACLE_SID%\bdump
background_dump_dest='/u01/admin/sean/bdump'
参考:
注:关机后重启,需重启listener
查看进程的活动状态
select PROCESS ,CLIENT_PROCESS,SEQUENCE# ,STATUS from v$managed_standby;
新建、删除表空间等要看参数standby_file_management
查看物理standby数据库未接收的日志文件
SQL> select a.thread#,a.sequence# from
(select thread#,sequence# from v$archived_log where dest_id=1) a
where a.sequence# not in
(select sequence# from v$archived_log where dest_id=2 and thread#=a.thread#);
THREAD# SEQUENCE#
---------- ----------
1 14
查看当前redo应用和redo传输服务的活动状态
SQL> select PROCESS,STATUS,THREAD#,SEQUENCE#,BLOCK#,BLOCKS from v$managed_standby;
PROCESS STATUS THREAD# SEQUENCE# BLOCK# BLOCKS
--------- ------------ ---------- ---------- ---------- ----------
ARCH OPENING 1 9 22529 1133
ARCH CLOSING 1 10 4097 362
LNS WRITING 1 11 1640 13
|