• 0
  • 0
分享
  • Sybase IQ数据库恢复技术研究与实践
  • 恬恬圈 2020-02-18 14:39:45 字数 8962 阅读 2088 收藏 0

摘要

Sybase IQ列存储数据库由于查询速度快、数据压缩比高、数据加载快而广泛应用于OLAP系统中,我行一些重要系统及其历史库目前还部署在Sybase IQ数据库上。近几年随着Oracle数据库成为我行主流数据库,其他数据库(如Sybase IQ、Sybase ASE)正逐渐迁移至Oracle数据库中。本文以日常工作中一个具体案例为背景,详细介绍Sybase IQ数据库的整库异机恢复方法,通过大量测试得出Sybase IQ数据库不同版本、不同操作系统间数据迁移的可行性,希望对开发及数据服务人员有所借鉴。

关键字:Sybase IQ、DBSPACE、DBFILE、生产数据备份、数据恢复环境/脱敏环境


1、基本概念

1.1 OLAP/OLTP系统

联机分析处理OLAP(On-Line Analytical Processing)是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,提供直观易懂的查询结果。

联机事务处理OLTP(On-Line Transaction Processing)是传统的关系型数据库的主要应用,主要的特点是大量的短暂在线事务(插入、更新、删除)。

1.2 DBSPACE

数据的逻辑容器,在Sybase IQ 15中一般由一个或多个dbfile组成(功能与Oracle数据库中表空间类似),Sybase IQ 15数据库包括多个逻辑存储结构,分别是:

1. Catalog Store:存储数据库的元数据(metadata),功能类似于system、sysaux表空间。

2. Main Store:用于存储用户数据,功能类似于users表空间。

3. Temp Store:存储装载和查询操作执行期间生成的临时数据和用户定义的临时表,功能类似于temp表空间。

注:从Sybase IQ 15开始,不建议使用Main Store存放用户的业务数据,建议用户建立单独的dbspace存放业务数据。

1.3 DBFILE

存放数据的物理存储结构(功能与Oracle数据库中的datafile类似),在Sybase IQ 15中一个或多个dbfile组成一个dbspace,一个dbfile一般对应一个数据文件或裸设备。

1.4 裸设备

也叫裸分区(原始分区),是一种没有经过格式化,不被Unix/Linux通过文件系统来读取的特殊字符设备。裸设备可以绑定一个分区,也可以绑定一个磁盘。裸设备在操作系统的文件属性为c开头。


2、背景介绍

2019年初,受理了某平台基础架构升级-AIX小型机迁移项目数据申请,此次数据申请包含两个Sybase IQ数据,其中一个数据库部署在小型机AIX系统上(版本Sybase IQ 15.2),另一个部署在Linux上(版本Sybase IQ 15.4),生产数据以全库备份方法提供,需要搭建数据脱敏环境并将生产数据备份恢复至脱敏环境中,脱敏后交付测试数据给项目组进行项目迁移的具体测试工作。


3、Sybase IQ数据库恢复实践

3.1 准备工作

3.1.1 生产系统数据库结构与备份脚本查看

由于异机全库恢复需要对源生产库结构有一定的了解,首先查询得到生产系统IQ数据库的相关信息(由于列数较多,在此只列出关键字段),具体信息如下:

1> sp_iqfile
2> go
DBSpaceName  DBFileName   Path  SegmentType  RWMode   DBFileSize
IQ_SYSTEM_MAIN  IQ_SYSTEM_MAIN  /dev/raw/raw2  MAIN    RW     40G
RMSMAIN01       RMSMAIN01_file01   /dev/raw/raw1  MAIN     RW    100G
RMSMAIN01       RMSMAIN01_file02   /dev/raw/raw4  MAIN     RW    200G
RMSMAIN01       RMSMAIN01_file03   /dev/raw/raw5  MAIN     RW    200G
RMSMAIN01       RMSMAIN01_file04   /dev/raw/raw6  MAIN     RW    200G
RMSMAIN01       RMSMAIN01_file05   /dev/raw/raw7  MAIN     RW    200G
RMSMAIN01       RMSMAIN01_file06 / dev/raw/raw8  MAIN      RW      200G
IQ_SYSTEM_TEMP  IQ_SYSTEM_TEMP  /dev/raw/raw3 TEMPORARY RW    40g
IQ_SYSTEM_TEMP  IQ_SYSTEM_TEMP02 /dev/raw/raw9  TEMPORARY  RW  60g

从查询信息可以看出,该数据库共包含三个dbspace,分别为IQ_SYSTEM_MAIN、RMSMAIN01和IQ_SYSTEM_TEMP,其中RMSMAIN01用于存放该系统的业务数据,该dbspace包含6个dbfile,每一个dbfile对应一个裸设备文件,业务数据存放在具体的裸设备中;IQ_SYSTEM_TEMP包含两个dbfile文件,用于存放临时数据;IQ_SYSTEM_MAIN包括一个dbfile,用于存放用户和业务数据,但之前提到IQ15后不在建议在此dbspace中存放业务数据。

查看生产系统/etc/raw文件,内容如下:

raw2:vgsybiq/lviqsysmain01
  raw3:vgsybiq/lviqsystemp01
  raw9:vgsybiq/lviqsystemp02
  raw1:vgsybiq/lviqrmsmain01
  raw4:sdh
  raw5:sdi
  raw6:sdj
  raw7:sdk
  raw8:sdl

可以看出,一些裸设备与某一个逻辑卷关联,另外一部分与具体物理磁盘关联。

生产系统数据备份脚本为:(dba)>backup database to '/data/backup/fullbak',备份完成后将在/data/backup/目录下生成fullbak开头的备份文件。

3.1.2 脱敏环境搭建

Sybase IQ数据库恢复与Sybase ASE略有不同,不需要像Sybase ASE数据库一样搭建具体的数据库,只需安装数据库软件并配置好环境变量即可,本文将IQ软件安装在/sybiq目录下,并创建sybiq操作系统用户进行软件的安装,具体安装过程在此不在详细说明。

3.1.3 脱敏环境存储准备

IQ数据库全库异机恢复一般可以使用两种方法进行数据恢复:

1.数据的恢复路径、名称与生产一致;

2.数据的恢复路径、名称与生产系统不一致。

对于恢复路径一致的情况,首先按照3.1.1章节中查到的信息创建裸设备,注意裸设备的名称要与生产一致,大小要大于生产系统对应裸设备,建立好裸设备后注意裸设备的权限,应确保sybiq用户对裸设备可读可写。

对于路径不一致的情况,我们尝试将RMSMAIN01这个dbspace的数据恢复到文件系统/data/backup中,文件系统的大小大于3.1.1章节中查到的RMSMAIN01所包含的所有dbfile之和,并为其他两个dbspace(IQ_SYSTEM_MAIN、IQ_SYSTEM_TEMP)建立名称和大小一致的裸设备,另外确保sybiq用户对相应目录和裸设备具有可读写权限;

说明:为了便于本文说明,将文件备份统一存放在/data/backup目录下,数据恢复的文件系统目录为/data/sybiq目录。

3.2 恢复实践

3.2.1生产系统与恢复环境路径一致

首先将生产系统备份传输至恢复环境/data/backup目录下,并确保sybiq用户对备份文件有可读写权限。之后在恢复环境中使用sybiq用户启动utility server,该数据库为IQ数据库自带数据库,不需额外创建。 

start_iq -n myserver //启动命令

之后使用dba(密码默认为sql)用户身份登录到utility_db

dbisql -c "uid=dba;pwd=sql;eng=myserver;dbn=utility_db" -nogui

登陆后执行具体恢复工作

(dba)>restore database '/data/sybiq/rmsiqdb.db' from '/data/backup/fullbak'

其中rmsiqdb.db为前面章节提到的IQ数据库中存放元数据的dbspace,名称和路径可以按照需求自行修改,from关键字后的目录为生产备份存放的目录,fullbak为备份文件的名称,该名称应与备份时名称保持一致。

可通过/sybiq/IQ-15_4/logfiles中类似于“myserver.0002.stderr”格式的文件查看恢复进度,恢复完成后通过stop_iq命令关闭utility_db。

之后进入/data/sybiq目录下执行dblog -r -t rmsiqdb.log rmsiqdb.db,最后将生产库中rmsiqdb.cfg文件进行修改后传输至/data/sybiq目录下后执行:start_iq @rmsiqdb.cfg rmsiqdb.db启动数据库,至此,IQ数据库的恢复完成。

下面列出rmsiqdb.cfg文件中常用参数及其解释:

  -n  EHR_IQ_SERV                                      SERVER名

  -x  tcpip{port=5300}                                 通讯协议(端口)

  -cl  1024m                              元数据库的最小cache的大小

  -ch  2048m                              元数据库的最大cache的大小

  -gc  20                                      检查点时间间隔(分钟)

  -gd  dba                           设置启动和停止数据库所需的权限

  -gk  dba                       设置启动和停止数据库服务所需的权限

  -gl  all                              设置装载、卸载数据所需的权限

  -gm  60                                               并发用户数

  -ti  4400                                   客户端自动中断时间 min

  -tl  300                                      网络超时时间间隔(秒)

  -gp  4096                           >=page size,元数据表空间页大小

  -iqmc 4096                                  数据cache,参考值:4G

  -iqtc 8192                                         临时高速缓存大小

  -iqmsgsz 512                            iq消息日志文件大小

  -iqmsgnum 1                                      文件个数

  -iqnumbercpus 8                                   CPU核心数

注:使用start_iq -?可以查看各参数意义和默认值。

3.2.2 生产库与恢复环境路径不一致情况

从3.2.1章节可以看出,对于生产库与恢复环境恢复路径一致的情况,IQ数据库的恢复较为简单,只需在恢复环境中建立与生产环境完全一致的裸设备或文件系统即可,但在具体工作中如果遇到路径不一致的情况,恢复工作如何进行呢?本节将对这种情况进行介绍。

前面的步骤和路径一致时完全一致,也需要启动并连接utility_db,之后开始数据恢复:

start_iq -n myserver
  (dba)>dbisql -c "uid=dba;pwd=sql;eng=myserver;dbn=utility_db" -nogui

之后开始恢复

restore database '/data/sybiq/rmsiqdb.db' from '/data/backup/fullbak’' 
rename RMSMAIN01_file01 to '/data/sybiq/RMSMAIN01_file01.iq' 
rename RMSMAIN01_file02 to '/data/sybiq/RMSMAIN01_file02.iq' rename RMSMAIN01_file03 to '
/data/sybiq/RMSMAIN01_file03.iq' rename RMSMAIN01_file04 to '
/data/sybiq/RMSMAIN01_file04.iq' rename RMSMAIN01_file05 to '
/data/sybiq/RMSMAIN01_file05.iq' rename RMSMAIN01_file06    
 to     
  '/data/sybiq/RMSMAIN01_file06.iq'

自此,RMSMAIN01对应的dbfile都将恢复至/data/sybiq/目录下,其他两个dbspace对应的dbfile将恢复至相应的裸设备中,之后使用命令启动数据库即可:start_iq @rmsiqdb.cfg rmsiqdb.db

如果在启动后发现RMSMAIN01对应的dbfile的状态为offline,登陆后可使用sp_iqfile查看Path列是否依然还是裸设备而非修改后的文件系统,如果还是裸设备说明虽然RMSMAIN01的dbfile已经恢复至/data/sybiq/目录下,但数据库字典中记录的dbfile依然是生产库的裸设备信息,由于不一致造成dbfile状态为offline。对此需要手动修改为一致,具体修改方法为:

----------修改RMSMAIN01的dbfile路径与名称
  ALTER DBSPACE RMSMAIN01 READONLY
  ALTER DBSPACE RMSMAIN01 OFFLINE
  ALTER DBSPACE RMSMAIN01 ALTER FILE RMSMAIN01_file01 RENAME PATH '/data/sybiq/RMSMAIN01_file01.iq'
  ALTER DBSPACE RMSMAIN01 ALTER FILE RMSMAIN01_file02 RENAME PATH '/data/sybiq/RMSMAIN01_file02.iq'
  ALTER DBSPACE RMSMAIN01 ALTER FILE RMSMAIN01_file03 RENAME PATH '/data/sybiq/RMSMAIN01_file03.iq'
  ALTER DBSPACE RMSMAIN01 ALTER FILE RMSMAIN01_file04 RENAME PATH '/data/sybiq/RMSMAIN01_file04.iq'
  ALTER DBSPACE RMSMAIN01 ALTER FILE RMSMAIN01_file05 RENAME PATH '/data/sybiq/RMSMAIN01_file05.iq'
  ALTER DBSPACE RMSMAIN01 ALTER FILE RMSMAIN01_file06 RENAME PATH '/data/sybiq/RMSMAIN01_file06.iq'
  ALTER DBSPACE RMSMAIN01 ONLINE
  ALTER DBSPACE RMSMAIN01 READWRITE

修改后发现所有dbfile的状态都变为online且为可读可写,之后启动数据库即可。从上面的恢复步骤可以看出,对于生产系统与恢复环境路径不一致的情况,需要显示指定每一个dbfile并将其路径和名称通过rename to关键字进行修改。修改后如果相应dbfile为offline还需修改数据库中记录的dbfile的路径和名称,修改完成后dbfile的状态才能为online且可读可写。

3.2.3 跨版本数据恢复

再来研究IQ数据库跨版本恢复的问题,首先对Sybase IQ 15.4 for Linux到 Sybase IQ 15.2 for Linux进行测试。

先登录到源库Sybase IQ 15.4进行全库数据备份,备份命令为:

(DBA)> backup database to '/data/backup/fullbak'

之后将备份文件拷贝至目标数据库(版本为Sybase IQ 15.2)后进行还原

 (DBA)> restore database '/data/sybiq/rmsiqsys.db' from '/data/backup/fullbak';
  Could not execute statement.
  Backup file format is invalid
  SQLCODE=-716, ODBC 3 State="HY000"
  Line 1, column 1
  restore database '/data/sybiq/rmsiqsys.db' from '/data/backup/fullbak'
  Press ENTER to continue...

由此可以发现,当IQ数据库源库的版本高于目标库时,数据恢复失败。那么目标库的版本高于源库的版本呢?

再登录到源库Sybase IQ 15.2进行全库数据备份,备份命令为:

(DBA)> backup database to '/data/backup/fullbak'

之后将备份文件拷贝至目标数据库(版本为Sybase IQ 15.4)后进行还原

(DBA)> restore database '/data/sybiq/rmsiqsys.db' from '/data/backup/fullbak';

可以发现恢复可以正常完成。

3.2.4 跨操作系统数据恢复

那么跨操作系统的情况呢,使用源库为AIX小型机(IQ 15.2),目标库为 Linux(IQ15.2)来进行试验:

(dba)> restore database '/data/sybiq/rmsiqsys.db' from '/data/backup/fullbak';
  Could not execute statement.
  Error during backup/restore: error reading from /data/backup/fullbak ()
  SQLCODE=-697, ODBC 3 State="HY000"
  Line 1, column 1
  restore database '/data/sybiq/rmsiqsys.db' from '/data/backup/fullbak';
  Press ENTER to continue...
  反过来(源库为Linux for IQ15.2,目标库为AIX for IQ 15.2)进行数据恢复依然失败:
  (dba)> restore database '/data/sybiq/rmsiqsys.db' from '/data/backup/fullbak';
  Could not execute statement.
  Error during backup/restore: error reading from /data/backup/fullbak ()
  SQLCODE=-697, ODBC 3 State="HY000"
  Line 1, column 1
  restore database '/data/sybiq/rmsiqsys.db' from '/data/backup/fullbak';
  Press ENTER to continue...

可以发现,即使数据库版本一致,跨操作系统(AIX到 Linux)异机恢复都不成功,针对跨操作系统的数据迁移,目前一般采用应用级数据迁移方法(bcp导出)进行,应用级数据迁移一般可以屏蔽掉大小字符操作系统间的不一致情况。

3.2.5结果汇总

通过上面的测试,总结出以下结论:

表格 1  Sybase IQ跨版本、跨操作系统异机恢复汇总

1.png


4、总结

本文以测试数据服务中一个具体数据申请为背景阐述了Sybase IQ数据库整库恢复的技术细节,研究如何在生产系统与恢复环境路径一致、不一致等情况进行数据恢复;另外,本文还通过具体测试得出Sybase IQ数据库在跨版本、跨操作系统等情况下全库恢复的可行性。虽然IQ数据库相对小众,但由于列存储快速查询等特点,目前一些系统的历史库部署在IQ数据库中。本文总结出的技术实践无论对数据迁移人员还是数据服务人员都是一个很好的参考和借鉴。


版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 负载测试1、定义:负载测试是逐渐增加系统负载,测试系统性能的变化,最终确定系统在满足性能指标的情况下所能承受的最大负载的测试。2、目的:在不挂系统的情况下进行测试,使系统在最大压力下正常运行。获取系统指标。3、方法:持续增加请求压力,直到服务器的某个资源项达到饱和(如CPU使用率达到90%)或某个指标达到安全临界值(如监控报警阈值或运维拐点)。系统负载压力包括并发用户数、连续运行时间和数据量。并发用户数是负载压力的重要指标。并发测试1、定义:检查系统是否存在并发问题,如内存泄漏、线程锁、资源争用等。2、目的:要确定并发用户数,必须知道系统承载的在线用户数。然后在单位时间(S)内同时发起一定数量...
            0 0 833
            分享
          • 读者提问:测试报告怎么写?阿常回答:测试报告通常包含这四要素:1、项目背景;2、参考资料;3、计划执行列表;4、测试结果。一、项目背景项目背景主要包含以下 4 点:1、测试产品名称(XX平台);2、测试周期(5.1~5.5);3、主要测试项目及具体内容(测试XX平台的功能是否正常实现、易用性是否满足用户需求);4、测试人员(测试员XX)。二、参考资料参考资料主要包含以下 4 点:1、测试计划(文档链接);2、需求规格说明书(文档链接);3、测试用例(文档链接);4、缺陷记录(jira链接)。三、计划执行列表计划执行列表主要包含以下 3 点:1、计划内容(功能测试、界面测试、易用性测试);2、执...
            0 0 2085
            分享
          •   我是去年上半年从销售行业转行到测试的,从销售公司辞职之后选择去培训班培训软件测试,经历了四个月左右的培训,在培训班结课前两周就开始投简历了,在结课的时候顺利拿到了offer。在新的公司从事软件测试工作已经将近半年有余,回想当时面试的过程,想分享一些自己的感悟,希望能够对大家有所帮助。  不知道从啥时候开始,互联网行业就开始卷起来了,除了开发岗,测试岗也是卷的不行,不少招聘信息都要求至少本学历、三年软件测试经验,除了功能测试,像接口、自动化、Linux命令都得会,甚至连性能测试都得会,虽然最后去了公司基本只是做功能测试,但是不妨碍面试官问你各方面的知识,不愧是大家所说的“面试造航母,上班拧螺...
            0 0 860
            分享
          •   科幻小说作家刘慈欣日前现身在北京召开的 2023 年中国科幻大会,并讨论了科幻产业在持续发展中面临的现实问题及未来发展方向。  据科创板日报消息,在谈到“人工智能将会给科幻创作带来哪些变化时”,刘慈欣表示“早晚会有一天,人工智能可以代替科幻作家或其他作家。”  刘慈欣对当代人工智能下的科幻文学创作表示了悲观态度“人们常说人工智能没有人的灵魂、人的感受,这不过是一个自我安慰。人自己的灵魂、感受,也是很多神经元细胞连接成复杂系统后涌现出来的。”他认为“未来科幻作家不会彻底消失,但会沦为非主流,类似于现在的皮影戏,人们的科幻创作会一直存在,但他不会成为那种一直受关注的主流内容”。  而在讨论当下...
            0 0 996
            分享
          • 前言在一线大厂,没有测试这个岗位,只有测开这个岗位即使是做业务测试,那么你的title也是测开所以想聊一聊测开的看法但不代表这是正确的看法,仅供参考还没来阿里之前,我对测开的看法一直以为专职做自动化测试和性能测试是测试这条路的最终归宿测试开发,只是大厂才可能存在的角色测试平台,少部分公司才会用到的东西,肯定不会成为主流的啦况且测试平台要会前端还得会后端,你都这么全栈为什么不做开发呢做 UI 自动化、接口自动化直接写 python 脚本不就好了嘛,做性能测试用 Jmeter 就好了嘛多数人眼中的测试开发开发一个测试平台,就要包揽前后端至...
            0 0 1041
            分享
      • 51testing软件测试圈微信