b418.png

在金倉數據庫中,一個數據庫是數據庫對象的集合。通常每個數據庫對象屬於並且只屬於一個數據庫。更準確地説,一個數據庫是一個模式的集合,而模式包含表、函數等等各種數據庫對象。因此數據庫的完整層次應該包含如下組成部分:數據庫服務器、數據庫、模式、表或者某些其他對象類型,如存儲過程、存儲函數等等。當連接到數據庫服務器時,客户端必須在它的連接請求中指定它要連接的數據庫名,通過數據庫實例來操作數據庫中的對象。用户可能是在同一個數據庫裏,但可能在不同的模式中。

image.png
點擊這裏查看視頻講解:【趙渝強老師】國產金倉數據庫的數據庫

下面的步驟將查看金倉數據庫中的數據庫信息。 (1)使用ksql連接數據庫實例。

$ ksql -U system -d kingbase
用户 system 的口令:
授權類型: 企業版.
輸入 "help" 來獲取幫助信息.

kingbase=# 

(2)查看已經存在的數據庫實例。

kingbase=# \l

# 輸出的信息如下:
                                        數據庫列表
   名稱    | 擁有者 | 字元編碼 |  校對規則   |    Ctype    | ICU 排序 |     存取權限      
-----------+--------+----------+-------------+-------------+----------+-------------------
 kingbase  | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |          | 
 security  | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |          | 
 template0 | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |          | =c/system        +
           |        |          |             |             |          | system=CTc/system
 template1 | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |          | =c/system        +
           |        |          |             |             |          | system=CTc/system
 test      | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |          | 
(5 行記錄)

(3)查詢現有數據庫的集合,也可以查詢系統表sys_database。

kingbase=# select datname from sys_database;

# 輸出的信息如下:
  datname  
-----------
 test
 kingbase
 template1
 template0
 security
 scott
(6 行記錄)

這裏需要注意以下兩點:

  • 創建數據庫時實際上通過拷貝一個已有數據庫進行工作的。在默認情況下,將拷貝名為template1的標準系統數據庫。所以該數據庫是創建新數據庫的“模板”。如果為template1數據庫增加對象,這些對象將被拷貝到後續創建的用户數據庫中。這種行為允許對數據庫中標準對象集合的進行修改。例如,如果把過程語言PL/Perl安裝到template1中,那麼在創建用户數據庫後不需要額外的操作就可以使用該語言。
  • 系統裏還有名為template0的第二個標準系統數據庫。這個數據庫包含和template1初始內容一樣的數據,但只包含KingBase版本預定義的標準對象。在數據庫集羣被初始化之後,不應該對template0做任何修改。在創建數據庫時通過指示使用template0取代template1進行拷貝,可以創建一個“純淨的”用户數據庫,它不會包含任何template1中的站點本地附加物。

image.png

執行下面的語句可以查看當前已存在的數據庫信息。

kingbase=# select oid,datname,datistemplate,datallowconn from sys_database;

# 輸出的信息如下:
  oid  |  datname  | datistemplate | datallowconn 
-------+-----------+---------------+--------------
 14791 | test      | f             | t
 14792 | kingbase  | f             | t
     1 | template1 | t             | t
 14790 | template0 | t             | f
 14793 | security  | f             | t
 16384 | scott     | f             | t
(6 行記錄)

其中有兩個有用的標識:

  • datistemplate可以被設置來指示該數據庫是不是要作為創建數據庫的模板。如果設置了這個標誌,那麼該數據庫可以被任何有createdb權限的用户克隆;如果沒有被設置,那麼只有超級用户和該數據庫的擁有者可以克隆它。
  • 如果datallowconn為false,那麼將不允許與該數據庫建立任何新的連接。但已有的會話不會因為把該標誌設置為false而被中止。

template0通常被標記為datallowconn = false來阻止對它的修改。template0和template1通常總是被標記為datistemplate = true。

image.png