當前位置:首頁 » 硬碟大全 » db2緩存溢出
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

db2緩存溢出

發布時間: 2023-02-23 05:54:36

① db2 如何計算表空間和表緩存空間

BufferPool的大小 = 每頁的大小(PageSize) X 頁數(Size)
如下面這一句之中,申請了900000個大小為16384(16K)的頁, 所以BufferPool的總大小是: 900000 * 16K = 14400000K = 14064.5M = 13.73G. 即表緩存的空間是13.73G
CREATE BUFFERPOOL "BP16" SIZE 900000 PAGESIZE 16384 NOT EXTENDED STORAGE;

創建表空間的時候,可以指定PageSize的大小,以及其所佔空間的大小。 對已有的tablespace可以通過Total Pages * PageSize計算表空間的大小。

如下命令可以查看當前的tablespace的狀況:
db2=> List tablespaces show detail
Tablespace ID = 2
Name = USERSPACE1
Type = Database managed space
Contents = All permanent data. Large table space.
State = 0x0000
Detailed explanation:
Normal
Total pages = 8192 //表空間中的頁總數
Useable pages = 8160
Used pages = 2912
Free pages = 5248
High water mark (pages) = 2912
Page size (bytes) = 4096 //表空間的頁面大小。
Extent size (pages) = 32
Prefetch size (pages) = 32
Number of containers = 1

該UserSpace1的實際大小是8192 * 4K = 32M

② db2 25000錯誤怎麼解決

DB2相關問題及解決方法:
一、DB2中的代碼頁(codepage)問題。
DB2備份時發生過代碼頁錯誤的問題,修改代碼頁後備份正常,但創建資料庫時又發生代碼頁的錯誤。這是DB2伺服器使用的代碼頁配置和客戶端使用的代碼頁配置不同造成的(註:DB2伺服器的代碼頁配置是獨立的,用代碼頁不同的客戶端操作伺服器就會產生錯誤。本機操作伺服器稱為本地客戶端,操作系統使用的代碼頁有可能和DB2伺服器的配置不同,和遠程客戶端一樣會產生上面的問題)。代碼頁和系統使用的字元集有關,這也是windows下的資料庫備份和Linux下的資料庫備份不能相互恢復的原因(Windows的codepage為819,一般的國標庫/GBK為1386)。可用db2set命令對伺服器的代碼頁進行設置。(具體設置見後文)
locale命令查看本地字元集
二、TIANJIN資料庫備份不能恢復的問題
TIANJIN資料庫備份恢復時,在Linux系統下提示container被佔用,這是由於TIANJIN資料庫採用了系統以外的表空間引起的,不能採用常規方法進行恢復。
恢復步驟為:
db2 create db targetdb using codeset GBK territory zh_CN
(創建資料庫供恢復)

db2 connect to tianjin
(連接到TIANJIN資料庫)
db2 list tablespaces
(查看TIANJIN資料庫使用的表空間)
db2 list tablespace containers for 3
(查看錶空間3使用的容器)
…………
db2 list tablespace containers for 7
(查看錶空間7使用的容器。)
(TIANJIN資料庫用到了7個表空間,其中1、2為系統默認,其他為自己創建,若已知道資料庫表空間,以上步驟可省略)

mkdir [directory]
(創建表空間用到的容器所在目錄。需要多少容器,創建多少個目錄,這個目錄必須是DB2用戶有許可權的目錄)

db2 connect reset
(釋放所有連接)

db2 restore db sourcedb from /DB2Data/backupdata/ into targetdb redirect
(恢復資料庫)

db2 "set tablespace containers for 3 using (path '/home/db2inst1/tt/1')"
(設置表空間的容器,path後是容器存放的路徑)
db2 "set tablespace containers for 4 using (path '/home/db2inst1/tt/2',path '/home/db2inst1/tt/3')"
(表空間用了多個路徑的情況)
…………
db2 "set tablespace containers for 7 using (path '/home/db2inst1/tt/6')"

db2 restore db tianjin continue
(完成資料庫恢復)

連接資料庫驗證安裝即可
三、不同操作系統中資料庫的移動(db2move)
由於我們的系統中使用了多個用戶、多個表空間,不能直接用db2move進行恢復,必須先生成相關表空間和表,再插入數據。
1、 生成ddl文件
db2look -d 資料庫別名 -e -p -l -o 目標文件的名字-i 用戶名 -w 密碼
-d指定資料庫,-o指定目標文件,-l表示生成表空間,-i指定用戶名,-w指定密碼。
如:db2look -d jsyrem -e -p -l -o jsyrem.ddl -i zgc3 -w zgc
注意:源資料庫必須在本地客戶端編目,生成的文件存放在當前目錄下。
2、 生成db2move的導出文件
db2move資料庫別名export -l 大對象存放目錄(可省略) -u 用戶名 -p 密碼
如:db2move jsyrem export -l lob -u zgc3 -p zgc
注意:源資料庫必須在本地客戶端編目,大對象存放目錄可以不用事先建立,由系統自動生成,生成的文件存放在當前目錄下。
3、 新建目標資料庫
4、 在目標資料庫里創建表空間和表
db2 -tvf ddl文件名
例如:db2 -tvf jsyrem.ddl
注意:
①兩個資料庫里的代碼頁必須設置為一致
②執行命令前必須先修改ddl文件,設置裡面的connection連接至目標資料庫(文件里可能會有多處需要對連接進行設置)。
③執行命令前必須先修改ddl文件,設置表空間地址,為目標資料庫建立表空間指定存放位置。這些目錄可能需要事先建好。(目錄1、2……n可以不用建,由系統自動生成)
④執行命令必須在生成的文件存放的目錄下進行。
5、 導入數據
db2move 資料庫名 import -io insert -l大對象存放目錄
-io 指定導入方式,為create表示資料庫中不存在該表時自動生成表,為replace表示替換原有內容,為insert表示僅僅插入數據;-l指定大對象存放目錄。
db2move jsy2 import –u 用戶名 –p 密碼
注意:執行命令必須在生成的文件存放的目錄下進行。
6、 其他:由於資料庫表之間存在鍵關系,數據導入時可能會發生沖突,需要記下發生沖突的表,並修改db2move.lst文件,把這些表對應的行挪到文件的最後生成。
7、 可通過EXPORT文件和IMPORT文件查看數據導入導出時的系統信息,通過tablennn.msg文件查看某個表導入導出時的系統信息。
注意:以上操作針對的客戶端是windows操作系統,linux系統下會發生錯誤。

資料庫創建
首先建立文件夾
#mkdir /ecdsdbfs
授權給db2inst1訪問ecdsdbfs文件夾的許可權
#chown db2inst1:db2adm1 /ecdsdbfs
執行建庫腳本
#su – db2inst1
$db2 create database test on '/opt/ibm/data' using codeset utf-8 territory cn
注意:本資料庫採用utf-8格式

1> 連接到DB2 Server,打開DB2 Command,創建一個名為cogsam83的資料庫,並為其建立緩存大小
create db cogsam83 alias cogsam83 using codeset UTF-8 territory CA
change db cogsam83 comment with 'Sample Data for Cognos 8.3'
connect to cogsam83
update db cfg using applheapsz 1024 deferred
update db cfg using locktimeout 240 deferred
connect reset
如果是在Linux上剛裝完DB2即刻建立database,可能會遇到錯誤DB21019E An error occurred while accessing the directory "/root". 該錯誤原因為使用「su username」而非「su - username」在終端切換用戶,前者相當於簡單地同時登錄有用戶,而後者相當於注銷後重新登錄新用戶,所以不會維持之前用戶的ENV設置。
2> 創建緩沖池和表空間
connect to cogsam83
create bufferpool cog04kbp immediate size 250 pagesize 4k
create bufferpool cog08kbp immediate size 250 pagesize 8k
create bufferpool cog16kbp immediate size 250 pagesize 16k
create regular tablespace cogsample pagesize 16k managed by automatic storage extentsize 16 prefetchsize 16 overhead 10.5 transferrate 0.33 bufferpool cog16kbp
comment on tablespace cogsample is 'Cognos Sample Data'
grant use of tablespace cogsample to public
connect reset
3> 創建幾個資料庫模式(Database Schema)
connect to cogsam83
create schema gosl
comment on schema gosl is 'GO Sales'
create schema gosldw
comment on schema gosldw is 'GO Sales Data Warehouse'
create schema gohr
comment on schema gohr is 'GO Sales Human Resources'
create schema gort
comment on schema gort is 'GO Retailers'
create schema gomr
comment on schema gomr is 'GO Multilingual Retailers'
create schema godmt
comment on schema godmt is 'GO Data Manager Target'
#授予用戶cognos資料庫管理許可權
grant dbadm on database to user cognos
connect reset
4> 修改資料庫配置頁
connect to cogsam83
update dbm cfg using intra_parallel NO
update dbm cfg using federated NO
update dbm cfg using fed_noauth NO
update db cfg for cogsam83 using maxlocks 22
update db cfg for cogsam83 using locklist 50
update db cfg for cogsam83 using dft_degree 1
update db cfg for cogsam83 using avg_appls 1
update db cfg for cogsam83 using stmtheap 2048
update db cfg for cogsam83 using dft_queryopt 5
connect reset
5> 編目資料庫
catalog tcpip node dbnode remote dbhost server 50000
catalog database cogsam83 at node dbnode with 'Sample Data for Cogsam 8'
6> 導入Samples內容到資料庫中
適用於DB2的Samples文件在 Cognos安裝目錄/c8/webcontent/samples/datasources/db2 下,將GS_DB.tar解壓出來,用DB2管理員帳號登錄,使用DB2MOVE命令導入。
DB2MOVE dbname IMPORT -U username -P password
在Linux下使用DB2MOVE命令可能會出現錯誤提示Error opening report file. Terminating,該錯誤原因為當前用戶對解壓出的文件許可權不夠,設置所有解壓的文件Permission為可寫操作即可。
導入資料庫後可以運行 Cognos安裝目錄/c8/webcontent/samples/datasources/db2下的gs_db_modify.bat(需要先更改gs_db_modify.sql第一行中的dbname, user, password為你自己的配置),在Linux下可以先刪除gs_db_modify.log,然後在終端手動輸入以下命令運行gs_db_modify.sql
DB2 -f gs_db_modify.sql -z gs_db_modify.log

四、聯合數據對象的建立
聯合數據對象提供將一個資料庫里的用戶和表映射到另一個資料庫的功能。用戶可通過對後者的訪問達到訪問前者的目的。
建立步驟:
1、 前期工作1:配置資料庫實例名的參數,設置「管理」下的FEDERATED為「」;是
2、 前期工作2:源資料庫編碼到客戶端
3、 在聯合資料庫對象中創建包裝器。(DB2àDB2的映射包裝器名選擇DRDA,庫名使用預設的預設db2drda.dll即可)
4、 創建伺服器。(遠程數據源的名稱填寫資料庫編碼的別名,DB2àDB2的映射伺服器類型選擇DB2/UDB,選擇正確的版本號,用戶標示和密碼填寫目標庫的用戶名密碼,其餘內容默認即可)
5、 建立用戶映射。選擇遠程用戶和本地用戶進行映射。
6、 建立別名映射,即是表的映射。
五、DB2中的常用命令
1、 db2set命令
db2set:查看db2的常用設置
db2set –lr:查看db2的所有變數

db2set 變數名 = 變數值:設置db2中的變數。如:db2set db2codepage = GBK;db2set db2country = zh_CN。(這是最常用的兩個設置,設置codepage為GBK國標庫,country為zh_CN中國。設置後可解決資料庫創建、備份時代碼頁錯誤的問題。設置完後用db2 terminate中止一下即可起作用)
2、 查看資料庫配置
查看Database Manager配置:db2 get dbm cfg
查看某資料庫配置:
兩種方法:
第一、 db2 get db cfg for 資料庫名。如db2 get db cfg for tianjin
第二、 先用connect命令連接上資料庫,再用db2 get db cfg。如:
connect to tianjin(或:connect to tianjin user zgc3 using zgc)
db2 get db cfg
可以只查看其中某一項的配置,如查看territory
db2 get db cfg for tianjin|grep terr
修改資料庫配置:db2 update db cfg using 參數 參數值
3、 資料庫備份、資料庫創建、資料庫恢復
資料庫備份:db2 backup database 資料庫名 to 備份位置(DB2用戶必須對備份位置有許可權)。如:db2 backup database tianjin to /home/db2inst1/backup。注意: 備份資料庫時應用db2 connect reset將所有連接去掉。
資料庫創建:db2 create database資料庫名。如:db2 create database dbname
用特定的字元集創建資料庫:db2 create database 資料庫名 using codeset [codeset] territory [terriroty]。如:db2 create database dbname using codeset GBK territory CN
資料庫恢復幾點說明:若文件夾中只有一個備份文件,可以不用寫taken at。若資料庫恢復中產生錯誤,可用restore database dbname continue/abort來對恢復進行繼續和取消。
或者用控制台創建資料庫時,第六步region處選擇PRC(People』s Republic Of China)
4、 其他常用命令
db2move:在不同操作系統中移植資料庫。但因存在外鍵約束,應對文件進行編輯。
db2level;查看DB2的修訂版本
db2look:導出ddl?
db2 list table/tablespaces/db at……列出相應內容
(具體參看IBM紅皮書)
5、 在客戶端增加、查看結點和資料庫編目
增加結點編目:db2 catalog tcpip node 結點名字 remote 結點所在ip地址 server 50000
查看結點編目:db2 list node directory
刪除結點編目:db2 uncatalog node 結點別名
增加資料庫編目:db2 catalog db 遠程資料庫名字 as 資料庫別名 at node 結點名字
查看資料庫編目:db2 list db directory
刪除資料庫編目:db2 uncatalog db資料庫別名
6、 不同操作系統的倒庫(db2move):
export:db2move dbname export
import:db2move dbname import(-io replace/create -u username –p password)
load:db2move dbname load
注意:執行export命令,生成的文件存放在當前目錄下,dbname是catalog上的別名。import也是從當前目錄讀取文件。在將庫import入一個新庫時,應該先建立一個庫,然後db2move 新庫名稱 import……。-io參數表示導入的庫里的表覆蓋/新建到新庫里,-u、-p表示用於建庫的用戶名和密碼。
7、 遠程操作資料庫
db2 attach to 資料庫別名 user 用戶名 using 密碼
即可在本地操作遠程資料庫(create db、drop db等操作)
注意:要操作的資料庫必須在本地編目
要取消attach可用命令db2 detach,或attach到其他資料庫。
8、 將資料庫操作的控制台信息存入文檔
要執行的命令名>控制台信息文件名
9、 DB2里的幫助
db2 ? 要查詢的內容(如:db2 ? sql30082n)
或者直接輸入命令(db2move)不帶參數
10、 停止application
資料庫操作過程中可能會發生錯誤,導致資料庫不可用。此時可用force application命令停止這種操作。命令格式可以是db2 force application application號(停掉單個application)或db2 force application all(停掉所有application)兩種形式。
11、 其他
六、對於系統優化的建議
1、 增加buffpage的配置
2、 增加sortheap的配置(一般4M以上)
3、 將鎖定超時 locktimeout設置為on或yes
4、 恢復的日誌保留
(具體設置參看IBM紅皮書)
命令:
db2 connect to tianjin
db2 update db cfg using LOGRETAIN yes
db2 backup db tianjin //設置完LOGRETAIN後應備份資料庫
/home/db2inst1/sqllib/bin //進入此目錄下
db2empfa tianjin; //Multi-page file allocation enabled
db2 update db cfg for tianjin using BUFFPAGE 25000 // 或更多
db2 update db cfg for tianjin using LOCKLIST 1000;
db2 update db cfg for tianjin using LOCKTIMEOUT 15
db2 update db cfg for tianjin using SORTHEAP 1000 //或更多
db2 update db cfg for tianjin using LOGFILSIZ 10000
db2 alter bufferpool ibmdefaultbp size -1
db2 update dbm cfg using SHEAPTHRES 25000 //Max to half of the total mem.
七、在root窗口下啟動DB2控制台
1、 以db2inst1登錄:su – db2inst1(-表示登錄同時讀取db2inst1的環境變數)
2、 export DISPLAY=127.0.0.1:0.0
3、 xhost +
4、 db2cc

方法二。

-- *(1) 作為 root 用戶登錄。
-- *(2) 在命令行上,運行以下命令:xhost + localhost
-- *(3) 運行以下命令:su - db2inst1
-- *(4) 運行以下命令:db2cc

vnc 啟動 vncserver 啟動圖形界面

八、數據導出
1、 EXPORT TO 'c:/UR_ENTERPRISE.del' OF DEL SELECT * FROM ZGC3.UR_ENTERPRISE
2、 EXPORT TO 'c:/UR_ENTERPRISE.ixf' OF ixf SELECT * FROM ZGC3.UR_ENTERPRISE
九、查看node
1、list node directory
2、刪除node:? uncatalog
十、建序列
CREATE SEQUENCE "ZGC3 "."SP_SEQ_MO_wbk" AS INTEGER
MINVALUE 0 MAXVALUE 2147483647
START WITH 21 INCREMENT BY 1
CACHE 20 NO CYCLE NO ORDER;

十一授權

如果遇到DB2 License過期的問題,可以使用以下命令對DB2的License進行授權。
以管理員身份進入DB2環境,鍵入:db2licm -a [License目錄中的db2ese.lic文件]
系統提示成功後,可通過 db2licm -l 顯示授權信息

如果是,則激活方法如下:
1.cp /cdrom/db2/license/db2ese.lic /var/db2/db2ese.lic
2.su - db2inst1
3.db2licm -a /var/db2/db2ese.lic

③ 如何遠程連接db2資料庫

在DB2客戶機上連接遠程DB2服務之前,必須正確設置服務端通信協議。DB2支持的協議有TCP/IP、NetBIOS、NPIPE等。
連接遠程DB2資料庫服務的基本步驟如下:
1. 在客戶機上對遠程DB2節點進行編目。
2. 在客戶機上對遠程資料庫進行編目。
一、第一步
首先在客戶機上對遠程節點進行編目,這里需要確認遠程主機在客戶機上的名稱、IP地址、埠號等基本命令如下:
1. CATALOG TCPIP //編目一個TCP/IP節點
NODE local_node_name //遠程主機在客戶機上的別名
REMOTE hostname | IP //遠程主機IP地址
SERVER service_name | posr_number // 服務名稱 / 埠號
2. TERMINATE //刷新目錄高速緩存
3. LIST NODE DIRECTORY //查看客戶機目錄節點
4. UNCATALOG NODE node_name //刪除編目節點node_name
二、第二步
再對已編目的節點進行資料庫編目,這里用戶需要確認遠程連接的資料庫的名稱、該資料庫在本機上的別名、第一步設置的遠程主機在客戶機上的別名(即節點名)和設置認證方式。命令如下:
1. CATALOG DATABASE remote_db_name //遠程資料庫名稱
AS local_db_name //本地資料庫別名
AT NODE local_node_name //本地資料庫節點別名(第一步中配置)
2. TERMINATE //刷新目錄高速緩存
3. LIST DB DIRECTORY //查看本地資料庫目錄
4. UNCATALOG DB db_name //刪除資料庫編目db_name
三、第三步
連接遠程資料庫,使用第二步中設置的本地資料庫別名來連接。命令如下:
CONNECT TO local_db_name //利用本地資料庫別名連接遠程資料庫
USER userid //用戶ID
USING password //登陸密碼

④ com.ibm.db2.jcc.a.SqlException: DB2 SQL error: SQLCODE: -973, SQLSTATE: 5701

你好的!
SQLERRMC: MON_HEAP_SZ錯誤應該是這個數據量太大!

導致的堆溢出!
你修改一下【MON_HEAP_SZ】的大小試試!
命令希望自己網上搜索一下!

⑤ DB2查詢語句用了CASE WHEN效率低

1、每條記錄都需要多執行一次case when
2、第2次執行時數據可能已經被緩存
可以先執行select * from A where keyno='1'
然後執行 select case when ....與 select function1(para) ...,以消除緩存影響,或者每次執行前消除緩存(db2沒怎麼用過,不知道怎麼消除緩存)
另:case when中的esle肯定不會被執行