DB2數據庫
本章介紹DB2的創建,激活和停用數據庫的相關語法。
數據庫體係結構
數據庫是表,模式,緩衝池,日誌,存儲組和表空間合作有效地處理數據庫操作的集合。
數據庫目錄
數據庫目錄有組織的存儲數據庫。當創建一個數據庫,所有有關數據庫的詳細信息存儲在一個數據庫目錄,如默認存儲設備,配置文件和臨時表清單等詳細信息
分區全局目錄是在實例文件夾中創建。該目錄包含關於數據庫中的所有全局信息。這個分區全局目錄被命名為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