DB2 - 資料庫



本章描述了建立、啟用和停用資料庫以及相關的語法。

資料庫架構

Database Architecture

資料庫是由表、模式、緩衝池、日誌、儲存組和表空間共同工作以高效處理資料庫操作的集合。

資料庫目錄

資料庫目錄是資料庫的有組織的儲存庫。建立資料庫時,所有關於資料庫的詳細資訊都儲存在資料庫目錄中,例如預設儲存裝置的詳細資訊、配置檔案和臨時表列表等。

分割槽全域性目錄在例項資料夾中建立。此目錄包含與資料庫相關的所有全域性資訊。此分割槽全域性目錄命名為 NODExxxx/SQLyyy,其中 xxxx 是資料分割槽號,yyy 是資料庫令牌。

在分割槽全域性目錄中,建立成員特定目錄。此目錄包含本地資料庫資訊。成員特定目錄命名為 MEMBERxxxx,其中 xxxx 是成員編號。DB2 Enterprise Server Edition 環境執行在單個成員上,並且只有一個成員特定目錄。此成員特定目錄唯一命名為 MEMBER0000。

分割槽全域性目錄

目錄位置:<例項>/NODExxx/SQLxxx

分割槽全域性目錄包含如下列出的與資料庫相關的檔案。

  • 全域性死鎖寫入檔案事件監控檔案
  • 表空間資訊檔案 [SQLSPCS.1, SQLSPCS.2]
  • 儲存組控制檔案 [SQLSGF.1, SQLSGF.2]
  • 臨時表空間容器檔案。[/儲存路徑//T0000011/C000000.TMP/SQL00002.MEMBER0001.TDA]
  • 全域性配置檔案 [SQLDBCONF]
  • 歷史檔案 [DB2RHIST.ASC, DB2RHIST.BAK, DB2TSCHG.HIS, DB2TSCHG.HIS]
  • 與日誌記錄相關的檔案 [SQLOGCTL.GLFH.1, SQLOGCTL.GLFH.2]
  • 鎖定檔案 [SQLINSLK, SQLTMPLK]
  • 自動儲存容器

成員特定目錄

目錄位置:/NODExxxx/SQLxxxx/MEMBER0000

此目錄包含

  • 與資料庫關聯的物件
  • 緩衝池資訊檔案 [SQLBP.1, SQLBP.2]
  • 本地事件監控檔案
  • 與日誌記錄相關的檔案 [SQLOGCTL.LFH.1, SQLOGCTL.LFH.2, SQLOGMIR.LFH]。
  • 本地配置檔案
  • 死鎖事件監控檔案。對於 ESE 和分割槽資料庫環境,詳細的死鎖事件監控檔案儲存在目錄節點的資料庫目錄中。

建立資料庫

您可以使用“CREATE DATABASE”命令在例項中建立資料庫。所有資料庫都是使用在建立例項時建立的預設儲存組“IBMSTOGROUP”建立的。在 DB2 中,所有資料庫表都儲存在“表空間”中,表空間使用各自的儲存組。

資料庫的許可權會自動設定為 PUBLIC [CREATETAB, BINDADD, CONNECT, IMPLICIT_SCHEMA 和 SELECT],但是,如果存在 RESTRICTIVE 選項,則不會將許可權授予 PUBLIC。

建立非限制性資料庫

此命令用於建立非限制性資料庫。

語法:[建立新資料庫。‘database_name’表示要建立的新資料庫名稱。]

db2 create database <database name>

示例:[建立名為‘one’的新非限制性資料庫]

db2 create database one

輸出

DB20000I The CREATE DATABASE command completed successfully.

建立限制性資料庫

呼叫此命令建立限制性資料庫。

語法:[在下面的語法中,“db_name”表示資料庫名稱。]

db2 create database <db_name> restrictive 

示例:[建立名為‘two’的新限制性資料庫]

db2 create database two restrictive 

使用不同的使用者定義位置建立資料庫

在不同的路徑上使用預設儲存組“IBMSTOGROUP”建立一個數據庫。之前,您呼叫“create database”命令沒有任何使用者定義的位置來在特定位置儲存或建立資料庫。要使用使用者定義的資料庫位置建立資料庫,請按照以下步驟操作

語法:[在下面的語法中,‘db_name’表示‘資料庫名稱’,‘data_location’表示必須在資料夾中儲存資料的位置,‘db_path_location’表示‘data_location’的驅動器位置。]

db2 create database '<db_name>' on '<data location>' dbpath on '<db_path_location>'  

示例:[建立名為‘four’的資料庫,其中資料儲存在‘data1’中,此資料夾儲存在‘dbpath1’中]

db2 create database four on '/data1' dbpath on '/dbpath1'

檢視本地或系統資料庫目錄檔案

執行此命令以檢視當前例項中可用的目錄列表。

語法

db2 list database directory 

示例

db2 list database directory 

輸出

 System Database Directory  
 Number of entries in the directory = 6  
 Database 1 entry:  
 Database alias                       = FOUR  
 Database name                        = FOUR  
 Local database directory             = 
 /home/db2inst4/Desktop/dbpath  
 Database release level               = f.00  
 Comment                              =  
 Directory entry type                 = Indirect  
 Catalog database partition number    = 0  
 Alternate server hostname            =  
 Alternate server port number         =  
Database 2 entry: 
Database alias                       = SIX  
Database name                        = SIX  
Local database directory             = /home/db2inst4  
Database release level               = f.00  
Comment                              =  
Directory entry type                 = Indirect  
Catalog database partition number    = 0  
Alternate server hostname            =  
Alternate server port number         = 

啟用資料庫

此命令啟動特定資料庫所需的所有服務,以便資料庫可供應用程式使用。

語法:[‘db_name’表示資料庫名稱]

db2 activate db <db_name> 

示例:[啟用資料庫‘one’]

db2 activate db one  

停用資料庫

使用此命令,您可以停止資料庫服務。

語法

db2 deactivate db <db_name>

示例:[停用資料庫‘one’]

db2 deactivate db one

連線到資料庫

建立資料庫後,要使用它,需要連線或啟動資料庫。

語法

db2 connect to <database name> 

示例:[將資料庫 one 連線到當前 CLI]

db2 connect to one 

輸出

 Database Connection Information  
 Database server        = DB2/LINUXX8664 10.1.0  
 SQL authorization ID   = DB2INST4  
 Local database alias   = ONE  

驗證資料庫是否為限制性資料庫

要檢查此資料庫是否為限制性資料庫,請使用以下語法

語法:[在以下語法中,‘db’表示資料庫,‘cfg’表示配置,‘db_name’表示資料庫名稱]

db2 get db cfg for <db_name> | grep -i restrict 

示例:[檢查資料庫‘one’是否受限]

db2 get db cfg for one | grep -i restrict  

輸出

Restrict access                       = NO   

配置資料庫管理器和資料庫

例項配置(資料庫管理器配置)儲存在名為“db2system”的檔案中,資料庫相關配置儲存在名為“SQLDBCON”的檔案中。這些檔案不能直接編輯。您可以使用呼叫 API 的工具編輯這些檔案。使用命令列處理器,您可以使用這些命令。

資料庫管理器配置引數

語法:[獲取例項資料庫管理器的資訊]

db2 get database manager configuration   
db2 get dbm cfg   

語法:[更新例項資料庫管理器]

db2 update database manager configuration   
db2 update dbm cfg  

語法:[重置以前的配置]

db2 reset database manager configuration  
db2 reset dbm cfg  

資料庫配置引數

語法:[獲取資料庫的資訊]

db2 get database configuration   
db2 get db cfg  

語法:[更新資料庫配置]

db2 update database configuration    
db2 update db cfg  

語法:[重置資料庫配置中先前配置的值]

db2 reset database configuration     
db2 reset db cfg   

語法:[檢查當前活動資料庫的大小]

db2 "call get_dbsize_info(?,?,?,-1)"      

示例:[驗證當前啟用資料庫的大小]

db2 "call get_dbsize_info(?,?,?,-1)"      

輸出

Value of output parameters   
--------------------------   
Parameter Name  : SNAPSHOTTIMESTAMP   
Parameter Value : 2014-07-02-10.27.15.556775  
Parameter Name  : DATABASESIZE   
Parameter Value : 105795584  
Parameter Name  : DATABASECAPACITY   
Parameter Value : 396784705536  
Return Status = 0    

估算資料庫所需空間

要估算資料庫的大小,必須考慮以下因素的貢獻

  • 系統目錄表
  • 使用者表資料
  • 長欄位資料
  • 大型物件 (LOB) 資料
  • 索引空間
  • 臨時工作空間
  • XML 資料
  • 日誌檔案空間
  • 本地資料庫目錄
  • 系統檔案

檢查資料庫許可權

您可以使用以下語法檢查在非限制性資料庫上授予 PUBLIC 的資料庫許可權。

步驟 1:使用例項的認證使用者 ID 和密碼連線到資料庫。

語法:[使用使用者名稱和密碼連線到資料庫]

db2 connect to <db_name> user <userid> using <password>      

示例:[使用使用者 ID ‘db2inst4’ 和密碼 ‘db2inst4’ 連線“one”資料庫]

db2 connect to one user db2inst4 using db2inst4       

輸出

 Database Connection Information  
 Database server        = DB2/LINUXX8664 10.1.0  
 SQL authorization ID   = DB2INST4  
 Local database alias   = ONE        

步驟 2:驗證資料庫的許可權。

語法:[以下語法顯示當前資料庫的許可權服務結果]

db2 "select substr(authority,1,25) as authority, d_user, d_group, 
d_public, role_user, role_group, role_public,d_role from table( 
sysproc.auth_list_authorities_for_authid ('public','g'))as t 
order by authority"      

示例

db2 "select substr(authority,1,25) as authority, d_user, d_group, 
d_public, role_user, role_group, role_public,d_role from table( 
sysproc.auth_list_authorities_for_authid ('PUBLIC','G'))as t 
order by authority"       

輸出

AUTHORITY                 D_USER D_GROUP D_PUBLIC ROLE_USER ROLE_GROUP ROLE_PUBLIC D_ROLE  
------------------------- ------ ------- -------- --------- ---------- ----------- ------  
ACCESSCTRL                *      *       N        *         *          N           *       
BINDADD                   *      *       Y        *         *          N           *       
CONNECT                   *      *       Y        *         *          N           *       
CREATETAB                 *      *       Y        *         *          N           *       
CREATE_EXTERNAL_ROUTINE   *      *       N        *         *          N           *       
CREATE_NOT_FENCED_ROUTINE *      *       N        *         *          N           *       
CREATE_SECURE_OBJECT      *      *       N        *         *          N           *       
DATAACCESS                *      *       N        *         *          N           *       
DBADM                     *      *       N        *         *          N           *       
EXPLAIN                   *      *       N        *         *          N           *       
IMPLICIT_SCHEMA           *      *       Y        *         *          N           *       
LOAD                      *      *       N        *         *          N           *       
QUIESCE_CONNECT           *      *       N        *         *          N           *       
SECADM                    *      *       N        *         *          N           *       
SQLADM                    *      *       N        *         *          N           *       
SYSADM                    *      *       *        *         *          *           *       
SYSCTRL                   *      *       *        *         *          *           *       
SYSMAINT                  *      *       *        *         *          *           *       
SYSMON                    *      *       *        *         *          *           *       
WLMADM                    *      *       N        *         *          N           *         
20 record(s) selected. 

刪除資料庫

使用 Drop 命令,您可以從例項資料庫目錄中刪除資料庫。此命令可以刪除其所有物件、表、空間、容器和關聯檔案。

語法:[從例項中刪除任何資料庫]

db2 drop database <db_name>

示例:[從例項中刪除‘six’資料庫]

db2  drop database six 

輸出

DB20000I The DROP DATABASE command completed successfully 
廣告