知识大全 Linux9i下Dataguard配置
Posted 数据库
篇首语:学习如钻探石油,钻得愈深,愈能找到知识的精髓。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Linux9i下Dataguard配置相关的知识,希望对你有一定的参考价值。
Linux9i下Dataguard配置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
环境 os: linux oracle: oracle iprimary: standby: (主副主机都是两台普通的pc主机)第一部分 oracle i 在linux 上的安装 本来我不想写这方面的东东 但是对比oracl i在solaris 下和在linux下安装 oracle i 在linux 上的安装真的是要麻烦很多 下面我把我遇到的问题(好像也是大部分oracle初学者安装时遇到的问题)简要的说一下 oracle i 在linux 上的安装也折腾了我好几个月 )运行runinstaller的时候报错 bash b$ /runInstaller bash b$ Initializing Java Virtual Machine from /tmp/OraInstall _ PM/jre/bin/java Please wait /tmp/OraInstall _ PM/jre/bin/i /native_threads/java: error while loading shared libraries: libstdc++ libc so : cannot open shared object file: No such file or directoryOracle Net configuration Assistant Oracle Database configuration Assistant Agent configuration Assistant 三个工具的details错误信息都是 /home/oracle/jre/ /bin /lib/i /native_threads/libzip so :symbol errno version GLIBC_ not definded in file libc so with link time reference(libzip so) unable to initialize threads: cannot find class java/lang/Thread Could not create java VM 解决方法 在运行runInstaller之前做下面的步骤 export LD_ASSUME_KERNEL= ignore your kernal version 下载文件libcwait c ftp:///drepper/libcwait c (通过IE无法下载的话 就用命令行)用gcc shared o libcwait so fpic O libcwait c进行编译然后export LD_PRELOAD=/$path/libcwait so上面的方法能使Oracle Net configuration Assistant Oracle Database configuration Assistant 安装成功 修复Agent configuration Assistant不能配置成功的方法 请参考chinaunix上的在RHAS 上成功安装Oracle 作者:renxiao 运行runInstaller之后 出现安装组件的选择结果 这时点 Install 开始安装 复制文件 进度条在一点一点的增加 当安装并link完后 出现配置工具界面 agent服务不能配置成功 忽略不用管 在下面修复 DBCA NETCA HTTP都正确配置完毕哦 呵呵 下面开始修复错误 其实要是把各个界面抓取下来就更好了 安装p _ _LINUX zip补丁 此补丁也是从下下载 同时要下载一个opatch软件包 p _ _GENERIC zip 它主要是用来悠agent服务不能启动的错误 过程如下 [quote: f a]su oracle $ cp p _ _GENERIC zip /tmp $ cd /tmp $ unzip p _ _GENERIC zip $ export PATH=$PATH:/tmp/OPatch $ export PATH=$PATH:/sbin # the patch needs fuser which is located in /sbin $ unzip p _ _LINUX zip $ cd $ opatch apply [/quote: f a]补丁修复完成 需要relinked一个 mk文件 $ cd $ORACLE_HOME/neork/lib $ make f ins_oemagent mk install 现在在运行agentctl start 看是不是可以成功运行agent服务了啊 可以用stop status来停止此服务或者检查服务的状态 在这个成功之后 居然不能启动Oracle 说是不能找到初始化文件 没办法 我用dbca先删除了原来安装时建立的库 再重新建立了数据库 运行dbca来创建数据库 呵呵 一路畅通 完成数据库的安装 希望你也能成功安装 运行runInstaller后 安装界面出来出现乱码export LANG=en_us 再运行runInstaller (这是最简单实用的办法)报/etc/oratab 错误如果在机器上以前安装过 再一次安装的时候如果报/etc/oratab 错误 请将/etc/oratab 清空(删除也可)cp /dev/null /etc/oratab ( )然后开始建库 当建库到 %时会出现共享内存问题 ORA : unable to attach to shared memory segment 这时需要给内核指定内存 可以 echo >/proc/sys/kernel/shmmax 或者 编辑/etc/nf kernel shmmax= 这样就可以数据库的安装 运行 要启动oracle要先运行数据库监听程序 lsnrctl start 关闭 lsnrctl stop 运行oemapp console可以打开oracle企业管理器工具 还有一些错误 可能需要修改/etc/hosts /etc/nf 请大家在google上搜一下按照网友提示的方法进行修改 另外主副主机的目录设置成一样 都将oracle用户主目录设为/home/oracle 主副主机的数据库名字都设为oracle 实例名也都设为一样 都设为oracle(申明一点 是否必须将主副主机的数据库名字实例名都设为相同 我曾在cu上发过贴子问过 好像大家都说不需要 但我们这的dba说是必须 反正我在这里设的是相同 第二步 Dataguard配置首先将主副两主机都设为归档模式 主节点备份并生成备用数据库控制文件登陆主节点 进行数据库备份 并生成备用数据库控制文件
[oracle@primary]$ sqlplus / as sysdba SQL> startupSQL> shutdown immediateSQL> exit[oracle@primary]pwd/home/oracle[oracle@primary]$ lsadmin dictionary ora jre oradata oraInventory oui product soft[oracle@primary]tar cvf oradata tar oradata[oracle@primary]$ ls l * tar rw r r oracle dba Aug : oradata tar[oracle@primary]$ sqlplus / as sysdba SQL> startupSQL> archive log list;Database log mode Archive ModeAutomatic archival Enabled Archive destination /home/oracle/oradata/primary/archiveOldest online log sequence Next log sequence to archive Current log sequence SQL> alter database create standby controlfile as /home/oracle/standby ctl ;Database altered SQL> exit[oracle@primary]
登陆备用节点(standby) ftp获得primary主机的数据库文件(即oradata tar文件) 备用控制文件(/home/oracle/standby ctl) 口令文件( $ORACLE_HOME/dbs/下的orapworacle)传到standby里的相应位置 具体步骤
在standby的/home/oracle/oradata下 原来有一个oracle的文件夹(里面是该主机下的dbf redolog文件) 再新建一个primary文件夹 将primary主机的oradata tar解开的文件全部直接(即primary不要再有文件夹)放到primary下 将刚生成的备用控制文件(/home/oracle/standby ctl)也放到primary下 在standby的ORACLE_HOME/dbs/下 先将以前的orapworacle备份一下(改个名字即可) 再将primary的$ORACLE_HOME/dbs/下的orapworacle 文件ftp放到standby的ORACLE_HOME/dbs/下 说明一下 我在查阅eygle的大作及很多人的相关文章 都没有提到这一点 但如果没做这一步的话 再后面的启动备用数据库的时候 即在[oracle@eygle primary]$ sqlplus / as sysdba SQL> startup nomount;SQL> alter database mount standby database;SQL> alter database recover managed standby database disconnect from session;这一步时就会报ORA 错误 说是Invalid passwd file 询问我们的dba 说是必须要用primary的orapworacle来替换standby的 我试过 这样做了后就OK了 所以我这在这里就把primary的orapworacle来替换standby的orapworacl也当作一步必须步骤 但我真的不能肯定这一步是否是必须的 如果不是必须的 为何我做这一步 总会报错 如果是必须的 为何eygle和其他大牛的大作里都没有提到这一步 难道是因为这个太简单吗?? 我真的是有些疑惑 如果哪位大牛看到这 请给我一个肯定的回答 我不胜感激 在standby主机的$oracle/home/admin下原来有oracle目录 现在新建primary目录 再在primary目录下新建bdump cdump udump Primary的参数文件
oracle@primary_andy $cat bash_profile# bash_profile# Get the aliases and functions#if [ f ~/ bashrc ]; then# ~/ bashrc#fi# User specific environment and startup programs#export BASH_ENV=$HOME/ bashrcPATH=$PATH:/home/oracle/product/ /bin:$oracle_home/jre/bin:/opt/SUNWspro/bin:/usr/bin:/usr/ccs/bin:/usr/ucb:/etc:/usr/local/bin:/usr/bin/saved:export PATHunset USERNAMEORACLE_OWNER=oracleORACLE_BASE=/home/oracleexport ORACLE_BASEORACLE_HOME=/home/oracle/product/ export ORACLE_HOMELANG=LC_ALL=ORACLE_SID=oracleexport ORACLE_SIDTNS_ADMIN=/home; export TNS_ADMINNLS_LANG=american_america ZHS GBK; export NLS_LANG#ORA_NLS =$Oracle_HOME/omon/nls/admin/data; export ORA_NLS CLASSPATH=$Oracle_HOME/JRE:$Oracle_HOME/jlib:$Oracle_HOME/rdbms/jlib:/opt/j sdk_nb/j sdk /binexport CLASSPATHTMPDIR=/tmp;export TMPDIRumask LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/lib/tls:/lib/i :/usr/openwin/lib:/usr/dt/libexport LD_LIBRARY_PATHexport LD_PRELOAD=/home/oracle/libcwait so;export LD_ASSUME_KERNEL= ;DISPLAY= : ;export DISPLAY;export PS = \\u@\\H $ #cat initoracle ora_primary* aq_tm_processes= * background_dump_dest= /home/oracle/admin/oracle/bdump patible= ntrol_files= /home/oracle/oradata/oracle/control ctl /home/oracle/oradata/oracle/control ctl /home/oracle/oradata/oracle/control ctl re_dump_dest= /home/oracle/admin/oracle/cdump * db_block_size= * db_cache_size= * db_domain= * db_file_multiblock_read_count= * db_name= oracle * dispatchers= (PROTOCOL=TCP) (SERVICE=oracleXDB) * fast_start_mttr_target= * hash_join_enabled=TRUE* instance_name= oracle * java_pool_size= * job_queue_processes= * large_pool_size= * log_archive_dest_ = LOCATION=/home/oracle/oradata/archivelog/ * log_archive_dest_ = service=standby mandatory reopen= * log_archive_dest_state_ = ENABLE * log_archive_format= log_%t_%s arc * log_archive_start=TRUE* open_cursors= * pga_aggregate_target= * processes= * query_rewrite_enabled= FALSE * remote_login_passwordfile= EXCLUSIVE * shared_pool_size= * sort_area_size= * star_transformation_enabled= FALSE * timed_statistics=TRUE* undo_management= AUTO * undo_retention= * undo_tablespace= UNDOTBS * user_dump_dest= /home/oracle/admin/oracle/udump
修改standby主机的initoracle ora文件(先备份) 我的initoracle ora如下 供参考
* aq_tm_processes= * background_dump_dest= /home/oracle/admin/primary/bdump patible= ntrol_files= /home/oracle/oradata/primary/standby ctl re_dump_dest= /home/oracle/admin/primary/cdump * db_block_size= * db_cache_size= * db_domain= * db_file_multiblock_read_count= * db_name= oracle * dispatchers= (PROTOCOL=TCP) (SERVICE=oracleXDB) * fast_start_mttr_target= * hash_join_enabled=TRUE* instance_name= oracle * java_pool_size= * job_queue_processes= * large_pool_size= * open_cursors= * pga_aggregate_target= * processes= * query_rewrite_enabled= FALSE * remote_login_passwordfile= EXCLUSIVE * shared_pool_size= * sort_area_size= * star_transformation_enabled= FALSE * timed_statistics=TRUE* undo_management= AUTO * undo_retention= * undo_tablespace= UNDOTBS * user_dump_dest= /home/oracle/admin/primary/udump * log_archive_format=log_%t_%s arc* log_archive_start=TRUE* STANDBY_FILE_MANAGEMENT=AUTO* log_archive_dest_ = LOCATION=/home/oracle/oradata/archivelog/ * log_archive_dest_state_ = ENABLE* fal_server= primary * fal_client= standby * DB_FILE_NAME_CONVERT=( /home/oracle/oradata/oracle /home/oracle/oradata/primary ) (主辅数据库数据文件相互转换的目录)* STANDBY_FILE_MANAGEMENT=AUTO 即可实现重命名主库的数据文件!!* LOG_FILE_NAME_CONVERT=( /home/oracle/oradata/archivelog /home/oracle/oradata/archivelog ) (主辅数据库联机日志redolog相互转换的目录)* STANDBY_ARCHIVE_DEST=/home/oracle/oradata/archivelog (从主数据库产生的archivelog传到辅数据库的目录)
配置主节点(primary主机上)的tnsnames ora文件
primary=(description= (address= (protocol=tcp) (port= ) (host= )) (connect_data= (SID=oracle)))standby=(description= (address= (protocol=tcp) (port= ) (host= )) (connect_data= (SID=oracle)))
同样 在副节点(standby) 的tnsnames ora文件 在副节点(standby)上配置listener ora文件 添加监听服务standby_listener 在相应的节里添加有关的内容
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = oracle) (GLOBAL_DBNAME = oracle) (ORACLE_HOME = /home/oracle/oradata) ) )LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = )) ) )
在主副库上启动lsnrctl bash b$ lsnrctl LSNRCTL>start # 启动监听服务
在主备节点用tnsping测试网络连通性在primary机上 bash b$ tnsping primary bash b$ tnsping standby在standby机上 bash b$ tnsping primary bash b$ tnsping standby 启动副数据库
sql> startup nomount; SQL> alter database mount standby database;Database altered SQL> alter database recover managed standby database disconnect from session;Database altered 在主节点设置归档路径SQL> alter system set log_archive_dest_ = service=standby mandatory reopen= ;System altered 定义了主库向副库传输日志# 定义归档到备用库 强制归档 重试时间 秒 # 如果定义为可选状态(optional) 那么在归档失败后不会再次尝试归档的 定义 # 为madatory状态后 如果本次归档失败 则在归档下一个日志时会再次尝试SQL> alter system switch logfile;System altered SQL> /System altered SQL> 在备用节点观察日志[oracle@eygle bdump]$ tail f alert_primary log MRP : Background Managed Standby Recovery process startedStarting datafile recovery in thread sequence Datafile : /opt/oracle/oradata/primary/system dbf Starting datafile recovery in thread sequence Datafile : /opt/oracle/oradata/primary/undotbs dbf ………………………… bash b$ mkdir /home/oracle/oradata/oracle/stdarch
主辅数据库的切换(停止主数据库 启用备用数据库)修改primary的参数文件initoracle ora(先做好备份)
增加* standby_archive_dest= /home/oracle/oradata/standbyarch * fal_server= standby * fal_client= primary * DB_FILE_NAME_CONVERT=( /home/oracle/oradata/primary /home/oracle/oradata/oracle )* LOG_FILE_NAME_CONVERT=( /home/oracle/oradata/archivelog /home/oracle/oradata/archivelog )* STANDBY_FILE_MANAGEMENT= AUTO 删除 log_archive_dest_ 参数修改standby的参数文件initoracle ora(先做好备份)增加 * log_archive_dest_ = service=primary mandatory reopen= * log_archive_dest_state_ = ENABLE 删除* STANDBY_ARCHIVE_DEST=/home/oracle/oradata/archivelog* fal_server= standby * fal_client= primary * DB_FILE_NAME_CONVERT=( /home/oracle/oradata/primary /home/oracle/oradata/oracle )* LOG_FILE_NAME_CONVERT=( /home/oracle/oradata/archivelog /home/oracle/oradata/archivelog )* STANDBY_FILE_MANAGEMENT=AUTO在primary主机上执行SQL> alter database mit to switchover to physical standby with session shutdown ;Database altered 察看primary主机上的后台日志…………………………… SQL> shutdown immediateORA : database not mountedORACLE instance shut down 以备用模式(standby)启用主数据SQL> create spfile from pfile;SQL> startup nomount;SQL>show parameter standby_file_management;SQL> alter database mount standby database;Database altered 打开备用数据库(在standby主机上执行)[oracle@standby oracle]$ sqlplus / as sysdba SQL> alter database mit to switchover to primary with session shutdown ;Database altered SQL> shutdown immediate; ORA : database not mountedORACLE instance shut downSQL>create spfile from pfile;SQL> startup; ……Database mounted Database opened SQL> select SEQUENCE# GROUP# STATUS from v$log;SQL> select sequence# group# status from v$log;SEQUENCE# GROUP# STATUS INACTIVE INACTIVE CURRENTSQL> alter system switch logfile;System altered SQL> select sequence# group# status from v$log;SEQUENCE# GROUP# STATUS CURRENT INACTIVE ACTIVE在primary主机上执行SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;Database altered 在primary主机上观察日志应用情况[oracle@primary bdump]$ tail f alert_oracle log Starting datafile recovery in thread sequence Datafile : /opt/oracle/oradata/primary/undotbs dbf Starting datafile recovery in thread sequence Datafile : /opt/oracle/oradata/primary/users dbf ……………………………………………… Media recover
现在可做一个测试 在standby主机上进行数据修改(standby主机现在做primary)
SQL> create table t as select * from dba_users;Table created SQL> alter system switch logfile; System altered 在从库上(primary主机上)以read only打开数据库 执行查询SQL> select username from t;select username from t*ERROR at line :ORA : database not open: queries allowed on fixed tables/views onlySQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;Database altered SQL> ALTER DATABASE OPEN READ ONLY;Database altered SQL> select username from t;USERNAME SYSSYSTEMDBSNMPOUTLNWMSYSSQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;Database altered
常见问题至此 主副的配置已基本完成 可做以下实验来验证配置的准确性 . 在主库上新建一个表 看修改时候能马上传到副库上 . 在主库上新建一个表空间 新增加一个datafile 看修改时候能马上传到副库上(应该是只要在副库上执行恢复模式 就能在副库上看到新建的表空间 . 在主库上新建一个临时表空间 rename datafile 均不能应用到副库上 . 应当实时察看standby库的alert文件 就能清晰明了地知道主副更新的情况 . 关于启动关闭顺序启动的时候 先从库的listener 再启动从库 再启动主库的listener 再主库关闭的时候 先关闭主库 再启动从库 i副数据库切换为主的话 将无法再切为副 主数据库也是! 也就是说 只能完成一次切换 这叫failover! i可实现主副数据库任意切换 这叫switchover 第六点我理解得有些问题 看了版主Rollingpig在itpub上的结论 觉得他说的应该是对的 现将他的陈述列在下面!Rollingpig我给个结论吧 在 i 的dataguad环境中 Switch Over 必须是Primary 正常 并且是必须Primary 主动先Switch 成 standby 然后standby 才能switch 成primary 如果需要作成primary出问题 standby 能接管的话 必须作 failover 而不是Switch Over 察看主机当前的运行状态 SQL> select name open_mode PROTECTION_MODE DATABASE_ROLE from v$database;NAME OPEN_MODE PROTECTION_MODE DATABASE_ROLE PRIMARY MOUNTED MAXIMUM PERFORMANCE PHYSICAL STANDBY 查看主数据库日志是否全部传送到副数据库 可查看v$archive_gap 更简单的方法是查看各自主机的日志归档目录的日志序号即可 . 常用的一些方法 可在副数据库上运行一些脚本 确保主数据库上的更新能及时在副数据库上得到实现 可将以下脚本放在crontab表中
oracle@standby $cat refresh (刷新脚本)ORACLE_SID=oracleORACLE_HOME=/home/oracle/product/ export ORACLE_SID ORACLE_HOMEDATE=`date +%Y%m%d `touch /home/oracle/refresh_$DATE log$ORACLE_HOME/bin/sqlplus /nolog << EOFspool /home/oracle/refresh_$DATE logconnect sys/abc as sysdbashutdown immediate;quitEOF$ORACLE_HOME/bin/sqlplus /nolog << EOF spool /home/oracle/refresh_ _$DATE logconnect sys/abc as sysdbastartup nomount pfile=$ORACLE_HOME/dbs/initoracle ora;alter database mount standby database;alter database set standby database to maximize performance;alter database recover managed standby database disconnect from session;spool offEOF oracle@standby $cat readonly (更新脚本)#!/bin/shORACLE_SID=oracleORACLE_HOME=/home/oracle/product/ export ORACLE_SID ORACLE_HOME$ORACLE_HOME/bin/sqlplus /nolog << EOFspool /home/oracle/refresh read logconnect sys/abc as sysdbarem change from recover mode to read onlyalter database recover managed standby database cancel;alter database open read only ;spool offEOF
switchover过程 把数据库切换回到主节点先将standby此时的initoracle ora恢复为以前是standby时的参数 在主节点(standby主机上)
SQL> alter database mit to switchover to physical standby;Database altered SQL> shutdown immediateORA : database not mountedstatORACLE instance shut down SQL> startup nomount pfile=/home/oracle/product/ /dbs/initoracle ora;;ORACLE instance started Total System Global Area bytesFixed Size bytesVariable Size bytesDatabase Buffers bytesRedo Buffers bytesSQL> alter database mount standby database;Database altered SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;Database altered
在备用节点(在primary主机上)先将primary此时的initoracle ora恢复为以前是primary时的参数
cha138/Article/program/Oracle/201311/17817相关参考
DATAGUARD的角色转换服务 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! DataGuar
DataGuard数据库服务器硬盘故障处理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 昨天一
Linux下Oracle10 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! DataGuard双
大神进来看下这个配置可以吃鸡吗?显卡不行,可以换个650ti或660可以最低特效吃鸡,不到二百块多块钱,我这有个闲置660求大神进来看看我这个配置可以吃鸡吗?属于中特效运行绝地求生配置,配置CPU没有
在我国的市场经济条件下,要达到优化资源配置和合理配置的目标,必须做到__
在我国的市场经济条件下,要达到优化资源配置和合理配置的目标,必须做到_____。A、以市场为基础,同时加强国家对经济的宏观调控B、完善市场体系,诵讨市场平等竞争C、通过价格传递信息及时协调生产和需求D
Wamp下虚拟机配置分为三个步骤实例如下修改Hosts文件C:WINDOWSsystemdriversetcHostsdztest 编辑wampbinapacheApacheconfextra文
Eclipse下配置swt开发环境 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 创建存储过程的
在任何情况下,市场经济都能够起到优化资源配置的作用。_____答案:错误解析:市场经济能够起到优化资源配置的作用,但并不是在任何情况下都会。题干说法过于绝对。故本题判断错误。
SpringMVC框架的高级配置(下) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 上文介绍S
Linux下MySQL的管理与配置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! MySQL服务