ITPub博客

首页 > 数据库 > 国内数据库 > SQL命令备份恢复

SQL命令备份恢复

国内数据库 作者:崖山数据库系统YashanDB 时间:2025-03-20 18:28:45 0 删除 编辑

SQL命令方式的备份恢复操作适用于单机/共享集群部署的数据库。

操作示例

以下为对单机部署的数据库执行备份恢复的模拟场景:

1.通过yasql连接数据库,将数据库切换到归档模式,归档模式必须在数据库MOUNT状态下才能开启。

$ yasql sales/sales 
SQL> ALTER DATABASE ARCHIVELOG;
Copied!

2.模拟业务场景,在数据库中创建表并插入数据。

CREATE TABLE backuptable (b1 INT,b2 INT); 
 INSERT INTO backuptable VALUES (2,3);
 COMMIT;
Copied!

3.执行数据全量备份。

BACKUP DATABASE FULL FORMAT '/YashanDB/backup/full_20211212181530';
Copied!

Caution:

确保“/YashanDB/backup”目录存在且YashanDB安装用户具有读写权限,如果指定的数据备份目录已存在,则会触发 YAS-00318 错误。

4.使用具有DBA权限的用户查询DBA_BACKUP_SET视图,检查备份详情。

SELECT RECID#,START_TIME,COMPLETION_TIME,TYPE,INCREMENT_LEVEL,INCREMENT_ID#,PATH,TAG,TRUNC_LSN,COMPRESS_LEVEL,INPUT_BYTES,OUTPUT_BYTES,RCY_BEGIN_ASN,RCY_BEGIN_LFN,RCY_END_ASN,RCY_END_LFN,COMPRESS_ALGO,ENCRYPT_ALGO FROM DBA_BACKUP_SET;
 
      RECID# START_TIME                       COMPLETION_TIME                  TYPE          INCREMENT_LEVEL INCREMENT_ID# PATH                                                             TAG                                                                          TRUNC_LSN COMPRESS_LEVEL           INPUT_BYTES          OUTPUT_BYTES RCY_BEGIN_ASN         RCY_BEGIN_LFN  RCY_END_ASN           RCY_END_LFN COMPRESS_ALGO ENCRYPT_ALGO ------------ -------------------------------- -------------------------------- ------------- --------------- ------------- ---------------------------------------------------------------- ---------------------------------------------------------------- --------------------- -------------- --------------------- --------------------- ------------- --------------------- ------------ --------------------- ------------- ------------ 
           1 2023-06-19                       2023-06-19                       FULL                        0             0 /YashanDB/backup/full_20211212181530                      bak_2023061902151684                                                             53767 NONE                       516325376             516325376             8                 51469            8                 51471 NONE          NONE
Copied!

5.检查生成的备份集物理文件。

$ cd /YashanDB/backup/full_20211212181530 
$ ls -rlt
total 504232-rw-r-----. 1 yashan yashan  28729344 Jun 19 02:15 ctrl_0_0_0.bak-rw-r-----. 1 yashan yashan  67108864 Jun 19 02:15 data_0_0_0.bak-rw-r-----. 1 yashan yashan  67108864 Jun 19 02:15 data_1_0_0.bak-rw-r-----. 1 yashan yashan      8192 Jun 19 02:15 data_3_0_0.bak-rw-r-----. 1 yashan yashan      8192 Jun 19 02:15 data_2_0_0.bak-rw-r-----. 1 yashan yashan  67108864 Jun 19 02:15 data_4_0_0.bak-rw-r-----. 1 yashan yashan 134217728 Jun 19 02:15 data_5_0_0.bak-rw-r-----. 1 yashan yashan 134217728 Jun 19 02:15 data_5_0_1.bak-rw-r-----. 1 yashan yashan   1040384 Jun 19 02:15 arch_0_8_0.bakdrwx------. 2 yashan yashan         6 Jun 19 02:15 bucket_4_0_0.bak-rw-r-----. 1 yashan yashan  16777216 Jun 19 02:15 backup_profile-rw-r-----. 1 yashan yashan      5120 Jun 19 02:15 backup_filelist
Copied!

其中:

  • ctrl_*文件为备份的控制文件。
  • data_*文件为备份的数据文件。
  • arch_*文件为备份的归档文件。
  • redo_*文件为备份的在线日志文件,仅在备库执行备份生成的备份集中存在 。
  • 当业务中存在LSC表时,bucket_4_0_0.bak/下存放LSC表的可变数据文件。
  • backup_profile文件为备份集元数据文件,用于备份集和数据库版本的校验,备份集恢复关键信息等。
  • backup_filelist文件用于校验备份集数据的完整性正确性。

6.模拟灾难场景,删除数据库文件。

Warn:

以下操作只能在测试环境上执行,请勿直接在生产环境上测试。

# $YASDB_DATA/dbfiles为数据库文件路径$ cd $YASDB_DATA/dbfiles
$ rm -rf ./*
$ ls -rlttotal 0
Copied!

7.重启数据库到NOMOUNT状态,执行恢复,然后检查新增数据是否恢复。

SHUTDOWN IMMEDIATE;exit;
 $ yasboot cluster start -c yashandb -m nomount
 
$ yasql sales/sales 
SQL> RESTORE DATABASE FROM '/YashanDB/backup/full_20211212181530';
 RECOVER DATABASE;
 ALTER DATABASE OPEN;
 SELECT b1,b2 FROM backuptable;
          B1           B2 
------------ ------------ 
           2            3
Copied!

#归档文件备份恢复

归档日志备份恢复的SQL命令操作方式适用于单机/共享集群部署的数据库。

以下为对单机部署的数据库执行归档备份和恢复的模拟场景:

#备份示例

使用本方式执行备份时,要求数据库运行于OPEN状态且归档模式开启。

1.通过yasql连接数据库,将数据库切换到归档模式,归档模式必须在数据库MOUNT状态下才能开启。

$ yasql username/password 
SQL> ALTER DATABASE ARCHIVELOG;
Copied!

2.模拟业务场景,在数据库中创建表并插入数据,并执行多次切换LOGFILE生成多个归档。

CREATE TABLE backuptable (b1 INT,b2 INT); 
 INSERT INTO backuptable VALUES (2,3);
 COMMIT;-- 执行多次ALTER SYSTEM SWITCH LOGFILE;
Copied!
-- 查看已生成归档SELECT SEQUENCE#,FIRST_CHANGE#,NEXT_CHANGE# FROM V$ARCHIVED_LOG;
Copied!

3.指定归档的SEQUENCE区间备份。

SELECT SEQUENCE#,FIRST_CHANGE#,NEXT_CHANGE# FROM V$ARCHIVED_LOG;
   SEQUENCE#         FIRST_CHANGE#          NEXT_CHANGE# ------------ --------------------- --------------------- 
           1    525940019749924864    525940036244176896
           2    525940036244176896    525940261064138752
           3    525940261064138752    525940261064138752
           4    525940261064138752    525940261064138752
           5    525940261064138752    525940400603951104-- 执行备份BACKUP ARCHIVELOG SEQUENCE BETWEEN  2 AND 5  FORMAT '/YashanDB/backup/SEQUENCE_2_5';
Copied!

Note:

因为上述示例中在切日志期间并未做任何业务,所以部分归档的SCN起始是一样的,实际生产环境中表现正常。

4.使用具有DBA权限的用户查询DBA_ARCHIVE_BACKUPSET视图,检查备份详情。

SELECT RECID#,INSTANCE_NUMBER#,START_TIME,COMPLETION_TIME,TYPE,PATH,TAG,COMPRESS_ALGO,COMPRESS_LEVEL,ENCRYPT_ALGO,INPUT_BYTES,OUTPUT_BYTES,SEQUENCE_BEGIN#,SEQUENCE_END#,MIN_FIRST_CHANGE#,MAX_NEXT_CHANGE#,RESTORE_TIME FROM DBA_ARCHIVE_BACKUPSET;
               RECID# INSTANCE_NUMBER# START_TIME                                       COMPLETION_TIME                                  TYPE          PATH                                                             TAG                                                              COMPRESS_ALGO COMPRESS_LEVEL ENCRYPT_ALGO           INPUT_BYTES          OUTPUT_BYTES SEQUENCE_BEGIN# SEQUENCE_END#     MIN_FIRST_CHANGE#      MAX_NEXT_CHANGE# RESTORE_TIME                                     --------------------- ---------------- ------------------------------------------------ ------------------------------------------------ ------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ------------- -------------- ------------ --------------------- --------------------- --------------- ------------- --------------------- --------------------- ------------------------------------------------ 
                    1                1 2024-01-26                                       2024-01-26                                       ARCHIVE       /YashanDB/backup/SEQUENCE_2_5                                       bak_2024012611380123                                             NONE          NONE           NONE                      17362944              17362944               2             5    525940036244176896    525940400603951104
Copied!

5.检查生成的备份集物理文件。

$ cd /YashanDB/backup/SEQUENCE_2_5 
$ ls -rlt
total 16960-rw-r----- 1 zhangxt zhangxt    12288 Jan 26 11:38 arch0_0_3_0.bak-rw-r----- 1 zhangxt zhangxt   544768 Jan 26 11:38 arch0_0_2_0.bak-rw-r----- 1 zhangxt zhangxt    12288 Jan 26 11:38 arch0_0_4_0.bak-rw-r----- 1 zhangxt zhangxt    16384 Jan 26 11:38 arch0_0_5_0.bak-rw-r----- 1 zhangxt zhangxt 16777216 Jan 26 11:38 backup_profile-rw-r----- 1 zhangxt zhangxt     2560 Jan 26 11:38 backup_filelist
Copied!

其中:

  • arch*为独立的归档文件,arch{instanceId} {resetId}{asn}_{secId},分别表示节点的ID,resetlogs的id,归档文件的序列号ASN,归档文件的分片序列号。
  • backup_profile文件为备份集元数据文件,用于备份集和数据库版本的校验,备份集恢复关键信息等。
  • backup_filelist文件用于校验备份集数据的完整性正确性。

#恢复示例

使用本方式执行恢复时,要求当前数据库实例处于执行完RESTORE且未执行RECOVER的MOUNT状态,然后检查归档文件是否恢复到指定目录。

除指定SEQUENCE区间外,也可指定为时间、SCN区间,详见 BACKUP ARCHIVELOG。

$ cd /YASDATA/archive 
$ ll -rlt
total 23296-rw-r----- 1 yashan yashan    36864 Nov 29 09:41 arch_0_1.ARC-rw-r----- 1 yashan yashan 23781376 Nov 29 09:46 arch_0_2.ARC-rw-r----- 1 yashan yashan    12288 Nov 29 09:47 arch_0_3.ARC-rw-r----- 1 yashan yashan    12288 Nov 29 09:47 arch_0_4.ARC-rw-r----- 1 yashan yashan    12288 Nov 29 09:47 arch_0_5.ARC-- 模拟归档文件丢失,请勿在生产环境上测试$ rm arch_0_3.ARC arch_0_5.ARC
$ ll -rlt
total 23272-rw-r----- 1 yashan yashan    36864 Nov 29 09:41 arch_0_1.ARC-rw-r----- 1 yashan yashan 23781376 Nov 29 09:46 arch_0_2.ARC-rw-r----- 1 yashan yashan    12288 Nov 29 09:47 arch_0_4.ARC-- 恢复指定SEQUENCE的范围为2-4,即只恢复该区间内的归档SQL> RESTORE ARCHIVELOG SEQUENCE BETWEEN 2 AND 4 FROM SEARCHDIR '/YashanDB/backup';-- 检查文件仅恢复了SEQUENCE为3的归档文件。$ ll -rlt
total 23284-rw-r----- 1 yashan yashan    36864 Nov 29 09:41 arch_0_1.ARC-rw-r----- 1 yashan yashan 23781376 Nov 29 09:46 arch_0_2.ARC-rw-r----- 1 yashan yashan    12288 Nov 29 09:47 arch_0_4.ARC-rw-r----- 1 yashan yashan    12288 Nov 29 10:17 arch_0_3.ARC


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70028812/viewspace-3078258/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: YashanDB备份恢复
下一篇: YashanDB 故障诊断
请登录后发表评论 登录
全部评论
崖山数据库系统YashanDB是深圳计算科学研究院完全自主研发设计的新型数据库系统,融入原创理论,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,为客户提供一站式的企业级融合数据管理解决方案。

注册时间:2023-04-11

  • 博文量
    722
  • 访问量
    640225