1. 程式人生 > >DB2資料庫-庫級別配置-編碼、schema以及表空間配置

DB2資料庫-庫級別配置-編碼、schema以及表空間配置

編碼格式的配置。

使用db2 get db cfg for databasename命令查詢,可以看到程式碼集為UTF-8
例如

db2 get db cfg for test,

得到如下結果。
在這裡插入圖片描述
如需要注意的時,資料庫建庫時一旦指定了程式碼集,則不能修改,只能刪除重建。
建庫sql語句:
Create database test using codeset UTF-8 territory zh_cn;
如果使用資料庫管理工具建庫,注意修改程式碼集。
相關資料查閱:
https://happyqing.iteye.com/blog/2085292 db2檢視資料庫程式碼集(字符集、編碼)

https://happyqing.iteye.com/blog/2085290 DB2資料庫三種級別字符集的設定

DB2 SCHEMA配置

先了解一下DB2的基本概念

DB2資料庫幾個概念
1、instance, 同一臺機器上可以安裝多個DB2 instance。
2、database, 同一個instance下面可以建立有多個database。
3、schema, 同一個database下面可以配置多個schema。
4、table,同一個schema下可以建立多個table

DB2的schema物件和user物件

每一個DB2授權使用者都有一個對應的schema,其名字和使用者名稱相同;當然也可以再建立新的schema;這樣DB2中user和schema是一種一對多的關係,而Oracle中是一對一的關係。
每一個schema都有一個屬主(即所屬使用者),這個屬主在建立scheme的時候指定,如果沒有指定值,預設即當前使用者,也就是說誰建立了這個schema,那麼這個schema就屬於誰。
對於每一個數據庫connection,預設操作都是在其相同使用者名稱的schema下面,除非使用者顯示的更改了當前schema。
DB2 schema相關SQL語句

CREATE SCHEMA <schema-name> [AUTHORIZATION <schema-owner-name>]

DROP SCHEMA <schema-name> RESTRICT
SELECT CURRENT SCHEMA FROM SYSIBM.SYSDUMMY1
SELECT CURRENT USER FROM SYSIBM.SYSDUMMY1
SET CURRENT SCHEMA = <schema-name>

原文:https://www.jianshu.com/p/e1f38505f789
所以我們在設定資料庫連線URL的時候,不僅要指定database,也需要指定當前模型。

jdbc:db2://127.0.0.1:50000/test:currentSchema=DB2_TEST;

在指定資料庫後加上 “:currentSchema=SCHEMA_NAME”,這裡需要注意的是,模型的指定是區分大小寫的。

DB2表空間及緩衝池的配置

在辛苦建庫並完成配置,當你以為大功告成只需要匯入sql檔案完成建表的時候,你會發現建表的時候報瞭如下的異常
DB2 SQL Error: SQLCODE=-286, SQLSTATE=42727,
這是因為表空間不足的原因造成的,當然前提你的表得大到超出系統預設設定的表空間。
我們先了解一下表空間相關的理論。

表空間理論

表空間是資料庫系統中資料庫邏輯結構與作業系統物理結構之間建立對映的重要儲存結構,它作為資料庫與實際存放資料的容器之間的中間層,用於指明資料庫中資料的物理位置。任何資料庫的建立都必須顯式或隱式的為其指定表空間,且資料庫中的所有資料都位於表空間中。
DB2資料庫系統的表空間有三種管理型別:

系統管理表空間(SMS,System-Managed Space)

SMS表空間由作業系統的檔案系統管理器分配並管理。

資料庫管理表空間(DMS,Database-Managed Space)

DMS表空間由資料庫管理系統(DBMS)自己管理控制,本質上講,這種型別的表空間是為了最大程度滿足資料庫管理器的需要而設計並實現的一種特定目的的檔案系統。

DMS自動儲存表空間(Automatic Storage DMS)

自動儲存表空間不是真正意義上的獨立型別的表空間。它是DMS儲存的另外一種處理方法。

上述是按照管理方式的不同對資料庫表空間型別進行了劃分,事實上,根據用途的不同,表空間也可以劃分為五種型別:

系統表空間(SYSCATSPACE)

系統工具表空間(SYSTOOLSPACE)

使用者表空間(USERSPACE)

使用者表空間也是資料庫建立時自動建立的,表空間名稱為USERSPACE1,資料庫中的使用者表預設存放於這個表空間中,使用者表空間是可選的,一個數據庫可以有多個使用者表空間。必須至少有一個使用者表空間(沒有使用者表空間的話資料庫無法存放使用者資料)。使用者表空間也可以是SMS表空間或DMS表空間,通常使用DMS表空間。

臨時表空間(TEMPSPACE)

常規表空間

轉自:https://blog.csdn.net/mydriverc2/article/details/81287476 深入理解DB2表空間(Tablespace)

緩衝池理論

一個緩衝池是與單個數據庫相關聯的,可以被多個表空間使用。當考慮將緩衝池用於一個或多個表空間時,必須保證表空間頁大小和緩衝池頁大小對於緩衝池所“服務”的所有表空間而言都是一樣的。一個表空間只能使用一個緩衝池。
建立資料庫時,會建立一個名為 IBMDEFAULTBP 的預設緩衝池,所有的表空間都共享該緩衝池。可以使用 CREATE BUFFERPOOL 語句新增更多的緩衝池。緩衝池的預設大小是 BUFFPAGE 資料庫配置引數所指定的大小,但是可以通過在 CREATE BUFFERPOOL 命令中指定 SIZE 關鍵字來覆蓋該預設值。足夠的緩衝池大小是資料庫擁有良好效能的關鍵所在,因為它可以減少磁碟 I/O 這一最耗時的操作。大型緩衝池還會對查詢優化產生影響,因為更多的工作可在記憶體中完成。
原文:https://blog.csdn.net/crq876/article/details/62218330 DB2緩衝池、表空間詳解

其他查閱資料:

https://www.ibm.com/developerworks/cn/data/library/techarticles/0212wieser/0212wieser.html 表空間和緩衝池
https://blog.csdn.net/tazimi16/article/details/78119777 DB2緩衝池檢視,修改,DB2事務日誌已滿解決方法等知識

我個人的理解,緩衝池其實就是一個儲存轉發的作用,在你首次進行一次select查詢的時候,資料需要從系統中取到緩衝池,再形成查詢結果,如果你訪問的資訊在緩衝池就直接在緩衝裡面拿,這對於降低資料庫壓力,提高資料庫效能和速度有明顯的效果。
譬如一個簡單的資料庫查詢語言,如果你的第二次查詢沒有改變整個查詢語句的語義結構,那麼時間就會大大縮短。

解決-error SQL:-286錯誤

轉自 https://blog.csdn.net/m0_37373806/article/details/56843471

一、首先建立一個頁大小為32K的緩衝池

Sql語句:

CREATE BUFFERPOOL buf1 IMMEDIATE SIZE 250 NUMBLOCKPAGES 108 BLOCKSIZE 32 PAGESIZE 32 K 

或者在命令列輸入

db2 "CREATE BUFFERPOOL buf1 IMMEDIATE SIZE 250 NUMBLOCKPAGES 108 BLOCKSIZE 32 PAGESIZE 32 K"

其中 buf1 為緩衝池名

二、然後建立一個頁大小為32K的表空間

Sql語句:

CREATE LARGE TABLESPACE ts2 PAGESIZE 32 K MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 32 OVERHEAD 10.5 PREFETCHSIZE 32 TRANSFERRATE 0.14 BUFFERPOOL buf1 ;

或者在命令列輸入

db2 "CREATE LARGE TABLESPACE ts2 PAGESIZE 32 K MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 32 OVERHEAD 10.5 PREFETCHSIZE 32 TRANSFERRATE 0.14 BUFFERPOOL buf1"

其中 ts2 為表空間名

三、最後修改事務日誌大小

命令列命令:

db2 update db cfg using LOGFILSIZ 10240 --日誌檔案大小
db2 update db cfg using LOGPRIMARY 100 --主日誌檔案個數
db2 update db cfg using LOGSECOND 100 --輔助日誌檔案的個數

修改完成後重啟DB2服務,

db2stop force
db2start

關於事務日誌滿的解決辦法,可以查閱
https://blog.csdn.net/oqzuser1234567445/article/details/52503964 db2事務日誌滿,或者日誌磁碟空間已滿解決辦法
關於其原理,可以查閱
https://www.cnblogs.com/BradMiller/p/3198126.html DB2事務日誌
http://tech.it168.com/a2008/1124/211/000000211841.shtml DB2事務日誌使用經驗

簡單來說,事務日誌記錄資料庫中所有物件和資料的改變,如果當前活動事務使用空間超過事務日誌空間,則會報事務日誌已滿異常,需要關閉導致此異常的應用程式或者事務,增大事務日誌空間將有效避免此類問題。