DM达梦数据库--备份与还原--DISQL工具
- 1 概述
- 2 数据库备份
- 2.1 概述
- 2.2 设置备份选项
- 2.3 备份数据库
- 3 表空间备份
- 3.1 概述
- 3.2 设置备份选项
- 3.3 备份表空间
- 4 表备份
- 4.1 概述
- 4.2 设置备份选项
- 4.3 备份表
- 5 归档备份
- 5.1 概述
- 5.2 概述
- 5.3 归档备份
- 6 管理备份
- 6.1 概述
- 6.2 备份目录管理
- 6.3 备份集校验与删除
- 7 数据还原
- 7.1 表还原
数据库备份是 DBA 日常最重要的工作内容。备份的主要目的是数据容灾,保证数据的安全性,在数据库发生故障时,通过还原备份集,将数据恢复到可用状态。
DM 备份的本质就是从数据库文件中拷贝有效的数据页保存到备份集中,这里的有效数据页包括数据文件的描述页和被分配使用的数据页。而在备份的过程中,如果数据库系统还在继续运行,这期间的数据库操作并不是都会立即体现到数据文件中,而是首先以日志的形式写到归档日志中,因此,为了保证用户可以通过备份集将数据恢复到备份结束时间点的状态,就需要将备份过程中产生的归档日志也保存到备份集中。
利用 DM 提供的各种工具进行备份还原与恢复的操作,包括 DIsql工具、DMRMAN 工具、图形化客户端管理工具 MANAGER 和 CONSOLE。
本次介绍如和通过Disql工具进行备份还原。
1 概述
DM 支持通过联机执行 SQL 语句方式对数据库执行备份还原操作。联机方式支持数据库、用户表空间、用户表和归档的备份,用户表的还原。在进行联机库级备份、归档备份和表空间备份时,必须保证系统处于归档模式,否则联机备份不能进行。
DM 新备份还原在执行联机操作时,语句的解析执行使用的是 DM 服务器的编码方式,而文件操作使用操作系统的编码方式。因此,当 DM 建库参数的编码方式与操作系统编码方式不一致时,使用中文文件名或路径名等可能造成控制台打印信息和日志文件中的信息的中文部分显示乱码。
注释:在使用的 SQL 语句中,若指定的备份名、加密算法名长度超过 128 个字节,会导致语法分析错误。
2 数据库备份
介绍使用 DIsql 工具如何备份数据库、用户表空间、用户表和归档。
2.1 概述
在 DIsql 工具中使用 BACKUP 语句你可以备份整个数据库。通常情况下,在数据库实例配置归档后输入以下语句即可备份数据库。
SQL> backup database backupset 'db_bak_01';
操作已执行
已用时间: 00:00:01.017. 执行号:46.
[root@centos7_6_33 DAMENG]# pwd
/home/dmdba/opt/dmdbms/data/DAMENG
[root@centos7_6_33 DAMENG]# ll bak/
总用量 0
drwxr-xr-x 2 dmdba dinstall 72 9月 11 21:16 db_bak_01
执行完后会在默认的备份路径下生成名为“db_bak_01”的备份集目录,默认的备份路径为 dm.ini 中 BAK_PATH 配置的路径,若未配置,则使用 SYSTEM_PATH 下的 bak目录。
这是最简单的数据库备份语句,如果要设置其他的备份选项需了解联机备份数据库的语法。
2.2 设置备份选项
DIsql 中备份语句如果仅指定了必选参数如“BACKUP DATABASE BACKUPSET ‘db_bak_01’;”,那么会默认地指定备份介质类型、备份路径、备份片大小及备份联机日志等。用户备份时也可以指定这些参数来修改默认值。
- 设置联机数据库备份集路径
- 设置备份名
- 增量备份指定基备份目录
- 指定介质类型
- 添加备份描述
- 限制备份片大小
- 加密备份
- 备份压缩
以下针对常用的参数分别选取几个进行举例说明,可用于以后的参考使用。
- 设置联机数据库备份集路径
备份语句中的 BACKUPSET 参数用于指定备份集的输出路径,备份数据库到指
定的路径“/home/dmdba/db_bak_2020_011”。
SQL> backup database backupset '/home/dmdba/db_bak_2020_011';
操作已执行
已用时间: 963.484(毫秒). 执行号:53.
BACKUPSET 为可选参数。如果该参数仅指定备份集名称即指定为相对路径,备份集会生成到默认的备份路径下。如果仅指定该关键字,不指定目标备份集目录,那么将会在默认备份路径下自动生成。
- 设置备份名字
系统为每个备份指定一个备份名,它可作为识别备份的一种方式。备份时用户可以采用系统生成的备份名也可以指定属于自己的备份名。
备份名最大长度为 128 个字节,如果超长会报语法分析出错。备份名的设置不可以使用特殊的格式,如%NAME。
如创建备份集,备份名设置为“DM_DATE_20200911_BAK”。
SQL> backup database to DM_DATE_20200911_BAK backupset '/home/dmdba/dm_bak/db_bak_2020_0911';
操作已执行
已用时间: 823.867(毫秒). 执行号:55.
- 限制备份片大小
MAXPIECESIZE 参数用于控制单个备份片的大小,当介质管理器对单个文件的大小有限制或者需要备份的数据文件很大时就可以使用这个参数。MAXPIECESIZE 不能大于磁盘剩余空间大小,否则报错磁盘空间不足。
MAXPIECESIZE 指定了单个备份片文件大小的上限,单位为 M,最小为 32M,32 位系统最大可设置为 2G,64 位系统最大可设置为 128G。如果不设置 32 系统默认为 2G,64位系统默认为 4G。
限制备份片大小主要用于解决文件系统或介质管理器对文件最大值的限制小于备份片
默认值的情况,当备份片较大时会导致无法存储
如创建备份限制备份片大小为 300M。
SQL> backup database backupset '/home/dmdba/dm_bak/db_bak_2020_001' MAXPIECESIZE 300;
操作已执行
已用时间: 924.185(毫秒). 执行号:56.
- 备份压缩
所有的备份语句都可以设置压缩选项,指定 COMPRESSED 参数后备份集会先被压缩然后再写到磁盘或磁带。
如 执行备份压缩,压缩级别设置为 3。
SQL> backup database backupset '/home/dmdba/dm_bak/db_bak_2020_002' compressed level 3;
操作已执行
已用时间: 886.114(毫秒). 执行号:57.
- 并行备份
DM 支持对库级和表空间级的并行备份,待备份数据文件很大时使用并行备份可以显著提高备份效率。用户可通过关键字 PARALLEL 指定是否执行并行备份,以及执行并行备份的并行数。执行备份时实际使用的并行数由用户指定的并行数和实际可使用的最大并行数决定,而实际可使用的最大并行数由数据文件的个数决定。
如创建并行备份,指定并行数为 5。
SQL> backup database backupset '/home/dmdba/dm_bak/db_bak_2020_003' parallel 5;
操作已执行
已用时间: 884.425(毫秒). 执行号:58.
2.3 备份数据库
最简单的数据库备份语句:
SQL> backup database backupset 'db_bak_01';
操作已执行
已用时间: 00:00:01.017. 执行号:46.
指定备份集路径、设置备份名、添加备份描述、限制备份片大小、备份压缩、并行备份:
SQL> BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET '/home/dmdba/dm_bak/db_bak_2020_004' BACKUPINFO '完全备份' MAXPIECESIZE 300 COMPRESSED LEVEL 3 PARALLEL 8;
操作已执行
已用时间: 883.174(毫秒). 执行号:59.
3 表空间备份
如何使用 DIsql 完成最基本的表空间备份及实施一些备份策略,如限制备份集大小、加密备份等。
3.1 概述
在 DIsql 工具中使用 BACKUP 语句也可以备份单个表空间。同备份数据库一样,执行表空间备份数据库实例也必须运行在归档模式下,启动 DIsql 输入以下语句即可备份表空间。
SQL> backup tablespace main backupset 'main_bak_01';
操作已执行
已用时间: 812.308(毫秒). 执行号:60.
备份集“main_bak_01”会生成到默认的备份路径下。如要设置其他备份选项需参考下文的联机备份表空间语法。
3.2 设置备份选项
表空间备份也可指定备份集路径、介质类型、备份名等备份选项,如何设置这些选项可参考
2.2 设置备份选项
下面主要介绍 BASE ON 参数的使用。
- 增量备份指定基备份目录
BASE ON 参数用于增量备份中,用来指定基备份集的目录。如果不指定该参数,会在备份搜索目录中搜索最近一次的完全备份或增量备份作为这增量备份的基备份。若需要在特定的备份集基础上执行增量备份就需要使用该参数。
以增量备份用户 roll 表空间为例,指定 BASE ON 参数执行增量备份:
SQL> backup tablespace ROLL backupset '/home/dmdba/dm_bak/roll_full_bak_01';
操作已执行
已用时间: 820.981(毫秒). 执行号:62.
SQL> backup tablespace ROLL increment backupset '/home/dmdba/dm_bak/roll_increment_bak_01';
操作已执行
已用时间: 00:00:02.621. 执行号:63.
SQL> backup tablespace ROLL increment base on backupset '/home/dmdba/dm_bak/roll_full_bak_01' backupset '/home/dmdba/dm_bak/roll_increment_bak_02' ;
操作已执行
已用时间: 813.699(毫秒). 执行号:64.
上述示例中,增量备份 roll_increment_bak_02 若不指定备份集 roll_full_bak_01作为基备份,那么默认会使用最近一次的备份集 roll_increment_bak_01 作为基备份。
3.3 备份表空间
最简单的表空间备份语句:
SQL> backup tablespace main backupset 'main_bak_01';
操作已执行
已用时间: 812.308(毫秒). 执行号:60.
指定基备份目录:
SQL> backup tablespace system backupset '/home/dmdba/dm_bak/system_full_bak_01';
操作已执行
已用时间: 822.805(毫秒). 执行号:65.
增量备份:
SQL> backup tablespace system increment backupset '/home/dmdba/dm_bak/system_increment_bak_01';
操作已执行
已用时间: 00:00:02.635. 执行号:66.
注:备机状态/MOUNT状态/MPP和RAC环境均不允许表空间备份。
4 表备份
主要介绍使用 DIsql 完成表备份及实施一些备份策略,如限制备份集大小、加密备份等
4.1 概述
与备份数据库与表空间不同,备份表不需要服务器配置归档,DIsql 中输入以下即可备份用户表。
SQL> backup table SALGRADE backupset 'SALGRADE_bak_01';
操作已执行
已用时间: 00:00:01.330. 执行号:675.
备份集“SALGRADE_bak_01”会生成到默认的备份路径下。如要设置其他备份选项需参考备份表语法。
4.2 设置备份选项
表备份常用的备份选项有设置备份名、设置备份集路径、指定介质参数、添加备份描述等,设置方式同数据库备份相同
2.2 设置备份选项
4.3 备份表
表备份拷贝指定表所使用的所有数据页到备份集中,并记录各个数据页之间的逻辑关系用来恢复表数据结构。表备份均为联机完全备份,不需要备份归档日志,不存在增量备份之说。当数据库中某张表比较重要而又没必要备份整个数据库或表空间时就可以选择表备份。
完整的备份表,保证数据库处于 OPEN 状态,指定目录备份表。
SQL> backup table TESTS backupset '/home/dmdba/dm_bak/TESTS_bak_01';
操作已执行
已用时间: 831.034(毫秒). 执行号:677.
注:备机状态/MOUNT状态/MPP和RAC环境均不允许表备份还原。其他备份选项设置参考前述库备份。
5 归档备份
主要介绍使用 DIsql 完成归档备份及实施一些备份策略,如限制备份集大小、加密备份等。
5.1 概述
在 DIsql 工具中使用 BACKUP 语句可以备份归档日志。使用归档备份的前提:
一是,归档文件的 db_magic、permanent_magic 值和库的db_magic、permanent_magic值必须一样。
二是,服务器必须配置归档。
三是,归档日志必须连续,如果出现不连续的情况,前面的会忽略,仅备份最新的连续部分。如果未收集到指定范围内的归档,则不会备份。联机备份的时候经常会切换归档文件,最后一个归档总是空的,所以最后一个归档不会被备份。
归档备份操作:
SQL> backup archive log all backupset 'arch_bak_01';
操作已执行
已用时间: 893.262(毫秒). 执行号:4.
5.2 概述
与备份数据库与表空间不同,备份表不需要服务器配置归档,DIsql 中输入以下即可备份用户表。
2.2 设置备份选项
5.3 归档备份
归档备份拷贝指定归档目录下的所有的归档文件到备份集中,并记录各个归档文件的属性,文件大小,LSN 区间等。归档备份不存在增量备份之说。当需要保存库的归档时,可以使用归档备份。
备份归档日志,通过 LSN BETWEEN … AND …来指定起始和截至 LSN。
SQL> select ARCH_LSN, CLSN, PATH from V$ARCH_FILE;
行号 ARCH_LSN CLSN PATH
---------- -------------------- -------------------- --------------------------------------------------------------------------------------------
1 37683 38944 /home/dmdba/opt/dmdbms/data/DAMENG/arch/ARCHIVE_LOCAL1_0x3E0B594C[0]_2020-09-11_17-47-35.log
2 38945 39332 /home/dmdba/opt/dmdbms/data/DAMENG/arch/ARCHIVE_LOCAL1_0x3E0B594C[0]_2020-09-11_21-16-19.log
3 39333 40591 /home/dmdba/opt/dmdbms/data/DAMENG/arch/ARCHIVE_LOCAL1_0x3E0B594C[0]_2020-09-14_16-58-26.log
4 40592 40598 /home/dmdba/opt/dmdbms/data/DAMENG/arch/ARCHIVE_LOCAL1_0x3E0B594C[0]_2020-09-14_17-07-24.log
已用时间: 0.172(毫秒). 执行号:16.
其次,备份归档。
SQL> BACKUP ARCHIVELOG LSN BETWEEN 39333 AND 40591 BACKUPSET '/home/dmdba/dm_bak/arch_bak_333_591';
操作已执行
已用时间: 41.725(毫秒). 执行号:20.
6 管理备份
6.1 概述
管理备份一个重要的目的是删除不再需要的备份,DM 没有提供自动删除过期备份的功能,删除备份需要手动执行。
备份管理相关系统过程与函数总结如下:
- SF_BAKSET_BACKUP_DIR_ADD:添加备份目录。
- SF_BAKSET_BACKUP_DIR_REMOVE:指定删除内存中的备份目录。
- SF_BAKSET_BACKUP_DIR_REMOVE_ALL:删除内存中全部的备份目录。
- SF_BAKSET_CHECK:对备份集进行校验。
- SF_BAKSET_REMOVE:删除指定设备类型和指定备份集目录的备份集。
- SF_BAKSET_REMOVE_BATCH:批量删除满足指定条件的所有备份集。
- SP_DB_BAKSET_REMOVE_BATCH:批量删除指定时间之前的数据库备份集。
- SP_TS_BAKSET_REMOVE_BATCH:批量删除指定表空间对象及指定时间之前的表 空间备份集。
- SP_TAB_BAKSET_REMOVE_BATCH:批量删除指定表对象及指定时间之前的表备 份集。
- SP_ARCH_BAKSET_REMOVE_BATCH:批量删除指定条件的归档备份集。
备份管理相关动态视图总结如下:
- V$BACKUPSET:显示备份集基本信息。
- V$BACKUPSET_DBINFO:显示备份集的数据库相关信息。
- V$BACKUPSET_DBF:显示备份集中数据文件的相关信息。
- V$BACKUPSET_ARCH:显示备份集的归档信息。
- V$BACKUPSET_BKP:显示备份集的备份片信息。
- V$BACKUPSET_SEARCH_DIRS:显示备份集搜索目录。
- V$BACKUPSET_TABLE:显示表备份集中备份表信息。
- V$BACKUPSET_SUBS:显示并行备份中生成的子备份集信息。
注意:SF_BAKSET_BACKUP_DIR_ADD 添加备份目录仅对当前会话有效。调用删除备份等函数或查看动态视图时要先调用 SF_BAKSET_BACKUP_DIR_ADD 添
加备份目录,否则仅搜索默认备份路径下的备份集。
6.2 备份目录管理
备份目录是指备份集搜索目录,这些目录被记录在内存中,当执行动态视图或批量删除备份集时,均会从这些指定目录中先搜索所有备份集信息。
- SF_BAKSET_BACKUP_DIR_ADD 函数
添加备份目录。若添加目录已经存在或者为库默认备份路径,则认为已经存在,不添加,但也不报错。
返回值:
1:目录添加成功;
其它情况下报错。
SQL> select sf_bakset_backup_dir_add('DISK','/home/dmdba/dm_bak');
行号 SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dmdba/dm_bak')
---------- -----------------------------------------------------
1 1
已用时间: 1.442(毫秒). 执行号:21.
- SF_BAKSET_BACKUP_DIR_REMOVE 函数
删除备份目录。若删除目录为库默认备份路径,不进行删除,认为删除失败。若指定目录存在于记录的合法目录中,则删除;不存在或者为空则跳过,正常返回。
返回值:
1:目录删除成功、目录不存在或者目录为空;
0:目录为库默认备份路径;
其他情况报错。
SQL> select sf_bakset_backup_dir_remove('DISK','/home/dmdba/dm_bak');
行号 SF_BAKSET_BACKUP_DIR_REMOVE('DISK','/home/dmdba/dm_bak')
---------- --------------------------------------------------------
1 1
已用时间: 0.354(毫秒). 执行号:22.
- SF_BAKSET_BACKUP_DIR_REMOVE_ALL 函数
清理全部备份目录,默认备份目录除外。
返回值:
1:目录全部清理成功;其它情况下报错。
SQL> select sf_bakset_backup_dir_remove_all();
行号 SF_BAKSET_BACKUP_DIR_REMOVE_ALL()
---------- ---------------------------------
1 1
已用时间: 0.364(毫秒). 执行号:23.
6.3 备份集校验与删除
备份管理中最重要的功能,备份集校验和备份集删除。单个备份集删除时并行备份中地子备份集不允许单独删除;在给定备份集搜集目录中发现存在引用删除备份集作为基备份的需要执行级联删除,默认报错。批量删除备份集时,跳过收集到的单独的子备份集。
涉及函数:
- SF_BAKSET_CHECK
对备份集进行校验。
返回值:
1:备份集目录存在且合法;否则报错。
SQL> backup database full backupset '/home/dmdba/dm_bak/db_bak_001';
操作已执行
已用时间: 00:00:01.178. 执行号:24.
SQL> select sf_bakset_check('disk','/home/dmdba/dm_bak/db_bak_001');
行号 SF_BAKSET_CHECK('disk','/home/dmdba/dm_bak/db_bak_001')
---------- -------------------------------------------------------
1 1
已用时间: 33.746(毫秒). 执行号:25.
- SF_BAKSET_REMOVE
删除指定设备类型和指定备份集目录的备份集。一次只检查一个合法.meta 文件,然后删除对应备份集;若存在非法或非正常备份的.meta 文件,则报错或直接返回,不会接着检查下一个.meta 文件;若同一个备份集下还存在其它备份文件或备份集,则只删除备份文件,不会删除整个备份集。
返回值:
1:备份集目录删除成功,其它情况下报错。
SQL> select sf_bakset_remove('disk','/home/dmdba/dm_bak/db_bak_001');
行号 SF_BAKSET_REMOVE('disk','/home/dmdba/dm_bak/db_bak_001')
---------- --------------------------------------------------------
1 1
已用时间: 66.391(毫秒). 执行号:26.
- SF_BAKSET_REMOVE_BATCH
批量删除满足指定条件的所有备份集。
返回值:
1:备份集目录删除成功,其它情况下报错。
18:38:09 SQL> select sf_bakset_remove_batch('disk',now(),NULL,NULL);
行号 SF_BAKSET_REMOVE_BATCH('disk',NOW(),NULL,NULL)
---------- ----------------------------------------------
1 1
已用时间: 31.372(毫秒). 执行号:29.
SP_DB_BAKSET_REMOVE_BATCH
批量删除指定时间之前的数据库备份集 。使用该方法前 ,需要先使用SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。
18:38:22 SQL> select sf_bakset_backup_dir_add('disk','/home/dmdba/dm_bak');
行号 SF_BAKSET_BACKUP_DIR_ADD('disk','/home/dmdba/dm_bak')
---------- -----------------------------------------------------
1 1
已用时间: 0.921(毫秒). 执行号:30.
18:42:07 SQL> call sp_db_bakset_remove_batch('disk',now());
DMSQL 过程已成功完成
已用时间: 43.671(毫秒). 执行号:31.
- SP_TS_BAKSET_REMOVE_BATCH
批量删除指定表空间对象及指定时间之前的表空间备份集。使用该方法前,需要先使用SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。
SQL> call sp_ts_bakset_remove_batch('disk',now(),'SYSTEM');
DMSQL 过程已成功完成
已用时间: 31.556(毫秒). 执行号:33.
- SP_TAB_BAKSET_REMOVE_BATCH
批量删除指定表对象及指定时间之前的表备份集。使用该方法前,需要先使用SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。
SQL> call sp_tab_bakset_remove_batch('disk',now(),'SYSDBA','TESTS');
DMSQL 过程已成功完成
已用时间: 36.165(毫秒). 执行号:34.
- SP_ARCH_BAKSET_REMOVE_BATCH
批量删除指定时间之前的归档备份集。使用该方法前,需要先使用SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。
SQL> call sp_arch_bakset_remove_batch('disk',now());
DMSQL 过程已成功完成
已用时间: 32.890(毫秒). 执行号:35.
7 数据还原
DM 仅支持表的联机还原,数据库、表空间和归档日志的还原必须通过脱机工具 DMRMAN执行。主要介绍如何使用 DIsql 工具还原表。
7.1 表还原
- 示例一
1)备份已存在的数据表,或可以创建新表进行测试。
SQL> backup table salgrade backupset '/home/dmdba/dm_bak/salgrade_bak_01';
操作已执行
已用时间: 816.091(毫秒). 执行号:50.
2)测试准备,truncate表
SQL> select * from SALGRADE;
行号 GRADE LOSAL HISAL
---------- ----- ----- -----
1 1 700 1200
2 2 1201 1400
3 3 1401 2000
4 4 2001 3000
5 5 3001 9999
SQL> truncate table salgrade;
操作已执行
已用时间: 10.601(毫秒). 执行号:51.
SQL>
SQL> select * from SALGRADE;
未选定行
3)进行备份检查,可选择性操作
SQL> select sf_bakset_check('disk','/home/dmdba/dm_bak/tests_bak_01');
行号 SF_BAKSET_CHECK('disk','/home/dmdba/dm_bak/tests_bak_01')
---------- ---------------------------------------------------------
1 1
已用时间: 45.279(毫秒). 执行号:42.
4)还原表数据,查询数据是否恢复
SQL> restore table salgrade from backupset '/home/dmdba/dm_bak/salgrade_bak_01';
操作已执行
已用时间: 35.758(毫秒). 执行号:53.
SQL> select * from SALGRADE;
行号 GRADE LOSAL HISAL
---------- ----- ----- -----
1 1 700 1200
2 2 1201 1400
3 3 1401 2000
4 4 2001 3000
5 5 3001 9999
已用时间: 0.378(毫秒). 执行号:54.
SQL>
- 示例二
表还原实质是表内数据的还原,以及索引和约束等的重建。下面以表中包含索引为例说明如何还原表
1)数据库open,创建备份的表
SQL> create table deptno(id int);
操作已执行
已用时间: 11.874(毫秒). 执行号:61.
2)创建索引
SQL> create index idx_deptno on deptno (id);
操作已执行
已用时间: 13.739(毫秒). 执行号:62.
3)备份表
SQL> backup table deptno backupset '/home/dmdba/dm_bak/deptno_bak_01';
操作已执行
已用时间: 820.931(毫秒). 执行号:63.
- 执行表结构还原。表备份和表中都包含索引,如果直接执行表数据还原会报错:还原表中存在二级索引或冗余约束。
SQL> restore table deptno struct from backupset '/home/dmdba/dm_bak/deptno_bak_01';
操作已执行
已用时间: 25.674(毫秒). 执行号:64.
5)执行表数据还原。
SQL> restore table deptno from backupset '/home/dmdba/dm_bak/deptno_bak_01';
操作已执行
已用时间: 47.035(毫秒). 执行号:65.