切换数据库 oracle数据库切换问题
今天给各位分享切换数据库的知识,其中也会对oracle数据库切换问题进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
oracle数据库切换问题
你这个属于主、备机切换
1.察看主库状态
selectswitchover_statusfromv$database;
收集主库上的临时表空间的情况,原因是备库激活后临时文件可能丢失,需要手工建上去:
colfile_nameformata40
selectfile_name,tablespace_name,bytes/1024/1024fromdba_temp_files;
FILE_NAMETABLESPACE_NAMEBYTES/1024/1024
---------------------------------------------------------------------------
/data/oradata/alihr/temp01.dbfTEMP2048
2.切换主库到standby
alterdatabasecommittoswitchovertophysicalstandby;
或:
ALTERDATABASECOMMITTOSWITCHOVERTOPHYSICALSTANDBYWITHSESSIONSHUTDOWN;
shutdownimmediate;
startupnomount;
alterdatabasemountstandbydatabase;
3.验证要被切换的standby是否接收到switchto通知
SELECTSWITCHOVER_STATUSFROMV$DATABASE;
以前的状态就是SESSIONSACTIVE,现在就变为TOPRIMARY
4.切换物理standby到主用模式,检查redolog是否创建好
ALTERDATABASECOMMITTOSWITCHOVERTOPRIMARY;
shutdownimmediate;
startup;
5.standby数据库切换成主库后,检查是否需要、对临时表空间增加临时文件:
先检查临时文件是否丢失:
colfile_nameformata60
selectfile_name,tablespace_namefromdba_temp_files;
把结果前面原主库上的临时文件进行对比,如有丢失则使用如下命令增加:
altertablespacetempaddtempfile'/data/oradata/alihr/temp02.dbf'size2048Mreuse;
正常情况下,如果db_file_name_convert参数设置正确的话,11g会自动建立tempfile
6.在新的standby机器上
altersystemsetlog_archive_dest_state_2='defer';
alterdatabaserecovermanagedstandbydatabasedisconnectfromsession;
7.检查主备库中fal参数
fal_server服务名是在standby机器的tnsnames中,指向主库,fal_client是在主库上的tnsnames中,指向standby。
fal参数只在standby机器上生效,所以在standby机器上fal_server指向主库,fal_client机器指向备库.
而主库上的fal参数虽然不生效,但为了避免主库切换成standby时,我们还要修改fal参数,所以现在就设置好,
让fal_server指向现在的standby数据库,fal_client指向自己。
8.在新的主库
altersystemsetlog_archive_dest_state_2='enable';
altersystemarchivelogcurrent;
然后到备库上检查备库机器上日志是否正常的传过来了。
9.检查和调整主备库两台机器中的crontab中的数据库备份脚本和删除归档脚本。
=================oracle11g的最大保护和最大可用模式下的切换==================
如果主库是意外宕机的,则直接把备库切换成主库:
ALTERDATABASERECOVERMANAGEDSTANDBYDATABASECANCEL;
ALTERDATABASERECOVERMANAGEDSTANDBYDATABASEFINISH;
shutdownimmediate;
connect/assysdba;
startupmount;
ALTERDATABASECOMMITTOSWITCHOVERTOPRIMARY;
shutdownimmediate;
connect/assysdba;
startupmount;
ALTERDATABASESETSTANDBYDATABASETOMAXIMIZEAVAILABILITY;
alterdatabaseopen;
注意:上面操作中是手工的把数据库重新置成MAXIMIZEAVAILABILITY,否则数据库起来后是最大性能模式。
检查数据库的角色:
selectdatabase_rolefromv$database;
原有主库启动后,如果不是硬盘坏,主库上的数据还存在,则把主库转换成standby就可以了:
主库上:
startupmount;
recoverautomaticdatabase;
ALTERDATABASECONVERTTOPHYSICALSTANDBY;
shutdownimmediate;
注意千万不要把主库打开了,否则会导致主库的SCN发生变化,无法转换成standby数据库了。
在把原先的主库转化为standby时,有时可能报如下错误:
SQL>alterdatabaserecovermanagedstandbydatabasefinish;
alterdatabaserecovermanagedstandbydatabasefinish
*
ERRORatline1:
ORA-00283:recoverysessioncanceledduetoerrors
ORA-19909:datafile1belongstoanorphanincarnation
ORA-01110:datafile1:'/opt/oracle/oradata/oratest/system01.dbf'
这里把到rman中:
listincarnationofdatabase;
resetdatabasetoincarnation1;
recoverdatabase;
resetdatabasetoincarnation2;
=========================================================
failover在物理standby的切换
1.检查standby看是否使用了standbylog
2.有standbylog,执行下面的命令
ALTERDATABASERECOVERMANAGEDSTANDBYDATABASECANCEL;
ALTERDATABASERECOVERMANAGEDSTANDBYDATABASEFINISH;
2.1没有standbylog则不执行上面的
ALTERDATABASERECOVERMANAGEDSTANDBYDATABASEFINISHSKIPSTANDBYLOGFILE;
3.切换
ALTERDATABASECOMMITTOSWITCHOVERTOPRIMARY;
3.1如果上面3步骤失败,则
ALTERDATABASEACTIVATESTANDBYDATABASE;
4.重启db
shutdownimmediate
startup
switchover的方法:
主库和物理standby的切换
1.察看主库状态
SELECTSWITCHOVER_STATUSFROMV$DATABASE;
2.切换
ALTERDATABASECOMMITTOSWITCHOVERTOPHYSICALSTANDBY;
3.原主库
shutdownimmediate;
startupnomount
alterdatabasemountstandbydatabase;
4.验证要被切换的standby是否接收到switchto通知
SELECTSWITCHOVER_STATUSFROMV$DATABASE;
增加onlineredo日志
5.切换物理standby到主
ALTERDATABASECOMMITTOSWITCHOVERTOPRIMARY;
shutdownimmediate;
startup;
6.在新的standby机器(也就是老的主库)
ALTERDATABASERECOVERMANAGEDSTANDBYDATABASEDISCONNECTFROMSESSION;
7.在新的主库
altersystemarchivelogcurrent;
========activestandbydatabase===========
当:
alterdatabaseactivatestandbydatabase;
原来的主库只能通过闪回转化成standbydatabase,但要求数据库的flashback打开。
在新主库上:
selectto_char(standby_became_primary_scn)fromv$database;
在旧主库上:
SHUTDOWNIMMEDIATE;
STARTUPMOUNT;
FLASHBACKDATABASETOSCNstandby_became_primary_scn;
ALTERDATABASECONVERTTOPHYSICALSTANDBY;
selectmax(sequence#)fromv$log_historywhereRESETLOGS_TIME=(selectmax(RESETLOGS_TIME)fromv$log_history);
实例恢复:
recovermanagedstandbydatabasedisconnectusingcurrentlogfile;
=================lgwr设置====================================
altersystemsetlog_archive_dest_3='location=/disk3/arch/bopschareopen=2MAX_FAILURE=3';
altersystemsetlog_archive_dest_state_3=alternate;
altersystemsetlog_archive_dest_1='location=/disk2/arch/bopschaalternate=log_archive_dest_3reopen=60MAX_FAILURE=5';
*.log_archive_dest_2='SERVICE=DTMRTLGWRASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=DTMRT';
alterdatabaseaddstandbylogfilegroup4('/oracle/u02/ORA10GDG/STANDBYRD01.LOG')size200M;
selectgroup#,thread#,sequence#,archived,statusfromv$standby_log;
alterdatabasesetstandbydatabasetomaximize{availability|performance|protection};
selectprotection_modefromv$database;
ORA-19527:
LOG_FILE_NAME_CONVERT='/u02/oracle/oradata/oract/','/u02/oracle/oradata/oract/'
altersystemsetlog_archive_dest_2='SERVICE=bopsteststblgwrsyncaffirm';
selectfrequency,durationfromv$redo_dest_resp_histogramwheredest_id=2andfrequency>1;
SQL>ALTERDATABASERECOVERMANAGEDSTANDBYDATABASECANCEL;
SQL>ALTERDATABASEOPEN;
SQL>ALTERDATABASERECOVERMANAGEDSTANDBYDATABASEUSINGCURRENTLOGFILEDISCONNECT;
alterdatabaseconverttosnapshotstandby;
alterdatabaseconverttophysicalstandby;
ALTERDATABASERECOVERMANAGEDSTANDBYDATABASEUSINGCURRENTLOGFILEDISCONNECT;
alterdatabasecommittoswitchovertophysicalstandby;
alterdatabaseactivatestandbydatabasefinishapply;
alterdatabaserecovermanagedstandbydatabasefinish;
旧主库转换成standby的步骤:
在新主库上:
selectto_char(standby_became_primary_scn)fromv$database;
在旧主库上:
SHUTDOWNIMMEDIATE;
STARTUPMOUNT;
FLASHBACKDATABASETOSCNstandby_became_primary_scn;
ALTERDATABASECONVERTTOPHYSICALSTANDBY;
ALTERDATABASECOMMITTOSWITCHOVERTOPRIMARYWITHSESSIONSHUTDOWN;
ALTERDATABASERECOVERMANAGEDSTANDBYDATABASEFINISHFORCE;
腾讯云数据库如何修改时区
第一,根据自建数据库的数据量、MySQL版本以及访问量等信息申请对应的云数据库实例,申请云数据库实例完成后,联系云数据库的腾讯云技术人员调整云数据库和云服务器之间的网络配置。
第二,迁移数据库:
1、使用mysqldump导出自建数据库的数据,注意记录binlog的文件和位置(如需帮助请咨询云数据库技术人员),然后使用mysql命令导入至对应的云数据库实例中。推荐使用云数据库多线程导入导出工具。
2、在自建数据库上给云数据库的同步用户授权,授权语句范例如下:
GRANT REPLICATION SLAVE,FILE ON*.* TO'replication'@'%' IDENTIFIED BY'test123';
3、在导入数据后根据备份的binlog位置和binlog文件使用change master命令配置从自建数据库到云数据库的主从同步。范例如下:
CHANGE MASTER TO MASTER_HOST='10.1.1.10',MASTER_USER='replication',MASTER_PASSWORD='test123',MASTER_LOG_FILE='mysql-bin.000012', MASTER_LOG_POS=106;
第三,迁移后数据校验:数据同步完成之后,可以使用数据抽样、对比表数量、库数量或者使用专业的对比工具确认数据是否完整。
第四,业务切换数据库:校验数据完整后,请选择适当时间来做业务的平滑切换,将业务连接的数据库切换至云数据库,切换后请务必检查自建数据库是否还有请求进来,避免出现还有请求连接到自建数据库的情况。
第五,断开自建数据库和云数据库主从同步:
1、切换后业务正常后,业务侧在云数据库上执行如下命令断开自建数据库到云数据库的主从同步。
2、断开主从同步后通知云数据库的技术人员恢复之前调整的网络。
如何迁移MySQL数据库
caching_sha2_password认证插件提供更多的密码加密方式,并且在加密方面具有更好的表现,目前MySQL8.0选用caching_sha2_password作为默认的认证插件,MySQL5.7的认证插件是MySQL_native_password。如果客户端版本过低,会造成无法识别MySQL8.0的加密认证方式,最终导致连接问题。
MySQL存储引擎现在负责提供自己的分区处理程序,而MySQL服务器不再提供通用分区支持,InnoDB和NDB是唯一提供MySQL8.0支持的本地分区处理程序的存储引擎。如果分区表用的是别的存储引擎,存储引擎必须进行修改。要么将其转换为InnoDB或NDB,要么删除其分区。通过MySQLdump从5.7获取的备份文件,在导入到8.0环境前,需要确保创建分区表语句中指定的存储引擎必须支持分区,否则会报错。
MySQL8.0的默认字符集utf8mb4,可能会导致之前数据的字符集跟新建对象的字符集不一致,为了避免新旧对象字符集不一致的情况,可以在配置文件将字符集和校验规则设置为旧版本的字符集和校验规则。
MySQL8.0启动使用的lower_case_table_names值必须跟初始化时使用的一致。使用不同的设置重新启动服务器会引入与标识符的排序和比较方式不一致的问题。
<lower_case_table_names>
https://dev.mysql.com/doc/refman/8.0/en/server-systemvariables.html#sysvar_lower_case_table_names
要避免MySQL8.0上的启动失败,MySQL配置文件中的sql_mode系统变量不能包含NO_AUTO_CREATE_USER。
从MySQL5.7.24和MySQL8.0.13开始,MySQLdump从存储程序定义中删除了NO_AUTO_CREATE_USER。必须手动修改使用早期版本的MySQLdump创建的转储文件,以删除NO_AUTO_CREATE_USER。
在MySQL8.0.11中,删除了这些不推荐使用的兼容性SQL Mode:DB2,MAXDB,MSSQL,MySQL323,MySQL40,ORACLE,POSTGRESQL,NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS。从5.7到8.0的复制场景中,如果语句使用到废弃的SQL Mode会导致复制异常。
在执行到MySQL8.0.3或更高版本的in-place升级时,BACKUP_ADMIN权限自动授予具有RELOAD权限的用户。
本文对MySQL 5.7到MySQL 8.0的升级过程中出现部分易出现问题进行整理:升级对MySQL版本的要求、升级都做了哪些内容、数据库升级做了哪些步骤以及注意事项,希望对大家版本升级有帮助。
好了,文章到此结束,希望可以帮助到大家。