ORACLE主从库

ORACLE主从库
1.     基础设置:介绍Oracle主从配置的基本环境和前提条件。
2.     详细步骤:逐步讲解配置过程,包括每个命令的详细说明。
3.     常见问题及解决方案:分享在配置过程中可能遇到的问题及其解决方法。
4.     后续维护和管理:提供主从数据库维护和管理的建议和技巧。
基础配置准备
开库顺序 先启备库,再启主库(启动监听,打开告警日志)
关库顺序 先关主库再关备库
·        查看数据库版本
主库ipxxx.xxx.xxx.xxx
备库ipxxx.xxx.xxx.xxx
查看数据库版本,必须是企业版否则不支持oracle data guardSQL>select * from v$version;
备库只安装软件
file:///C:/Users/john/AppData/Local/Temp/msohtmlclip1/01/clip_image001.jpg
·        确保备库安装路径、实例名与主库完全一致,避免同步出错
·        一、主库配置
1、在/oracl11下创建interlib文件夹(自定义文件夹名),在创建文件夹log
日志文件路径:'logUrl=E:\oracl11\interlib\log'
控制文件路径:'standbyUrl=E:\oracl11\interlib'
2、开启归档模式
# 在主库上启动数据库到mount模式,开启归档模式与force logging
sqlplus / as sysDBA
SQL>shutdown immediate;
SQL>startup mount;
修改为归档模式
SQL>alter databasearchivelog;
SQL>alter database open;
设置强制归档模式
SQL> alter database forcelogging;
查看命令:
select log_mode,force_loggingfrom v$database;
查看是否归档命令:
Archive log list ;
file:///C:/Users/john/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
3、为备库创建日志文件cleart
logUrl=E:\oracl11\interlib\log  根据实际的日志文件路径改变SQL> alter database addstandby logfile group 4 ('E:/oracl11/interlib/log/STAN04.LOG') size 50m;SQL>alter database add standby logfile group 5('E:/oracl11/interlib/log/STAN05.LOG') size 50m;SQL> alter database addstandby logfile group 6 ('E:/oracl11/interlib/log/STAN06.LOG') size 50m;
4、创建standby控制文件
SQL> alter database createstandby controlfile as 'E:\oracl11\interlib\standby.ctl';
5、导出当前数据库参数并修改
SQL> createpfile='E:/oracl11/interlib/initora.ora' from spfile;
修改相关路径,以及增加没有的参数orcl11.__db_cache_size=24293408768orcl11.__java_pool_size=134217728orcl11.__large_pool_size=134217728orcl11.__oracle_base='E:\oracl11'#ORACLE_BASEset fromenvironmentorcl11.__pga_aggregate_target=22011707392orcl11.__sga_target=32883343360orcl11.__shared_io_pool_size=0orcl11.__shared_pool_size=7918845952orcl11.__streams_pool_size=0*.archive_lag_target=1800*.audit_file_dest='E:\oracl11\admin\orcl11\adump'*.audit_trail='db'*.compatible='11.2.0.0.0'*.control_files='E:\oracl11\oradata\orcl11\control01.ctl','E:\oracl11\flash_recovery_area\orcl11\control02.ctl'*.db_block_size=8192*.db_cache_size=536870912*.db_domain=''*.DB_FILE_NAME_CONVERT='E:\oracl11\oradata\orcl11','E:\oracl11\oradata\orcl11'*.db_name='orcl11'*.db_recovery_file_dest='E:\oracl11\flash_recovery_area'*.db_recovery_file_dest_size=4102029312*.db_unique_name='primary'*.diagnostic_dest='E:\oracl11'*.dispatchers='(PROTOCOL=TCP)(SERVICE=orcl11XDB)'*.fal_client='standby'*.fal_server='primary'*.log_archive_config='DG_CONFIG=(primary,standby)'*.log_archive_dest_1='LOCATION=E:\oracl11\interlib\log\VALID_FOR=(all_logfiles,all_roles) db_unique_name=primary'
设置为异步复制模式async*.log_archive_dest_2='service=standby arch asyncvalid_for=(online_logfiles,primary_role)db_unique_name=standby'*.log_archive_dest_state_1='enable'*.log_archive_dest_state_2='enable'*.log_archive_format='%t_%s_%r.dbf'*.LOG_FILE_NAME_CONVERT='E:\oracl11\interlib\log','E:\oracl11\interlib\log'*.memory_target=54828990464*.open_cursors=300*.processes=30000*.remote_login_passwordfile='EXCLUSIVE'*.sessions=3350*.standby_file_management='auto'*.undo_tablespace='UNDOTBS1'
6、重新加载配置启动服务
停止服务
SQL> shutdown immediate;
使用新参数文件启动数据库SQL> startuppfile='E:\oracl11\interlib\initora.ora' nomount;
创建新的 spfile 文件
SQL> create spfile frompfile='E:\oracl11\interlib\initora.ora';
停止服务
SQL> shutdown immediate;
启动服务
SQL> startup;
7、创建密码文件
如果有此步,存在,密码设置为:mstchina*2022密码文件可不操作
DOS窗口执行,不需要登录sqlplus,路径不能加引号,否则会报opw-00001错误    orapwdfile=E:\oracl11\product\11.2.0\dbhome_1\database\PWDorcl11.orapassword=mstchina*2022 entries=10# 密码文件存放路径:密码文件存放路径:passwordUrl=E:\oracl11\product\11.2.0\dbhome_1\database\PWDorcl11.ora#注意密码文件命名规则.ora命名规则为PWD+sid,我这里的sidorcl11,所以为PWDorcl11,不然会出现远程登录权限不足
8、配置监听和访问服务
修改 listener.ora# listener.ora Network Configuration
File:E:\oracl11\product\11.2.0\dbhome_1\network\admin\listener.ora# Generated byOracle configuration tools.
SID_LIST_LISTENER=  (SID_LIST =    (SID_DESC =      (SID_NAME = CLRExtProc)      (ORACLE_HOME =E:\oracl11\product\11.2.0\dbhome_1)     (PROGRAM = extproc)      (ENVS ="EXTPROC_DLLS=ONLY:E:\oracl11\product\11.2.0\dbhome_1\bin\oraclr11.dll")    )
添加SID_DESC   (SID_DESC =       (GLOBAL_DBNAME =orcl11)      (ORACLE_HOME =E:\oracl11\product\11.2.0\dbhome_1)     (SID_NAME = orcl11)    )  )
LISTENER=  (DESCRIPTION_LIST =    (DESCRIPTION =      (ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1521))      (ADDRESS = (PROTOCOL =TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))   )  )
ADR_BASE_LISTENER= E:\oracl11

修改tnsname.ora文件
tnsnames.ora NetworkConfiguration File:E:\oracl11\product\11.2.0\dbhome_1\network\admin\tnsnames.ora# Generated byOracle configuration tools.
ORACLR_CONNECTION_DATA=  (DESCRIPTION =    (ADDRESS_LIST =      (ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1521))    )    (CONNECT_DATA =      (SID = CLRExtProc)      (PRESENTATION = RO)    )  )
orcl11=  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = WIN-QEDP6N8PVGK)(PORT= 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = orcl11)    )  )增加主库配置
PRIMARY =     (DESCRIPTION =     (ADDRESS_LIST =         (ADDRESS = (PROTOCOL = TCP) (HOST = xxx.xxx.xxx.xxx)(PORT = 1521))    )    (CONNECT_DATA =         (SERVICE_NAME = orcl11)    ))
增加备库配置STANDBY=    (DESCRIPTION =     (ADDRESS_LIST=         (ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx) (PORT = 1521))   )    (CONNECT_DATA =         (SERVICE_NAME = orcl11)    ))

9、测试监听
停止服务SQL> shutdown immediate;
SQL> startup mount;
alter database open是数据库处于mount状态,从mount状态打开数据库的命令。
SQL> alter database open;
DOS窗口执行,不需要登录sqlpluslsnrctl stoplsnrctl start
测试配置是否正确SQL> sqlplus sys/mstchina*2022@primary as sysdba
PS:若连接失败,检查防火墙设置或者ping下IP地址是否正常。
10、关闭主数据库
SQL> shutdown immediate;
PS:在配置备库前,需要关闭主数据库,以免产生其他的log
二、备库配置
1、拷贝数据到备库
主库和备库创建 E:\oracl11\interlib\tmp 文件夹,并把interlib其余目录也拷贝过去
将主库oracle目录下的oradata文件夹下内容复制到备库相同目录
将E:\oracl11 目录下的admin,cfgtollogs,diag,flash_recover_area目录以及密码文件(‘E:\oracl11\product\11.2.0\dbhome_1\database\PWDorcl11.ora’)拷贝到备用库的相同路径。可直接覆盖
将standby.ctl文件拷贝到备库的数据文件夹内(E:\oracl11\oradata\orcl11\)和E:\oracl11\flash_recovery_area\orcl11\下。在两个路径下将文件复制为control01.ctl,control02.ctl。
将主库的listener.ora和tnsname.ora拷贝到备库相同路径,并修改linstener.ora的ip为备库ip(‘E:\oracl11\product\11.2.0\dbhome_1\NETWORK\ADMIN’)
LISTENER =  (DESCRIPTION_LIST =    (DESCRIPTION =      (ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1521))      (ADDRESS = (PROTOCOL =TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))   ))
2、备库新建实例
备库新建实例,如果备库也安装了数据库,实例也是orcl11这步可跳过
在备库上注册oracle实例到服务中,DOS下执行oradim -new -sid orcl11lsnrctl start
3、修改备库参数并创建实例
将从主库拷贝的 E:\oracl11\interlib\initora.ora修改#下面是要修改的地方orcl11.__db_cache_size=24293408768orcl11.__java_pool_size=134217728orcl11.__large_pool_size=134217728orcl11.__oracle_base='E:\oracl11'#ORACLE_BASEset fromenvironmentorcl11.__pga_aggregate_target=22011707392orcl11.__sga_target=32883343360orcl11.__shared_io_pool_size=0orcl11.__shared_pool_size=7918845952orcl11.__streams_pool_size=0*.archive_lag_target=1800*.audit_file_dest='E:\oracl11\admin\orcl11\adump'*.audit_trail='db'*.compatible='11.2.0.0.0'*.control_files='E:\oracl11\oradata\orcl11\control01.ctl','E:\oracl11\flash_recovery_area\orcl11\control02.ctl'*.db_block_size=8192*.db_cache_size=536870912*.db_domain=''*.DB_FILE_NAME_CONVERT='E:\oracl11\oradata\orcl11','E:\oracl11\oradata\orcl11'*.db_name='orcl11'*.db_recovery_file_dest='E:\oracl11\flash_recovery_area'*.db_recovery_file_dest_size=4102029312*.db_unique_name='standby'*.diagnostic_dest='E:\oracl11'*.dispatchers='(PROTOCOL=TCP)(SERVICE=orcl11XDB)'*.fal_client='primary'*.fal_server='standby'*.log_archive_config='DG_CONFIG=(primary,standby)'*.log_archive_dest_1='LOCATION=E:\oracl11\interlib\log\VALID_FOR=(all_logfiles,all_roles) db_unique_name=standby'*.log_archive_dest_2='service=primaryarch async valid_for=(online_logfiles,primary_role)db_unique_name=primary'*.log_archive_dest_state_1='enable'*.log_archive_dest_state_2='enable'*.log_archive_format='%t_%s_%r.dbf'*.LOG_FILE_NAME_CONVERT='E:\oracl11\interlib\log','E:\oracl11\interlib\log'*.memory_target=54828990464*.open_cursors=300*.processes=30000*.remote_login_passwordfile='EXCLUSIVE'*.sessions=3350*.standby_file_management='auto'*.undo_tablespace='UNDOTBS1'

使用新参数文件建立备库实例
SQL> startup nomountpfile='E:\oracl11\interlib\initora.ora';SQL> create spfile frompfile='E:\oracl11\interlib\initora.ora';SQL> shutdown immediate;
(此步骤可能会报错 01507,暂时忽略)
SQL> startup nomount;
此时登录 sqlplus会报错:ORA-12560: TNS: 协议适配器错误
解决方案如下:
·        检查OracleOraDb11g_home1TNSlistener服务是否存在,如果存在看看有没有启动该服务,如果不存在,在E:\oracl11\product\11.2.0\dbhome_1\BIN路径下的emca.bat双击启动
·        打开环境变量:属性–高级–环境变量—系统变量–新建,变量名=oracle_sid,变量值=XXX,XXX就是你的 database SID,我这里sid是orcl11。
三、主库执行相关语句
1、建立主库备份
在备库执行,DOS下执行sqlplus / as sysdbaSQL> startup;
复制主库,使用RMAN建立备份,DOS下执行rman target /RMAN> backup full databaseformat='E:\oracl11\interlib\tmp\FOR_STANDBY_%u%p%s,RMN' include currentcontrolfile for standby;
将当前archivelog归档,执行sql语句RMAN> sql 'alter system archive log current';
主库处于mountnomount状态时会出现错误,主语sql后的空格
2、复制数据库
复制数据库;将主库E:\oracl11\interlib\tmp下产生的的备份集拷贝到备库的相同路径下
拷贝完成后在主库刚才的RMAN中执行,注意这时备库需要处于nomount状态RMAN> connect auxiliary sys/mstchina*2022@standby  RMAN> duplicate target database forstandby nofilenamecheck;
执行完后会在备库130 E:\ORACL11\ORADATA目录出现一些DBF文件
3、配置库为备用库模式
启动备用数据库为挂载备库模式
SQL>startup nomount;
SQL>alter database mountstandby database;
可能会报错 01100不管#在备用服务器上启动日志传送服务SQL>alter database recover managed standby databasedisconnect from session;
SQL>shutdown immediate;
SQL>startup;
四、检查测试
1、状态查看测试
主库备库分别执行如果APPLIED 列的值为 yes,表示重做应用成功SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BYSEQUENCE#;
或者查看切换归档,归档日志记录会+1select max(sequence#) from v$archived_log;altersystem switch logfile;select max(sequence#) from v$archived_log;
2、日志查看测试
主库上执行(手动归档日志,手动同步)alter system switch logfile;
通过select name from v$archived_log;
可以看到主库和备库都增加了一个log文件(.DBF)
3、查看主备库状态
执行sql语句selectopen_mode,protection_mode,database_role,switchover_status from v$database;
五、DG切换
主库执行# 先将主库切换成备库,然后将原主库启动到物理库的状态alter database commit toswitchover to physical standby with session shutdown;
关闭主库shutdown immediate;
开数据库nomountstartup nomount;
更改主库为备库alter database mount standby database;alter databaserecover managed standby database disconnect from session;
如果配置了 standby redo log 并需要启用实时同步则执行以下代码alter database recover managed standby database usingcurrent logfile disconnect from session;
备库执行,switchoverprimary
更改备库为主库alter database commit to switchover to primary withsession shutdown;
如果备库还有未应用的日志则执行alter database recover managed standby databasedisconnect from session;shutdown immediate;startup
六、DG切换后再恢复最初
即原主库切换为备库,再从备库切换为主库
开库顺序先启备库,再启主库(启动监听,打开告警日志)
关库顺序先关主库再关备库lsnrctl stoplsnrctl start
1、主库操作
登录原主库rman target /RMAN> connect auxiliarysys/123.com@standbyRMAN> duplicate target database for standbynofilenamecheck;
2、备库stnadby
在备库执行sqlplus / as sysdbaSQL>alter database mount standbydatabase;
可能会报错 01100不管SQL>alter database recovermanaged standby database disconnect from session;
3、状态监测
或者查看切换归档,归档日志记录会+1SQL>select max(sequence#) fromv$archived_log;SQL>alter system switch logfile;
SQL>select max(sequence#)from v$archived_log;
4、复制模式切换
异步复制,主库上操作**## 设置归档目的地参数(LOG_ARCHIVE_DEST_n**SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby_db_nameASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=standby_db_unique_name';
设置日志传输服务(Log Transport ServicesSQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby_db_name LGWR ASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=standby_db_unique_name';
确认配置SQL> SHOW PARAMETER LOG_ARCHIVE_DEST;
检查输出中的LOG_ARCHIVE_DEST_n参数值,确保它们包含ASYNC关键字。

同步复制,主库上操作## 设置归档目的地参数(LOG_ARCHIVE_DEST_nSQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby_db_nameSYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=standby_db_unique_name';
设置同步复制使用LGWR SYNC模式,它指示日志写入器进程(Log Writer Process)以同步方式传输重做日志SQL> ALTER SYSTEM SETLOG_ARCHIVE_DEST_2='SERVICE=standby_db_name LGWR SYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=standby_db_unique_name';## 确认配置SQL>SHOW PARAMETER LOG_ARCHIVE_DEST;
检查输出中的LOG_ARCHIVE_DEST_n参数值,确保它们包含SYNC关键字。
七、常见错误处理办法
1、ORA-10456
        
错误号
      
错误描述
  
   
ORA-01507
  
数据库未安装
可忽略不处理
2、ORA-10456
        
错误号
      
错误描述
  
   
ORA-10456
  
无法打开备用数据库;媒体恢复会话可能正在进行中
解决办法alter database recover managed standby database cancel;alter database open; alter database recover managed standby database usingcurrent logfile disconnect ;
3、ORA-01031
        
错误号
      
错误描述
  
   
ORA-01031
  
权限不足
解决方法:检查登录的sid密码文件是否存在,或者命名规则是否正确,注意密码文件命名规则.ora命名规则为PWD+sid,我这里的sid为orcl11,所以为PWDorcl11,不然会出现远程登录权限不足
4、ORA-01031
        
错误号
      
错误描述
  
   
ORA-01031
  
权限不足
解决方法:检查登录的sid密码文件是否存在,或者命名规则是否正确,注意密码文件命名规则.ora命名规则为PWD+sid,我这里的sid为orcl11,所以为PWDorcl11,不然会出现远程登录权限不足
5、ORA-01110
        
错误号
      
错误描述
  
   
ORA-01110
  
数据文件 1:  'E:\ORACL11\ORADATA\ORCL11SYSTEM01.DBF'
解决方法:一般情况是因为数据文件不存在,可通过重新主库备份,可参考以下命令
在备库执行,DOS下执行sqlplus / as sysdbaSQL>startup;
复制主库,使用RMAN建立备份,DOS下执行rman target /RMAN> backup full databaseformat='E:\oracl11\interlib\tmp\FOR_STANDBY_%u%p%s,RMN' include currentcontrolfile for standby;# 将当前archivelog归档,执行sql语句RMAN> sql 'alter systemarchive log current'; RMAN> connect auxiliary sys/mstchina*2022@standby  RMAN> duplicate target database forstandby nofilenamecheck;# 执行完后会在备库130 E:\ORACL11\ORADATA目录出现一些DBF文件
6、ORA-02232
        
错误号
      
错误描述
  
   
ORA-02232
  
???MOUNT  ??
解决办法主库生成的standby.ctl控制文件拷贝到initora.ora中控制文件指定的地方,再重新使用initora.ora nomount启动数据库即可,对于备库原有的control01.ctl文件进行覆盖,必须保证主库和备库的control01文件一致。
可参考前面的standby.ctl流程,备库需要复制standby.ctl到具体位置,并修改名字将standby.ctl文件拷贝到备库的数据文件夹内(E:\oracl11\oradata\orcl11\)和E:\oracl11\flash_recovery_area\orcl11\下。在两个路径下将文件复制为control01.ctl,control02.ctl
7、ORA-01090
        
错误号
      
错误描述
  
   
ORA-01090
  
过程中关闭-不允许连接
解决办法再开一个会话执行shutdown abortstartupshutdown immediate
8、ORA-01100
可忽略不处理
9、ORA-01153
        
错误号
      
错误描述
  
   
ORA-01153
  
激活了不兼容的介质恢复
解决办法再开一个会话执行shutdown abortstartupshutdown immediate

标签: 暂无标签
coco-klz

写了 3 篇文章,拥有财富 36,被 0 人关注

转播转播 分享分享 分享淘帖
回复

使用道具

成为第一个吐槽的人

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈