DB2數據庫


本章介紹DB2的創建,激活和停用數據庫的相關語法。

數據庫體系結構

Database Architecture

數據庫是表,模式,緩衝池,日誌,存儲組和表空間合作有效地處理數據庫操作的集合。

數據庫目錄

數據庫目錄有組織的存儲數據庫。當創建一個數據庫,所有有關數據庫的詳細信息存儲在一個數據庫目錄,如默認存儲設備,配置文件和臨時表清單等詳細信息

分區全局目錄是在實例文件夾中創建。該目錄包含關於數據庫中的所有全局信息。這個分區全局目錄被命名爲NODExxxx/ SQLyyy,其中xxxx是數據分區號,yyy是數據庫令牌。

在分區全局目錄,成員特定的目錄創建。該目錄包含本地數據庫的信息。會員專用目錄被命名爲MEMBERxxxx其中xxxx是一個成員號。 DB2企業服務器版環境中運行在單一的成員,只有一個成員的具體目錄。這個成員的特定目錄唯一命名爲MEMBER0000。

分區全局目錄

目錄位置:<instance>/NODExxx/SQLxxx

分區全局目錄包含下面列出的數據庫相關的文件。

  • 全局死鎖寫入到文件的事件監控文件
  • 表空間信息文件 [SQLSPCS.1, SQLSPCS.2]
  • 存儲組控制文件 [SQLSGF.1, SQLSGF.2]
  • 臨時表空間容器文件 [/storage path/ /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中,所有的數據庫表都存儲在「tablespace」,它利用各自的存儲組。

該權限的數據庫被自動設置爲PUBLIC[CREATETAB,BINDADD,CONNECT,IMPLICIT_SCHEMA,並選擇],但是,如果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> 

示例: [連接數據庫到當前的一個 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。

第一步:驗證用戶名和實例的密碼連接到數據庫。

語法:[連接到數據庫的用戶名和密碼]

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

例如:爲了連接「one」數據庫,用戶ID'db2inst4'和密碼'db2inst4']

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        

第二步:驗證數據庫的權限。

語法:[下面的語法顯示認證服務,爲當前數據庫的結果]

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