在金倉數據庫中,一個數據庫是數據庫對象的集合。通常每個數據庫對象屬於並且只屬於一個數據庫。更準確地説,一個數據庫是一個模式的集合,而模式包含表、函數等等各種數據庫對象。因此數據庫的完整層次應該包含如下組成部分:數據庫服務器、數據庫、模式、表或者某些其他對象類型,如存儲過程、存儲函數等等。當連接到數據庫服務器時,客户端必須在它的連接請求中指定它要連接的數據庫名,通過數據庫實例來操作數據庫中的對象。用户可能是在同一個數據庫裏,但可能在不同的模式中。
| 點擊這裏查看視頻講解:【趙渝強老師】國產金倉數據庫的數據庫 |
下面的步驟將查看金倉數據庫中的數據庫信息。 (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中的站點本地附加物。
執行下面的語句可以查看當前已存在的數據庫信息。
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。