Oracle和KingbaseESV8R6数据库控制文件多路复用
**## 前言
数据库设计控制文件多路复用的理念和原理主要体现在提高控制文件的安全性和避免数据库单点故障的风险。
首先,控制文件在Oracle和KingbaseES数据库中扮演着非常重要的角色,它包含了数据库的结构信息、数据文件和日志文件信息以及数据库中元数据信息等。控制文件是数据库的大脑,没有控制文件或者控制文件损坏,数据库将无法正常运行。因此,保护控制文件的安全性至关重要。
其次,控制文件多路复用的原理是在数据库服务器上将控制文件存放在多个磁盘分区或者多块硬盘上,当然如果Oracle数据库使用ASM管理数据库,一般将多个控制文件存放在不同磁盘组上。当数据库需要更新控制文件时,它会同时更新多个控制文件。这样,当其中一个控制文件出现损坏时,DBA可以使用其他未损坏的控制文件来启动数据库,从而避免了停机现象的产生。
只要将控制文件多路复用在多块硬盘上,由于硬盘同时损坏的概率相对较小,控制文件同时损坏的风险也会大大降低。这就在很大程度上提高了控制文件的安全性,从而提高了数据库的安全性。
Oracle数据库控制文件多路复用步骤
案例以集群为例
检查control file配置
SQL> select value control_files from v$parameter where name = 'control_files';
CONTROL_FILES
--------------------------------------------------------------------------------
+DATADG/uu/control01.ctl, +DATADG/uu/control02.ctl
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
+DATADG/uu/control01.ctl
+DATADG/uu/control02.ctl
SQL> show parameter cluster;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cluster_database boolean TRUE
cluster_database_instances integer 2
cluster_interconnects string
关闭两个节点
srvctl stop database -d uu -o immediate
在其中一个节点上启动rman
[oracle@node1 ~]$ rman target /
将数据库启动到nomount状态下
RMAN> startup nomount;
采用restore拷贝一份controlfile到新路径
RMAN> restore controlfile to '+DATADG/uu/control03.ctl' from '+DATADG/uu/control01.ctl';
说明:'+DATADG/uu/control03.ctl'是拷贝的新的控制文件,
如果asm自动管理的方式,可能asm实例会重新命名控制文件。
查看控制文件
su - grid
asmcmd
ASMCMD> cd +DATADG/uu
ASMCMD> ls
control01.ctl
control02.ctl
control03.ctl
sqlplus中修改控制文件路径,修改完成后,关闭数据库
su - oracle
sqlplus / as sysdba
SQL> alter system set control_files='+DATADG/uu/control01.ctl','+DATADG/uu/control02.ctl','+DATADG/uu/control03.ctl' scope=spfile sid='*';
SQL> shutdown immediate;
启动数据库
srvctl start database -d uu
验证控制文件
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
+DATADG/uu/control01.ctl
+DATADG/uu/control02.ctl
+DATADG/uu/control03.ctl
KingbaseES数据库控制文件多路复用步骤
control_file_copy
这个参数用来制作一个或多个sys_control的副本。control_file_copy是一个空字符 串(默认)。
最多设置八个副本,副本之间用“;”分隔
select * from sys_settings where name='control_file_copy';
context字段显示kingbase,表示这个参数只能在kingbase.conf文件中或在服务器启动参数上设置。如果修改了control_file_copy的值,数据库实例必须重启才能生效
先设置两个控制文件副本
alter system set control_file_copy='/opt/Kingbase/ES/V8/copy_file;/home/kingbase2/copy_file1';
把控制文件分别拷贝到参数中设置的两个路径位置并改名,然后重启数据库服务
[kingbase2@localhost ~]$ sys_ctl start
[kingbase2@localhost ~]$ ksql -Usystem test
ksql (V8.0)
Type "help" for help.
test=# show control_file_copy ;
control_file_copy
----------------------------------------------------------
/opt/Kingbase/ES/V8/copy_file;/home/kingbase2/copy_file1
(1 row)
现在已经设置好了控制文件多路复用
模拟控制文件损坏并恢复
首先关闭数据库实例
[kingbase2@localhost global]$ sys_ctl stop
waiting for server to shut down.... done
server stopped
修改控制文件名字模拟被删除
[kingbase2@localhost global]$ mv sys_control sys_conbak
启动数据库实例,这里提示控制文件已经定位不到
[kingbase2@localhost global]$ sys_ctl start
waiting for server to start....kingbase: could not find the database system
Expected to find it in the directory "/opt/Kingbase/ES/V8/data",
but could not open file "/opt/Kingbase/ES/V8/data/global/sys_control": No such file or directory
stopped waiting
sys_ctl: could not start server
Examine the log output.
我们把之前备份的控制文件恢复后再启动数据库
[kingbase2@localhost global]$ cp /opt/Kingbase/ES/V8/copy_file ./sys_control
[kingbase2@localhost global]$ sys_ctl start
[](javascript:void(0)😉
总结
1、原则上控制文件需要备份,再生产数据库上控制文件多路复用配置必须使用,以防止控制文件损坏或误删除后,数据库不可用。
2、控制文件镜像放在不同磁盘上,以实现其最大冗余,尽量设置两个以上的控制文件镜像且保证文件镜像完全一致。
3、如果控制文件备份到不同磁盘上,而磁盘间需要消耗网络资源,这时候需要注意在业务系统繁忙期间会频繁更新控制文件,很可能在同步控制文件时因为网络瓶颈影响数据库运行,所以建议控制文件备份到本地的不同磁盘上。**
KINGBASE研究院