達夢6.0試用之資料字典

yangtingkun發表於2010-07-22

前幾天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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章