1.檢查是否有殭屍進程
ps -emo THREAD | grep -i Z | grep -i 實例名
2.處理死鎖
--第一步:查看全部死鎖
db2 get snapshot for locks on <db_name>
select
agent_id,tabname,lock_mode from table(snap_get_lock('<db_name>')) as aa where aa.tabname is not null;
--第二步:查看該死鎖產生的進程
db2 get snapshot for application
agentid ***(具體的agentid) 獲得某個agentid關聯的進程ID以及相關信息。
--第三步:KILL死鎖
db2 "force application(agentid value)"
3.數據導出導入
導出方法:
方法1:export to d:\table1.del of del select * from 表名; 或者 export to d:\table1.ixf of ixf select * from 表名;
方法2:
db2look -d 數據庫名 -e -l -u 導出用戶 -z 導出模式名 -t 表名 -i 登陸用戶 -w 登陸用戶密碼 -o 輸出結果文件【指定表相關的DLL導出】
db2look -d 數據庫名 -e -l -u 導出用戶 -z 導出模式名 -v 試圖 -i 登陸用戶 -w 登陸用戶密碼 -o 輸出結果文件【指定表相關的DLL導出】
db2look -d 數據庫名 -e -l -a -i 登陸用戶 -w 登陸用戶密碼 -o 輸出結果文件 【這是導出整庫的DDL】
db2move 數據庫名 export -u 數據庫用戶 -p 密碼 [這是整庫數據導出]
導入方法:
方法1:import from d:\table1.del of del insert into 表名; 或者 import from d:\table1.ixf of ixf insert into 表名;
import from d:\table1.ixf of ixf savecount 1000 messages insert into 表名;// 其中,savecount表示完成每1000條操做,記錄一次.
方法2:load from d:\table1.ixf of ixf insert into 表名; 或者 load from d:\table1.ixf of ixf replace into 表名; // 裝入數據前,先刪除已存在記錄
load from d:\table1.ixf of ixf modified by identityignore insert into 表名; // 存在自增加字段
[注意]:使用load的性能要比import要好
方法3:無需中間文件的導入導出方法:
declare c1 cursor for select * from 表名;
load from c1 of cursor messages d:\mes.msg insert into 表名; // messages選項能夠記錄日誌
方法4:
db2 -tvf 導出.sql -z 導入過程.log
db2 -tvd@ -f 存儲過程.db2 (.db2後綴名能夠任意)
方法5:
db2move 數據庫名 import -io replace -u 數據庫用戶 -p 密碼
4.查看當前活動實例
db2 get instance
5.啓動/中止數據庫服務
db2start / db2stop (force)
6.激活數據庫實例
db2 activate database <db_name>
7.查看激活狀態的數據庫
db2 list active databases
8.失效數據庫實例
db2 deactivate database <db_name>
9.查看數據庫當前版本
db2level
10.數據庫鏈接
斷開鏈接但不釋放資源:db2 connect reset
斷開鏈接並釋放資源:db2 terminate
鏈接:db2 connect to <db_name> user <user> using <pwd>
11.查看數據庫配置參數
db2 list db directory
12.自動提交
db2=> update command options using C off --臨時關閉自動提交
db2=> update command options using C on --臨時開啓自動提交
13.查看鏈接數據庫的應用
db2 list applications
db2 list applications show detail
db2 get snapshot for application agentid *** 能夠查看當前鏈接數據庫的應用詳情, ***爲 db2 list applications 的 application handle
14.查看數據庫表空間
db2pd -db <db_name> -tablespace
15.查看數據庫配置
db2 get db cfg for <db_name>
16.查看配置實例參數
db2 get dbm cfg ; db2 update dbm cfg using ... ; db2 reset dbm cfg (恢復默認參數); 實例配置參數保存在 sqllib/db2systm文件中
17.查看配置DAS實例參數node
db2 get admin cfg ; db2 update admin cfg using ...; db2 reset admin cfg ;sql
18.刪除數據庫
db2 drop db <db_name> (若是不能刪除,嘗試斷開激活的鏈接或者重啓db2)
19.刪除實例
db2idrop -f 實例名 (加-f是爲了刪除sqllib,不然下次再建用例時會報錯)
20.查看實例
db2ilist
21.系統啓動自動啓動實例
db2iauto -on 實例名 db2iauto -off 實例名
22.查看das用戶
daslist
23.建立das實例
dasicrt 實例名
24.啓停管理服務器(即das實例)
db2admin start/stop , 一個機器上若是裝多個db2版本的產品, 也是共享一個das實例, 若das建立時是基於A版本的db2, A版本升級後,也要用A版本的dasupdt升級一下das實例。 若升級的是其餘版本的db2, 則das可不用升級。
25.刪除das用戶
dasdrop 用戶名
26.列出系統表
db2 list tables for system
27.列出全部用戶表
db2 list tables
28.列出全部表
db2 list tables for all
29.列出特定用戶表
db2 list tables for schema [user]
select name from sysibm.systables where type='T' and creator = '建立者';
30.系統環境變量
DB2INSTANCE , 設置當前活動實例
31.實例參數
DFTDBPATH 設置數據庫安裝路徑
32.建立數據庫
db2 create db <db_name>
(dft_extent_sz 4
catalog tablespace managed by database using (FILE 'C:\111.dat' 2000, FILE 'C:\222.dat' 2000) extentsize 8 prefetchsize 16
temporary tablespace managed by system using ('C:\333.dat', 'C:\444.dat')
user tablespace managed by database using (FILE 'C:\555.dat' 1200 extentsize 24 prefetchsize 48)
automatic storage on path1,path2
autoresize yes
initialsize 200M
increasesize 20%
maxsize none
using codeset GBK territory CN )
automatic storage--默認設置,設置數據庫爲自動存儲,即DMS自動存儲
autoresize yes--表空間用光時,自動擴展
initialsize 200M--初始表空間大小爲200MB, 每一個容器100MB, 由於指定了兩個path.
maxsize none--不限制表空間最大大小
using codeset=GBK territory=CN--指定數據庫代碼頁爲中文
using codeset=UTF-8 territory=US 指定代碼頁爲unicode編碼,可支持XML數據
33.表空間操做
--建立表空間
db2 create tablespace <name> managed by automatic storage; DMS自動存儲的數據庫創建表空間, managed by可省略。
db2 create tbalespace <name> managed by system using () ; 未開啓自動存儲的數據庫使用SMS方式創建表空間
db2 create tbalespace <name> managed by database using () extentsize 4; 未開啓自動存儲的數據庫使用DMS方式創建表空間
extentsize 4--每一個容器最多寫入4個數據頁; extentsize 4M--每一個容器最多寫入4M大小的數據
prefetchsize 4--從表空間預獲取的數據頁數量; prefetchsize 4M--預獲取數據大小
--表空間查詢
db2 list tablespaces
34.複製一張表
db2 create table t1 like t2
35.顯示錶結構
db2 describe table tablename
36.執行SQL腳本
db2 -tvf scripts.sql
37.查看錯誤代碼信息
db2 ? 10054
38.中止激活的鏈接
db2 force application all;
db2 "force application(***某agentid)"
39.監控DB2消耗多的SQL語句
eg:(DB_NAME=SUNDB)
db2top -d SUNDB -----查看消耗資源 按照提示按 l,出現Application Handle,找到資源消耗大的Application Handle(stat)
記下app handle。
db2pd -d SUNDB -dyn -application > /tmp/db2pd1.txt ----處處會話語句,準備進行調優
40.設置鏈接方式(重啓纔會生效,新建實例和數據庫後,若不設置此項,則遠程客戶端沒法進行鏈接)
db2set DB2COMM=tcpip
db2set DB2COMM=
41.創建遠程編目
db2 catalog tcpip node 本地節點名稱(隨意取名) remote IP地址 server 端口
db2 catalog db 遠程數據庫名稱 as 本地別名 at node 本地節點名稱
db2 catalog db 本地數據庫名稱 on 本地數據庫所在目錄(可經過DB2PATH環境變量查看)
db2 uncatalog node 本地節點名稱 (刪除節點編碼)
db2 uncatalog db 遠程數據庫名稱 (刪除數據庫編目)
db2 list node directory 查看編目信息
42.查看SQL的執行計劃
db2expln -d 數據庫名稱 -u 用戶名 密碼 -statement "SQL語句(不加分號)" -terminal -g數據庫
43.服務器
數據庫版本變動後,遷移實例
db2imigr (大版本變動使用,好比從V8升級到V9)
db2iupdt (小版本變動使用,好比從v8.1升級到v8.2)
44.鏈接實例
db2 attach to 實例名
45.斷開實例
db2 detach
46.建立實例
db2icrt -p 50000(端口) -u dbfenc(這是受防禦用戶) dbinst(這是實例名)
db2icrt -d ... > debug.log 加上-d參數能夠生成debug日誌,檢查實例建立失敗緣由
47.DAS
一個用於遠程管理其餘實例的特殊實例。 只有用圖形工具遠程控制時須要。用命令行遠程控制不須要。
48.db2受權
GRANT DBADM ON DATABASE TO USER 用戶名
49.自增序列
CREATE TABLE CUSTOMERS
(ID INT NOT NULL GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1),
NAME CHAR(10) NOT NULL DEFAULT 'NO NAME' );
或者:
CREATE TABLE SYSINFO
(ID INT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 10 INCREMENT BY 10),
NAME CHAR(10) NOT NULL DEFAULT 'NO NAME'
) ---這種寫法能夠手工指定自增序列的值,前者只能系統指定。
alter table TAB_NAME alter column GENE_COL_NAME restart with 10; ---當前序列重置爲10
50.顯式控制db2不記錄事務日誌[當操做大量數據時使用,防止db2事務日誌滿]
alter table table_name activate not logged initially;
各類SQL操做
commit; ---commit以前的SQL都不記錄事務日誌,能夠防止事務日誌超限的問題,即執行大批量的數據插入等操做,commit以後事務日誌恢復默認記錄
51.查看數據庫讀寫比
db2 get snapshot on databases global
列出的參數中Rows selected 就是SQL語句獲得的結果集記錄數A, Rows read 就是SQL語句一共掃描過的記錄數B, A/B即爲讀寫比,比例越高表明SQL語句效率越高
52.查看數據庫表空間對應的緩衝池
db2pd -d 數據庫名稱 -tab
獲得的結果中,Name列即爲表空間名稱,Id列即爲表空間對應的緩衝池標識符
53.查看緩衝池使用命中率
db2pd -d 數據庫名稱 -buff
獲得結果中,能夠查看緩衝池的信息,包括總大小,命中率。 PageSz列即爲每數據頁的大小,單位爲Byte,PA-NumPgs即爲緩衝區佔用的數據頁數, 二者相乘即爲緩衝區大小。
HitRatio列即爲命中率,即查詢的SQL有多少能直接在緩衝區中當即使用。
54.查看錶分區信息
db2 describe DATA PARTITIONS for table 表名 show detail
select * from syscat.datapartitions where tabname in ('大寫表名');--只有1個part0分區表明不是分區表
select name,tbspace,index_tbspace from sysibm.systables where type='T' and creator = '模式名' and name='大寫表名' --若tbspace和index_tbspace都爲空,也能說明這是分區表
55.索引信息操做
select * from syscat.indexes where tabname='大寫表名';--列出表非分區索引
select * from syscat.indexpartitions where tabname = '大寫表名';--列出表分區索引,能夠以此判斷索引是否爲分區索引
create index 索引名 on 表名(索引字段) partitioned; --建立分區索引, 默認都是分區索引
create index 索引名 on 表名(索引字段) not partitioned; --建立非分區索引
db2 runstats on table 表名 with distribution and detailed indexes all --建立索引後當即生效
56.DDL語句備忘
alter table 表名 alter column 字段名 restart with ***; 修改表中自增主鍵起始值