三、全文检索
DM与Oracle、Mysql、PostgreSQL 全文检索功能对比表:1-3
DM的全文检索功能是根据其已有词库建立全文索引,然后文本查询完全在索引上进行。我们来测试下
select * from test_context;
id name
1 1 Copied 31 empty directories to 4 empty directories under /u01/dmdb/dmdbms/jar/eclipse
2 2 Replace FILE=/u01/dmdb/dmdbms/desktop/uninstall.desktop
3 3 达梦数据库DMDBDMS
3 rows got
time used: 0.265(ms).
下面在name字段创建全文索引。
SQL>create context index test_name on test_context(name);
time used: 27.519(ms).
SQL>select a.name,b.name from systables a,syscontextindexes b where a.name='test_context' and a.id=b.tableid;
name name
1 test_context test_name
1 rows got
SQL>select * from test_context where contains(name,'empty');
全文索引 'test_name' 无效,需要重新填充.error code = -1453
SQL>alter context index test_name on test_context rebuild;
time used: 355.452(ms).
SQL>select * from test_context where contains(name,'empty');
id name
1 1 Copied 31 empty directories to 4 empty directories under /u01/dmdb/dmdbms/jar/eclipse
1 rows got
time used: 0.431(ms).
SQL>select * from test_context where contains(name,'达梦');
id name
1 3 达梦数据库DMDBDMS
1 rows got
time used: 0.368(ms).
从上面的测试可以看出,DM的全文检索在创建后不能马上对其进程查询,需要先进行填充,也就是说每次更新后,更新的数据不能马上用全文检索查出来,需要先填充才会出现在全文索引里。不过DM对中文的支持还是很友好的,不需要在多装其他的插件什么的,毕竟是国产的。
四、物理增量备份恢复
SQL>set current database mytest;
set current database mytest
设置当前数据库为 'mytest'
time used: 0.124(ms).
SQL>select name,type from systables where type!='S';
name type
1 bk_2 U
2 test_backup U
3 test_backupDMBLOB V
4 test_context U
5 test_contextDMBLOB V
6 test_part V
7 test_part00DMPART P
8 test_part01DMPART P
9 test_part2 H
10 test_part3 R
10 rows got
time used: 0.169(ms).
当前MYTEST库下有10个表,那么我们对这个库进行一个完全备份。
SQL>backup database mytest full to "/u01/dmdb/mytest_bak01";
time used: 25.211(ms).
SQL>create table bk_001(id int);
time used: 0.658(ms).
完全备份完成后,在创建一个新表bk_001,然后再进行增量备份。
SQL>backup database mytest increment to "/u01/dmdb/mytest_bak02";
time used: 17.266(ms).
SQL>select name,type from systables where type!='S';
name type
1 bk_001 U
2 bk_2 U
3 test_backup U
4 test_backupDMBLOB V
5 test_context U
6 test_contextDMBLOB V
7 test_part V
8 test_part00DMPART P
9 test_part01DMPART P
10 test_part2 H
11 test_part3 R
11 rows got
time used: 0.173(ms).
可以看到,目前MYTEST库有11张表,然后再删除几张表,把新建的bk_001表也删除。
SQL>drop table bk_001;
SQL>drop table bk_2;
SQL>drop table test_backup;
SQL>exit
然后对MYTEST库进行完全恢复,利用sf_get_bak_by_name函数找到备份路径,恢复前要把需要恢复的数据脱机。
[root@ test ~]# rlwrap /u01/dmdb/dmdbms/bin/isql SYSDBA/SYSDBA@localhost
isql V6.0.2.51-Build(2009.12.23)
login success
SQL>select sf_get_bak_by_name('/u01/dmdb/mytest_bak01','mytest');
1 /u01/dmdb/dmdbms/data/mytest_20100330223956_1.bak
1 rows got
time used: 0.303(ms).
SQL>restore database mytest full from '/u01/dmdb/dmdbms/data/mytest_20100330223956_1.bak';
time used: 1787.245(ms).
SQL>alter database mytest set online;
alter database mytest set online
time used: 1028.146(ms).
SQL>set current database mytest;
设置当前数据库为 'mytest'
time used: 0.145(ms).
SQL>select name,type from systables where type!='S';
name type
1 bk_2 U
2 test_backup U
3 test_backupDMBLOB V
4 test_context U
5 test_contextDMBLOB V
6 test_part V
7 test_part00DMPART P
8 test_part01DMPART P
9 test_part2 H
10 test_part3 R
10 rows got
time used: 0.313(ms).
可以看到,现在有10张表,已经恢复到了新建bk_001表之前的状态。那么我们在进行增量恢复
SQL>set current database system;
设置当前数据库为 'SYSTEM'
time used: 0.128(ms).
SQL>alter database mytest set offline;
time used: 1.181(ms).
SQL>select sf_get_bak_by_name('/u01/dmdb/mytest_bak02','mytest');
1 /u01/dmdb/dmdbms/data/mytest_20100330224024_1.bak
1 rows got
time used: 0.312(ms).
SQL>restore database mytest increment from '/u01/dmdb/dmdbms/data/mytest_20100330224024_1.bak';
time used: 11.065(ms).
SQL>alter database mytest set online;
time used: 1027.506(ms).
SQL>set current database mytest;
设置当前数据库为 'mytest'
time used: 0.123(ms).
SQL>select name,type from systables where type!='S';
name type
1 bk_001 U
2 bk_2 U
3 test_backup U
4 test_backupDMBLOB V
5 test_context U
6 test_contextDMBLOB V
7 test_part V
8 test_part00DMPART P
9 test_part01DMPART P
10 test_part2 H
11 test_part3 R
11 rows got
time used: 0.304(ms).
可以看到,已经完全恢复。
物理增量备份和恢复功能对于大型数据库系统而言是一个具有标志性意义的功能,由以上的备分实例可以看出, DM6的备份和恢复功能还是比较完善的。
五、总结
以上是我对DM6的使用体验,通过以上的三个测试可以看出,DM6的功能,总的来说还是比较完善的,在数据库的主要功能方面基本能够满足一般企业级数据库的各种应用。同时还提供了一个比较特别的垂直分区功能,值得大家去关注一下。另外由于本文目的是体验DM6数据库,并没有对DM6的性能和稳定性进行测试,在实际环境中,DM的性能和稳定性到底如何,还需要在实践中不断的摸索和总结。