达梦数据库归档管理
达梦安装完成后,如何配置归档模式呢?
联机备份需要数据库处于归档模式方可进行,下面详细讨论一下归档模式的配置,归档日志的管理
1. 查看达梦数据库的位置
# su - dm
$ echo $DM_HOME
/dm
$ ps -ef|grep dms
dm 26200 26155 0 15:41 pts/2 00:00:00 grep dms
dm 31222 1 0 Oct29 ? 00:04:17 /dm/bin/dmserver /dm/data/DM3/dm.ini -noconsole
可以发现达梦数据库处于运行状态,数据库DM3安装在/dm/data/DM3目录下
如果数据库实例是处于关闭状态的,可以通过下面的命令查看达梦数据库的位置
# systemctl list-unit-files|grep Dm
DmAPService.service enabled
DmServiceDM3.service enabled
# systemctl status DmServiceDM3.service
● DmServiceDM3.service - DM database instance service
Loaded: loaded (/usr/lib/systemd/system/DmServiceDM3.service; enabled; vendor preset: disabled)
Active: active (running) since 三 2020-09-23 10:44:29 CST; 1 months 9 days ago
Main PID: 14973 (dmserver)
CGroup: /system.slice/DmServiceDM3.service
└─14973 /dm/bin/dmserver /dm/data/DM3/dm.ini -noconsole
9月 23 10:44:14 DM3 systemd[1]: Starting DM database instance service...
9月 23 10:44:29 DM3 DmServiceDM3[14949]: [35B blob data]
9月 23 10:44:29 DM3 systemd[1]: Started DM database instance service.
从上面的信息可以看到,数据库位于/dm/data/DM3
2. 开启归档模式
首先要找到sysdba的密码,达梦的密码丢失了一般情况下是不能重置的。
另外要确定归档日志放置到那个文件夹下,这里我们假设放在/dm/data/DM3/arch下,需要先创建好这个文件夹
如果数据库处于关闭状态,首先启动数据库
# systemctl start DmServiceDM3
下面开始开启归档
# su - dm
$ mkdir /dm/data/DM3/arch
$ disql sysdba/dm
Server[LOCALHOST:5236]:mode is normal, state is mount
login used time: 3.364(ms)
disql V8
SQL> select status$ from v$instance;
LINEID STATUS$
---------- -------
1 OPEN
used time: 0.731(ms). Execute id is 508.
SQL> select arch_mode from v$database;
LINEID ARCH_MODE
---------- ---------
1 N
used time: 1.121(ms). Execute id is 509.
SQL> select * from v$parameter where name='ARCH_INI';
LINEID ID NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION
---------- ----------- -------- ---- ----- --------- ---------- -----------
1 560 ARCH_INI SYS 0 0 0 dmarch.ini
上面可以看到数据库是open状态的,归档模式是N,即非归档的,ARCH_INI的参数也为0,当改成归档模式之后,这2个参数都会有变化,下面我们来实验一下
开启归档需要数据库处于mount状态,下面我们来操作
SQL> alter database mount;
executed successfully
used time: 00:00:01.744. Execute id is 0.
SQL> alter database add archivelog 'type=local,dest=/dm/data/DM3/arch,file_size=64,space_limit=10240';
executed successfully
used time: 7.986(ms). Execute id is 0.
参数解释:
type=local:归档写入本机
dest=/dm/data/DM3/arch :归档写入本机的文件夹
file_size=64 归档文件大小64M
space_limit=10240 归档文件夹中最多写入10240M的归档文件,如果超过了这个数值,则自动删除最老的归档文件
SQL> alter database archivelog;
executed successfully
used time: 43.870(ms). Execute id is 0.
SQL> alter database open;
executed successfully
used time: 00:00:01.954. Execute id is 0.
SQL> select arch_mode from v$database;
LINEID ARCH_MODE
---------- ---------
1 Y
used time: 1.167(ms). Execute id is 510.
SQL> select status$ from v$instance;
LINEID STATUS$
---------- -------
1 OPEN
used time: 0.904(ms). Execute id is 511.
SQL>
发现数据库已经处于归档模式,数据库也已经open了
下面测试一下归档的功能
SQL> host ls -l /dm/data/DM3/arch
total 65536
-rw-r--r-- 1 dm dba 67108864 Oct 31 16:06 ARCHIVE_LOCAL2_0x2E2F0A8B[0]_2020-10-31_16-06-17.log
SQL> alter system archive log current;
executed successfully
used time: 94.772(ms). Execute id is 0.
SQL> host ls -l /dm/data/DM3/arch
total 65712
-rw-r--r-- 1 dm dba 173056 Oct 31 16:07 ARCHIVE_LOCAL2_0x2E2F0A8B[0]_2020-10-31_16-06-17.log
-rw-r--r-- 1 dm dba 67108864 Oct 31 16:08 ARCHIVE_LOCAL2_0x2E2F0A8B[0]_2020-10-31_16-08-02.log
发现归档功能已经正常工作了
查看生成的归档日志文件的信息
SQL> select arch_lsn,clsn,status,path from v$arch_file;
LINEID ARCH_LSN CLSN STATUS
---------- -------------------- -------------------- --------
PATH
----------------------------------------------------------------------
1 126935 129318 INACTIVE
/dm/data/DM3/arch/ARCHIVE_LOCAL2_0x2E2F0A8B[0]_2020-10-31_16-06-17.log
2 129318 129318 INACTIVE
/dm/data/DM3/arch/ARCHIVE_LOCAL2_0x2E2F0A8B[0]_2020-10-31_16-08-02.log
used time: 1.042(ms). Execute id is 525.
上面我们做的归档配置在系统中可以通过下面的SQL查看
SQL> select * from v$parameter where name='ARCH_INI';
LINEID ID NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION
---------- ----------- -------- ---- ----- --------- ---------- -----------
1 554 ARCH_INI SYS 1 1 1 dmarch.ini
used time: 6.769(ms). Execute id is 5.
和前面的对比一下,发现这个ARCH_INI的参数已经被修改为1了
SQL> select * from v$dm_arch_ini;
LINEID ARCH_NAME ARCH_TYPE ARCH_DEST ARCH_FILE_SIZE ARCH_SPACE_LIMIT ARCH_HANG_FLAG
---------- -------------- --------- ----------------- -------------- ---------------- --------------
ARCH_TIMER_NAME ARCH_IS_VALID ARCH_WAIT_APPLY ARCH_INCOMING_PATH ARCH_CURR_DEST
--------------- ------------- --------------- ------------------ -----------------
1 ARCHIVE_LOCAL1 LOCAL /dm/data/DM3/arch 64 10240 1
NULL Y NULL NULL /dm/data/DM3/arch
used time: 3.742(ms). Execute id is 4.
SQL>
这个视图中保存了我们归档的详细参数配置,包括保存位置,文件大小,最大空间限制等
另外我们还可以在文件系统中直接查询到这些配置,上面的SQL查询的结果和文件中的内容是一致的,修改任何一个都会导致另外一个被修改
$ cat dm.ini | grep ARCH_INI
ARCH_INI = 1 #dmarch.ini
$ cat dmarch.ini
#DaMeng Database Archive Configuration file
#this is comments
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/data/DM3/arch
ARCH_FILE_SIZE = 64
ARCH_SPACE_LIMIT = 10240
可以看到,这2个文件的内容和上面v$动态视图中查询出来的内容是一致的。
3. 归档日志的删除
1). 上面设定的space_limt参数限制了归档日志可以占用的最大空间,因此可以自动管理、自动删除,这种是最省事的办法了
2). 另外还可以采用备份后删除方式,因为之所以数据库开启归档,都是为了联机备份的目的,所以这类数据库系统都是比较重要的,归档日志一般也都是需要备份下来的,以便将来可以采用归档日志恢复到任意时刻。
命令:
SQL> select * from v$parameter where name='BAK_PATH';
LINEID ID NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- ----------- -------- --------- ---------------- ---------------- ----------------
DESCRIPTION
----------------
1 6 BAK_PATH READ ONLY /dm/data/DM3/bak /dm/data/DM3/bak /dm/data/DM3/bak
backup file path
查看系统的默认备份路径为/dm/data/DM3/bak
SQL> select path from v$arch_file;
LINEID PATH
---------- ----------------------------------------------------------------------
1 /dm/data/DM3/arch/ARCHIVE_LOCAL2_0x2E2F0A8B[0]_2020-10-31_16-06-17.log
2 /dm/data/DM3/arch/ARCHIVE_LOCAL2_0x2E2F0A8B[0]_2020-10-31_16-08-02.log
3 /dm/data/DM3/arch/ARCHIVE_LOCAL2_0x2E2F0A8B[0]_2020-10-31_16-22-01.log
4 /dm/data/DM3/arch/ARCHIVE_LOCAL1_0x2E2F0A8B[0]_2020-10-31_16-22-56.log
used time: 6.681(ms). Execute id is 7.
SQL> backup archivelog all delete input;
executed successfully
used time: 00:00:01.257. Execute id is 35.
3). 手动删除方法:
删除3天前的归档,返回值为删除的文件数量
SQL> select sf_archivelog_delete_before_time(sysdate - 3);
删除1分钟之前的
SQL> select sf_archivelog_delete_before_time(sysdate - 1/1440);
删除 LSN 值小于 129318 之前的归档日志文件。
SQL> select sf_archivelog_delete_before_lsn(129318);
初学达梦数据库,感觉还是很不错的,更详细的使用方法可以参考官方手册。