达梦6.0试用之数据字典

前几天ITPUB的熊建国主编和我联系,希望我能参加国产数据库达梦的适用活动,并写几篇使用感受。本来最近手工的事情比较多,本打算推辞的,不过熊主编再三邀请,而且强调并非是枪手文,只要写出真实使用感受即可。既然如此,我就本着支持国产数据库的原则,写几篇试用感受。

由于本人唯一熟悉的数据库就是Oracle,因此所有的对比都是与Oracle数据库进行对比,在这个过程中,将尽可能避免将对Oracle数据库的喜爱之情带进来,争取站在一个比较公正的位置上来进行评价。

这一篇简单介绍一下达梦数据库的数据字典。

 

 

数据字典是数据库存储对象结构,维护数据库正常运行的内部表、视图和同义词的总称。除了维护数据库对象的完整性外,数据字典还提供给用户方便的查询和维护接口,此外数据字典还提供动态的系统、实例和会话级的统计信息和状态信息。用户可以根据这些信息了解系统运行状态,分析、诊断系统问题,对系统进行优化。

Oracle的数据字典可以分为两大类,一部分是以DBA/ALL/USER开头的视图,另一部分是以V_$开头的视图。前者是静态视图,里面包含数据库中所有数据对象的信息,是Oracle提供给用户的查询访问接口。而后者是动态视图,里面包含会话、实例以及系统级的动态统计信息或状态信息,用户可以根据这些视图的状态和统计信息,分析、诊断系统或会话,从而达到优化或问题诊断的目的。

而达梦提供的数据字典信息就显得过于简单了。对于静态视图而言,没有USERALL类型的视图,这意味着普通用户很难获取当前的

C:\dmdbms\bin>isql
isql V6.0.2.51-Build(2009.12.23)
SQL>login
server name:localhost
user name:test
password:
port:12345
dm_login time used:197.689(ms)
SQL>select * from systables;
select * from systables;

无效的表或视图名 'systables' .error code = -1010
SQL>select * from tables;
select * from tables;

无效的表或视图名 'tables' .error code = -1010

当前用户已经授权了SYSDBA角色,而查询数据字典仍然很难查询到当前用户下的对象信息:

SQL>login
server name:localhost
user name:sysdba
password:
port:12345
dm_login time used:44.871(ms)
SQL>select count(*) from systables;
select count(*) from systables;

 

1       101
1 rows got
time used: 0.430(ms) clock tick:707240.
SQL>set current database test;
set current database test
设置当前数据库为 'test'
time used: 0.305(ms) clock tick:495190.
SQL>select count(*) from systables;
select count(*) from systables;

 

1       77
1 rows got
time used: 0.399(ms) clock tick:649930.

切换到SYSDBA用户,才能查询到数据字典的信息。

而且由于存在多个数据库,不同数据库中查询的结果只是当前数据库中的信息,而不是总体信息,部分总的信息只保存在SYSTEM数据库中,比如LOGIN信息:

SQL>select name, defaultdb from syslogins;
select name, defaultdb from syslogins;

name            defaultdb

1       SYSDBA  0

2       test    4
2 rows got
time used: 1.400(ms) clock tick:2322140.

难道只有SYSDBA用户才能获取对象的信息,而普通用户无法获得信息吗,其实也不是,在达梦数据库中,USER/ALL视图被合并在一起,且视图的前缀信息被去掉。比如TABLES中就是当前用户拥有或可以访问到的表。

只不过这些信息并不再当前用户中,而是存在于INFO_SCHEMINFORMATION_SCHEMA模式中(其中INFO_SCHEM中仅包含最常用的几个视图):

SQL>login
server name:localhost
user name:test
password:
port:12345
dm_login time used:50.451(ms)
SQL>select table_schema, table_name, table_type
2   from test.information_schema.tables
3   where table_schema in ('test', 'INFORMATION_SCHEMA');
select table_schema, table_name, table_type
from test.information_schema.tables
where table_schema in ('test', 'INFORMATION_SCHEMA');

table_schema            table_name              table_type

1       INFORMATION_SCHEMA      INFORMATION_SCHEMA_CATALOG_NAME BASE TABLE


2       test    t       BASE TABLE

3       test    T1      BASE TABLE

4       test    T_BAK   BASE TABLE

5       test    t_bool  BASE TABLE

6       test    t_char  BASE TABLE

7       test    t_date  BASE TABLE

8       test    T_INC   BASE TABLE

9       test    T_LOB   BASE TABLE

10      test    T_LOBDMBLOB     BASE TABLE

11      test    t_num   BASE TABLE

12      test    T_PART  BASE TABLE

13      test    T_TAB   BASE TABLE

14      test    t_test  BASE TABLE

15      test    t_test3 BASE TABLE

16      test    t_text  BASE TABLE

17      test    t_textDMBLOB    BASE TABLE

18      test    t_type  BASE TABLE

19      INFORMATION_SCHEMA      CHECK_CONSTRAINTS       VIEW

20      INFORMATION_SCHEMA      COLUMN_EXPLICT_IN_PRIVILEGES    VIEW

21      INFORMATION_SCHEMA      COLUMN_EXPLICT_OUT_PRIVILEGES   VIEW

22      INFORMATION_SCHEMA      COLUMN_IMPLICT_IN_BYSELF        VIEW

23      INFORMATION_SCHEMA      COLUMN_IMPLICT_IN_PRIVILEGES    VIEW

24      INFORMATION_SCHEMA      COLUMN_IMPLICT_OUT_PRIVILEGES   VIEW

25      INFORMATION_SCHEMA      COLUMN_PRIVILEGES       VIEW

26      INFORMATION_SCHEMA      COLUMNS VIEW

27      INFORMATION_SCHEMA      COLUMNS_TAB     VIEW

28      INFORMATION_SCHEMA      COLUMNS_VIEW    VIEW

29      INFORMATION_SCHEMA      KEY_COLUMN_USAGE        VIEW

30      INFORMATION_SCHEMA      REFERENTIAL_CONSTRAINTS VIEW

31      INFORMATION_SCHEMA      SCHEMATA        VIEW

32      INFORMATION_SCHEMA      TABLE_CONSTRAINTS       VIEW

33      INFORMATION_SCHEMA      TABLE_PRIVILEGES        VIEW

34      INFORMATION_SCHEMA      TABLES  VIEW

35      INFORMATION_SCHEMA      TABLES_NET      VIEW

36      INFORMATION_SCHEMA      TABLES_WITH_ID  VIEW

37      INFORMATION_SCHEMA      USAGE_PRIVILEGES        VIEW

38      INFORMATION_SCHEMA      VIEW_TABLE_USAGE        VIEW

39      INFORMATION_SCHEMA      VIEW_TABLE_USAGE_NET    VIEW

40      INFORMATION_SCHEMA      VIEW_VIEW_USAGE_NET     VIEW

41      INFORMATION_SCHEMA      VIEWS   VIEW

42      INFORMATION_SCHEMA      VIEWS_NET       VIEW

43      test    V_TEST  VIEW
43 rows got
time used: 51.986(ms) clock tick:86851070.

其中test模式下的表就是当前用户的表,而INFORMATION_SCHEMA模式下的视图,就是普通用户可以获取系统信息的视图。

只不过在达梦数据库中,没有提供全局的同义词来进行访问,所以在查询数据字典信息的时候,一般用户必须要指定模式名称。

显然达梦数据库中的静态视图要比Oracle中的USER开头的静态视图少一个数量级:

SQL> SELECT COUNT(*)                 
  2  FROM ALL_OBJECTS
  3  WHERE OBJECT_NAME LIKE 'USER_%'
  4  AND OBJECT_TYPE = 'SYNONYM';

  COUNT(*)
----------
       449

下面看看动态视图,相比静态视图而言,达梦数据库中的动态视图就更是少的可怜了,在达梦的文档中只列出了V$VERSIONV$LOCKV$SESSIONV$FILESTATV$BUFFER五个动态视图:

SQL>select * from system.sysdba.v$version;
select * from system.sysdba.v$version;

BANNER

1       DM Database Server V6.0.2.51-Build(2010.03.10)

2       DB Version: 0X1022b
2 rows got
time used: 0.413(ms) clock tick:678960.
SQL>select login_name, login_time, status
2   from system.sysdba.v$session;
select login_name, login_time, status
from system.sysdba.v$session;

login_name              login_time              status

1       SYSDBA  NULL    ACTIVE

2       SYSDBA  2010-04-12 18:49:20     ACTIVE

3       test    2010-04-12 18:54:24     ACTIVE
3 rows got
time used: 0.524(ms) clock tick:861090.

而在Oracle中动态性能视图有几百个:

SQL> SELECT COUNT(*)
  2  FROM ALL_OBJECTS
  3  WHERE OBJECT_NAME LIKE 'V$%'
  4  AND OBJECT_TYPE = 'SYNONYM';

  COUNT(*)
----------
       604

除了这些视图外,Oracle还提供了大量的系统包,来实现众多的功能:

SQL> SELECT COUNT(*)
  2  FROM DBA_OBJECTS
  3  WHERE OBJECT_NAME LIKE 'DBMS%'
  4  AND OBJECT_TYPE = 'PACKAGE';

  COUNT(*)
----------
       531

在达梦数据库中,虽然在SYSDBA用户下也提供了一些过程和函数,但是这个数量也要比Oracle少一个数量级。

显然对于达梦数据库而言,数据字典信息以及在数据库中提供的各种过程和函数,仍然是一个短板,对于使用Oracle习惯的用户在使用达梦数据库的时候会有不方便、不透明的感觉,这应该是达梦数据库进一步完善的方面。

 

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

转载于:http://blog.itpub.net/4227/viewspace-668798/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值