db2運維命令



=======================================================================================
===================================系統命令============================================
=======================================================================================
也就是直接在db2環境變量下直接敲就可以的,這些命令都可以再產品目錄下找到

●db2level 查看數據庫版本
●db2ilist 查看實例
●db2icrt -a SERVER -s ese -p db2c_bnd8inst -u bnd8fenc bnd8inst 創建實例
●db2idrop xxinst 刪除實例
●db2start 啟動數據庫實例(數據庫跟隨實例啟動,不能單獨關閉和啟動數據庫)
●db2stop 關閉數據庫實例
●db2stop force 強制停止
●db2iauto -on testinst系統啟動實例自動啟動
●db2iauto -off testinst 系統啟動實例不自動啟動
●db2sampl 創建例庫
●db2tbst 十六進制狀態碼 可以顯示表空間狀態
●db2move dbname export 備份數據
●db2move dbname import恢復數據
●db2ckbkp -h BTADB.0.btainst.NODE0000.CATN0000.20120206132720.001 查看數據庫備份。
●db2cklog CHECK 3 to 5 ARCHLOGPATH /archivelog 檢查歸檔日志
●reorgchk 注意選項是使用當前的統計信息還是更新后的統計信息
●db2advis -d sample -s "select * from employee where workdept='A00' and salary > 40000" -o output.out 也可以對批量的語句進行advise
●db2pd 需要仔細研究和熟悉
●db2acsutil 快照備份和管理,詳細資料看信息中心
●db2addicons 針對linux系統,對某用戶創建tools的菜單,詳細見信息中心。
●db2adutl TSM相關命令,詳細見信息中心。
●db2ckrst 從備份文件中的歷史文件中查看歷史數據。
●db2convert 將行組織表轉化為列組織表
●db2dart 詳細見信息中心,和筆記單獨專題。
●db2drdat drda的trace文件。
●db2empfa 針對sms管理表空間的空間分配時按照段而不是頁。
●db2exfmt 執行計划。
●db2exmig 遷移解釋表。
●db2expln 解釋表
●db2extsec 該命令和權限有關,沒認真看。
●db2flsn 根據lsn號找到對應日志db2flsn 000000BF0030 (例如db2flsn -path /db2sys/db2inst1/db2inst1/NODE0000/SQL00001 00001C2078A6C1BD)
●db2fodc 詳情見筆記中的相關章節。
●db2fopt 讓優化器使用這個命令指定的參數值來作為語句優化器評估時候的值,例如測試系統sortheap是2000,但是使用該命令將其設置為5000,語句優化器評估時候講使用5000來制定執行計划。
●db2gcf 啟動、停止、監視實例用,一般用在自動執行腳本中,詳見信息中心。
●db2inidb You must issue this command before you can use a split-mirror database.
●db2inspf Formats the data from INSPECT CHECK results into ASCII format.
●db2iupdt 實例升級
●db2iupgrade Upgrades an instance to a DB2? copy of the current release from a DB2 copy of a previous release.
●db2logsForRfwd Parses the DB2TSCHG.HIS file. This utility allows a user to find out which log files are required for a table space rollforward operation.
●db2mtrk 查看內存
●db2osconf Makes recommendations for kernel parameter values based on the size of a system.
●db2pdcfg Sets flags in the DB2? database memory sets to influence the database system behavior for problem determination purposes.
●db2prereqcheck 安裝前檢查
●db2relocatedb This command renames a database, or relocates a database or part of a database (for example, the container and the log directory) as specified in the configuration file provided by the user.
●db2rfpen Puts a database in rollforward pending state. 需要在歸檔模式執行。
●db2rspgn 獲取響應文件
●db2sampl 創建sample庫
●db2snapcore On Linux and Solaris operating systems, this command mimics the functionality provided by the snapcore command on AIX? operating systems.
●db2unins Uninstalls one or more DB2? database products, features, or languages.
●db2untag Removes the tag on a table space container.The tag is used to prevent DB2 from reusing a container in more than one table space. 例如報錯:SQL0299N Container is already assigned to the table space. SQLSTATE=42731的時候使用該命令


<######################################>
●db2ls(需要進入到產品目錄下的install下執行)
db2inst1@ZBDB1:[/opt/IBM/db2/V9.5/install]$./db2ls 可以查看安裝的目錄和版本升級的日期
Install Path Level Fix Pack Special Install Number Install Date Installer UID
---------------------------------------------------------------------------------------------------------------------
/opt/IBM/db2/V9.5 9.5.0.10 10 Tue Oct 30 14:58:42 2012 BEIST 0

[root@db2server install]# ./db2ls -q -b /opt/ibm/db2/V9.7 查看安裝了哪些組件
Install Path : /opt/ibm/db2/V9.7
Feature Response File ID Level Fix Pack Feature Description
---------------------------------------------------------------------------------------------------------------------
BASE_CLIENT 9.7.0.0 0 Base client support
JAVA_SUPPORT 9.7.0.0 0 Java support
SQL_PROCEDURES 9.7.0.0 0 SQL procedures
BASE_DB2_ENGINE 9.7.0.0 0 Base server support
JDK 9.7.0.0 0 IBM Software Development Kit (SDK) for Java(TM)
CONNECT_SUPPORT 9.7.0.0 0 Connect support
COMMUNICATION_SUPPORT_TCPIP 9.7.0.0 0 Communication support - TCP/IP
REPL_CLIENT 9.7.0.0 0 Replication tools
CONTROL_CENTER 9.7.0.0 0 Control Center
DB2_DATA_SOURCE_SUPPORT 9.7.0.0 0 DB2 data source support
LDAP_EXPLOITATION 9.7.0.0 0 DB2 LDAP support
INSTANCE_SETUP_SUPPORT 9.7.0.0 0 DB2 Instance Setup wizard
SPATIAL_EXTENDER_CLIENT_SUPPORT 9.7.0.0 0 Spatial Extender client
APPLICATION_DEVELOPMENT_TOOLS 9.7.0.0 0 Base application development tools
DB2_UPDATE_SERVICE 9.7.0.0 0 DB2 Update Service
FIRST_STEPS 9.7.0.0 0 First Steps
DB2_SAMPLE_DATABASE 9.7.0.0 0 Sample database source
TEXT_SEARCH 9.7.0.0 0 DB2 Text Search
INFORMIX_DATA_SOURCE_SUPPORT 9.7.0.0 0 Informix data source support

<######################################>
●db2licm 許可證相關
查詢db2licm的幫助信息:db2licm -h
db2licm -l 查看軟件授權信息
db2licm –a db2ese.lic,添加license
查詢許可文件記錄的版本信息 db2licm -v

<######################################>
●db2_kill 殺DB2進程
●db2_ps 查看DB2進程
db2_kill或ps -efl|grep -i xxinst|awk '{print $2}'|xargs kill -9
執行ipcs -a|grep -i testinst 查找共享內存
根絕上面查到的共享內存信息執行ipcrm -m 共享內存ID或使用ipclean,ipcs|grep testinst|awk '{print "ipcrm -"$1" "$2}'>xx.sh

●db2_local_ps 查看本地db2進程 還沒試驗和db2_ps有何區別

<######################################>
●db2look 可以:
1獲取數據庫對象的ddl語句
2 生成update語句用來更新數據庫管理器和數據庫配置
3 生成db2set命令,用於設置DB2概要注冊表
4 提取和生成數據庫統計報告
5 生成update語句,用戶復制關於數據庫對象的統計信息。

db2look -d xxxdb -o xxx.ddl 獲取的是編目表的字段信息。
db2look -d xxxdb -e -l -x -a -td @ -o XXX.ddl 獲取全庫的對象和表空間、bufferpool的ddl語句,grant語句,使用@做分隔符。
db2look -d fxdb -e -t table1 table2 -td @ -o tmp.ddl 只取某表的ddl語句 但是表前不能指定模式名。

-d 指定數據庫
-a 為所有的創建者(creator)生成DDL信息。指定了該項會忽略-u(-u指定creator)
-e 提取-u XXusr或-a參數指定的用戶的所能訪問的對象(表、視圖、存儲過程、函數、序列、別名、nickname等)的ddl語句。如果不指定-u或-a則使用$USER
-l 生成數據庫布局,這里用於數據庫分區組、緩沖池、表空間的布局
-x 獲取grant信息
-t 指定表 -v指定視圖
-m 以模擬模式運行,生成了包括sql update語句的腳本,這些sql update語句捕獲所有的統計數據。指定-m時忽略-p -g -s。-c -r只有在-m時才有效,-c不取COMMIT, CONNECT and CONNECT RESET statements語句,-r不取RUNSTATS語句。
-f 獲得配置和環境變量的參數db cfg ,dbm cfg
-td 指定ddl語句的分隔符號 不指定的時候默認使用";"

實驗:testinst創建了bufferpool 表空間 testinst.table1,test用戶創建了test.table1 test.view1
db2look -d testdb -e -td @ -o 1 不知道為什么使用默認的$USER卻產生了 所有表的ddl,所以嚴重懷疑默認不是使用$USER而是使用-a
db2look -d testdb -e -u testinst -td @ -o 1.1 只產生了testinst用戶所擁有的表
db2look -d testdb -e -u test -td @ -o 1.2 只產生了test 用戶所擁有的表

一般db2look -d xxxdb -e -l -x -a -td @ -o XXX.ddl 使用獲取全庫信息即可
db2look -d db_alias -a -e -m -l -x -f -td @ -o db2look.sql 是比較全的,通常用不到。

注意:通過db2look 拿出的腳本包含的授權語句是不包括隱式授權的,例如使用test用戶創建了test.table1表,使用db2look是拿不出該表上對test用戶的授權語句的,一定要注意,通過db2look創建數據庫或者表的時候一定要注意,要檢查該表的creater 和 owner。


<######################################>db2support
db2support?實用程序應該由具有?SYSADM?權限的用戶(如實例所有者)運行,以便該實用程序可以收集所有必需的信息而不發生錯誤。如果沒有?SYSADM?權限的用戶運行?db2support,則在實用程序運行“query?client”或“list?active?databases”之類的命令時,可能會產生?SQL?錯誤(SQL1092)。

所有條件下收集以下信息:
db2diag.log 、所有陷阱文件、鎖定列表文件、轉儲文件、緩沖池和表空間(SQLSPCS.1和SQLSPCS.2)、控制文件(使用-d選項)、各種與系統有關的文件、各種系統命令的輸出、db2cli.ini

-c並且可連接至數據庫,則db2support.html文件包含以下信息:
用戶表的數目、數據庫數據的大概大小、數據庫快照、應用程序快照、緩沖池信息、、LIST APPLICATIONS 命令的結果、LIST COMMAND OPTIONS 命令的結果、LIST DATABASE DIRECTORY 命令的結果、LIST INDOUBT TRANSACTIONS 命令的結果、LIST DATABASE PARTITION GROUPS 命令的結果、LIST DBPARTITIONNUMS 命令的結果、LIST ODBC?DATA SOURCES 命令的結果 、LIST PACKAGES/TABLES 命令的結果、LIST TABLESPACE CONTAINERS 命令的結果、LIST TABLESPACES 命令的結果、LIST DRDA IN?DOUBT TRANSACTIONS 命令的結果?

-s 擴展系統信息
-a 用於收集所有核心文件,-r 用於僅收集最近的核心文件

db2support . -d <dbname> -a -c -s -f

<######################################>
●db2diag 查看日志
1:db2diag -g db=MYDB |more ( 注:數據庫名字為大寫)

2:db2diag -time 2010-03-01 -level "Error"

3:db2diag -time 2010-03-01 -level "Severe"

4:db2diag -g APPHDL="0-222"

5: db2diag -g level=Severe

6:db2diag -g db=SAMPLE,instance=aabrashk
<######################################>das相關
●dasauto
●dascrt
●dasdrop
●dasmigr
●dasupdt
●db2admin
●db2daslevel

<######################################>事件監控器相關
●db2evmon Formats event monitor file and named pipe output, and writes it to standard output.
●db2evtbl Use db2evtbl to generate the CREATE EVENT MONITOR statement.
Defining WRITE TO TABLE event monitors is more straightforward when using the db2evtbl tool. For example, the following steps can be followed to define and activate an event monitor.
Use db2evtbl to generate the CREATE EVENT MONITOR statement.
Edit the SQL statement, removing any unwanted columns.
Use the CLP to process the SQL statement. (When the CREATE EVENT MONITOR statement is executing, target tables are created.)
Issue SET EVENT MONITOR STATE to activate the new event monitor.

 

<######################################>故障monitor
db2fm
db2fmcu

<######################################>trace
●db2trc 進程內存跟蹤
db2trc on -l 8M :使用 on 選項啟用跟蹤工具后,將跟蹤實例所作的所有后續工作。
db2trc clr :clr 選項來清除跟蹤緩沖區
db2trc dmp trace.dmp :內存緩沖池轉儲至磁盤。
db2trc off :關閉跟蹤
db2trc flw example.trc nul 驗證是否可讀取跟蹤文件
db2trc flw trace.dmp trace.flw 轉換為 ASCII 格式。這是通過 flw 和 fmt 選項完成的


db2stop
db2start
db2trc on -f db2trc.dmp
db2 "rollforward database db00 to end of logs and stop overflow log path (/home/db2nps/db00/arclog/sjzbinst/DB00/NODE0000/C0000000) recover dropped table 000000000000560100020004 to /home/db2nps/db00/db2bak"
db2trc off
db2trc flw db2trc.dmp db2trc.flw
db2trc fmt db2trc.dmp db2trc.fmt


db2trcoff 同db2trc off
db2trcon 同db2trc on
The db2trcon and db2trcoff command supports all the parameters of the db2trc command.
db2xprt - Format trap file command

<######################################>db2pd

db2pd工具有兩種執行方式:
1.交互式 db2pd -interactive
2.直接在命令行執行
其實和交互方式執行是一樣的結果。


db2pd有22個選項,如果想對所有分區,所有活動數據庫,運行所有選項,您只要輸入db2pd -everything,就會列出所有信息。
//如果想控制輸出的范圍,可以參考如下:
范圍 范圍選項 說明
實例 -inst 或 -ins 用於實例
數據庫 -database x 或 –db x 用於特定的數據庫x
數據庫 -alldatabase 或 –alldb 用於所有數據庫
分區 -dbpartitionnum n 或 –dbp n 用於特定的數據庫分區服務器 n
分區 -alldbpartitionnums 或 –alldbp 用於實例中的所有數據庫分區服務器

(1)-repeat [num sec] [count] 該選項用於重復db2pd命令,並指定間隔多長時間執行多少次
(2)-file <filename> 該選項將輸出結果保存到一個指定文件中。
(3)db2pd 命令的所有選項都可以使用前三個字符的縮寫,只有兩個除外:-mempools 和 –memsets。

 

 

<######################################>執行計划
如何獲取SQL執行計划
SQL 解釋工具
SQL 解釋工具提供查詢優化器為 SQL 語句所選擇的訪問計划的有關詳細信息。該信息存儲在 EXPLAIN 表中,可以在稍后使用諸如 Visual Explain、db2expln、dynexpln 和 db2exfmt 的工具進行格式化,從而以友好的可視方式進行表示。
EXPLAIN 表可以在您第一次使用 Visual Explain 時自動進行創建。即使沒有創建它們,您也可以手工進行創建,如下:
% cd <db2 install path>\sqllib\misc
% db2 connect to bank
% db2 -tvf EXPLAIN.DDL
使用 db2exfmt 工具。解釋動態 SQL 語句,在 DB2 CLP窗口中按照下列步驟進行:

% db2 connect to <database_name>
% db2 set current explain mode explain
% db2 -tvf <Input file with an SQL statement ended with a semicolon>
% db2 set current explain mode no
% db2exfmt -d <dbname> -g TIC -w -1 -n % -s % -# 0 -o <output file>

 

 

<######################################>db2batch 批量測試語句的執行性能。
基准測試是從各種不同方面(例如數據庫響應時間、cpu 和內存使用情況)對應用程序進行評測的一個過程。基准測試基於一個可重復的環境,以便能夠在相同的條件下運行相同的測試。之后,對測試收集到的結果可以進行評估和比較。
db2batch 是一種基准測試工具,它以一組 SQL 和/或 XQuery 語句作為輸入,動態地准備語句和描述語句,並返回一個結果集。取決於 db2batch 命令中所使用的選項,結果集可以返回這些語句的執行時間、關於內存使用情況(例如緩沖池)的數據庫管理器快照和緩存信息。db2batch 就是這樣一個 Benchmark 工具,它能夠提供從准備到查詢完成中各個階段所花費地具體時間,CPU 時間,以及返回的記錄。

db2batch 命令格式:
db2batch -d <db_name> -a <user>/<password> -i <time_condition> -f <sql.file> -r <output>

對於執行 db2batch 時一些詳細的設置可以通過 -o 參數指定,也可以在 SQL 文件中指定,譬如可以在 SQL 文件中使用下面的配置參數:
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
例子SQL文件,保存到1.sql文件中:
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
select * from employee where empno='000340'@
--#COMMENT Query 2
select * from employee where empno='000350'@
其中 ROWS_FETCH 和 ROWS_OUT 定義了從查詢的結果集中讀取記錄數和打印到輸出文件中的記錄數,PERF_DETAIL設置了收集性能信息的級別,DELIMITER 則指定了多個查詢間的間隔符。
執行命令:
db2batch -d sample -i complete -f 1.sql -r 1.out


db2batch還允許在輸入文件中定義SQL程序塊,並且可以定義這個塊重復執行的次數,這個功能對於基准測試是很有用處的。
--#BGBLK [repeat_count]
(定義查詢塊的開始)
--#EOBLK
(定義查詢塊的結束)
例子SQL文件,保存到2.sql文件中:
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#BGBLK 10
select * from employee where empno='000340'@
--#EOBLK
其中 BGBLK 10定義了SQL塊的開始,並且定義了循環執行的次數為10次,EOBLK定義了SQL塊的結束。
執行命令:
db2batch -d sample -i complete -f 2.sql -r 2.out


db2batch還允許為SQL語句中條件字段指定參數值。如果使用了參數文件,則每一行都將為一條給定語句和一個塊的給定迭代指定參數值。如果使用了 #PARAM 偽指令,則會為每條語句的每個參數預先指定多個值甚至指定參數范圍,而對於塊的每次迭代,將從每個參數的指定集合中選擇一個隨機值。#PARAM 偽指令與參數文件不能混合在一起。
-m后跟一個參數文件,它包含在執行一條語句之前要綁定至SQL 語句參數標記的參數值。缺省情況是不綁定參數。
參數值的格式如下:
-36.6 'DB2' X'0AB2' G'...' NULL 12 'batch' x'32ef' N'...' null +1.345E-6 'db2 batch' X'afD4' g'...' Null

定義每個參數就像定義 SQL 常量一樣,並且每個參數與其他參數之間用空格隔開。
非定界文本表示數字;純定界(')文本表示單字節字符串;
以 x/X 作為前綴的定界(')文本表示編碼為成對的十六進制數字的二進制字符串;
以 g/G/n/N 作為前綴的定界(')文本表示組成雙字節字符的圖形字符串;
而 NULL(不區分大小寫)表示空值。
參數輸入文件格式:
第 X 行列示要為在輸入文件中執行的第 X 條 SQL 語句提供的一組參數。
如果語句塊不重復,則這對應於輸入文件中列示的第 X 個 SQL 語句。
空白行表示相應的 SQL 語句沒有參數。
參數的數目和類型必須與 SQL 語句期望的參數數目和類型一致。
參數偽指令格式:
--#PARAM [single | start:end | start:step:end] [...]
每個參數偽指令都會指定一組參數值,每次執行查詢時就從這一組參數值中選擇一個隨機值。參數值集合由單個參數值和參數值范圍組成。通過在兩個有效參數值之間添加一個冒號(:)的方式來指定參數值范圍,而是否添加空格作為分隔符是可選的。可以在開始值與結束值之間放置第三個參數值作為步長,該步長將覆蓋缺省值。每個參數范圍等價於指定“start, start+step, start+2*step, ... start+n*step”中的單個值,其中 n 的選擇標准是應滿足“start+n*step <= end”且“start+(n+1)*step > end”。
雖然可以使用參數偽指令來為任何類型(甚至可以是 NULL)的參數指定多組值,但是,僅支持數字參數值(整數和小數)范圍。

使用參數文件的場景,例子SQL保存到3.sql文件中:
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#BGBLK 10
select * from employee where empno= ?@
--#EOBLK
參數文件,保存到3.par中:
'200010'
'200120'
'200140'
'200170'
'200220'
'200240'
'200280'
'200310'
'200330'
'200340'
執行命令:
db2batch -d sample -i complete -f 3.sql -m 3.par -r 3.out

使用參數文件的場景,SQL塊中包含2條SQL,例子SQL保存到4.sql文件中
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#BGBLK 5
select * from employee where empno= ?@
select * from employee where empno= ? and JOB=?@
--#EOBLK
參數文件,保存到4.par中:
'200010'
'200010' 'SALESREP'
'200120'
'200120' 'CLERK'
'200140'
'200140' 'ANALYST'
'200170'
'200170' 'DESIGNER'
'200220'
'200220' 'DESIGNER'
執行命令:
db2batch -d sample -i complete -f 4.sql -m 4.par -r 4.out

使用參數偽指令的場景1,例子SQL保存到5.sql文件中:
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#PARAM
'000340'
--#BGBLK 10
select * from employee where empno= ?@
--#EOBLK
執行命令:
db2batch -d sample -i complete -f 5.sql-r 5.out

使用參數偽指令的場景2——包含2個參數標記,例子SQL保存到6.sql文件中:
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#PARAM
'000340'
--#PARAM
'FIELDREP'
--#BGBLK 10
select * from employee where empno= ? and job=?@
--#EOBLK
執行命令:
db2batch -d sample -i complete -f 6.sql -r 6.out

使用參數偽指令的場景3,例子SQL保存到7.sql文件中
每個程序塊前必須單獨定義參數,下面的語句將執行不成功,因為第2個程序塊沒有使用參數偽指令單獨定義參數
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#PARAM
'000340'
--#PARAM
'FIELDREP'
--#BGBLK 10
select * from employee where empno= ? and job=?@
--#EOBLK
--#BGBLK 5
select * from employee where empno= ? and job=?@
--#EOBLK
修正為如下的語句將可以成功執行
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#PARAM
'000340'
--#PARAM
'FIELDREP'
--#BGBLK 10
select * from employee where empno= ? and job=?@
--#EOBLK
--#PARAM
'200240'
--#PARAM
'CLERK'
--#BGBLK 5
select * from employee where empno= ? and job=?@
--#EOBLK
執行命令:
db2batch -d sample -i complete -f 7.sql -r 7.out

使用參數偽指令的場景4,例子SQL保存到8.sql文件中
參數值集合可以由單個參數值和參數值范圍組成。以上例子演示的都是由單個參數值組成的集合;下面例子演示如何使用參數值范圍組成的集合來為動態SQL語句的占位符提供值,通過在兩個有效參數值之間添加一個冒號(:)的方式來指定參數值范圍,而且參數偽指令不能被包含在程序塊中,不然可能會出現每次取得相同的值。

--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#PARAM
31840:152750
--#BGBLK 10
select * from employee where SALARY<?@
--#EOBLK

執行命令:
db2batch -d sample -i complete -f 8.sql -r 8.out
使用參數偽指令的場景5,例子SQL保存到9.sql文件中

下面例子演示如何使用參數值范圍組成的集合來為動態SQL語句的占位符提供值,通過在兩個有效參數值之間添加一個冒號(:)的方式來指定參數值范圍,可以在開始值與結束值之間放置第三個參數值作為步長,該步長將覆蓋缺省值。每個參數范圍等價於指定“start, start+step, start+2*step, ... start+n*step”中的單個值,其中 n 的選擇標准是應滿足“start+n*step <= end”且“start+(n+1)*step > end”。
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#PARAM
31840:10:152750
--#BGBLK 10
select * from employee where SALARY<?@
--#EOBLK

執行命令:
db2batch -d sample -i complete -f 9.sql -r 9.out

總體說明:
1. 所有 SQL 語句都必須以 --#SET DELIMITER 命令設置的定界符 (缺省值為“;”)結尾。此定界符可以是一個或兩個字符。
2. SQL 語句的長度僅受到可用內存和使用的接口的限制。 可以將一條語句分成多行,但是不允許多條語句位於同一行上。
3. 輸入文件的行長度僅受到可用內存的限制。
4. db2batch 將發出它自己的 CONNECT 和 CONNECT RESET。
5. 當使用 LONG 計時方式時,將把 PAUSE(暫停)和SLEEP(休眠)所花的時間也計算在內。
6. 必須創建了說明表才能使用說明選項。
7. 對於 db2batch,所有命令行選項和 SQL 文件語句都不區分大小寫

 

 

 

 


=======================================================================================
===================================CLP命令============================================
=======================================================================================

也就是執行前邊必須加上db2 的命令

●db2 get instance :Returns the value of the DB2INSTANCE environment variable.
●db2 attach to XXX XXX為本用戶下的實例名或node
●db2 detach從attach的實例斷開。
●db2 get dbm cfg 獲得實例參數配置
●db2 get dbm cfg show detail delayed value 為掛起值 ,不知道為什么執行該命令必須attach to到實例,及時使用db2 get instance看到是該實例也不行。
●db2 get db cfg for dbname 獲得數據庫參數配置
●db2 get db cfg show detail, delayed value 為掛起值
●db2 update dbm cfg using 參數 值 ---修改數據庫實例參數
●db2 update db cfg for dbname using 參數 值 --修改數據庫參數
●db2 reset db/dbm cfg for dbname將db cfg重置為默認值
●db2 list node directory 查看節點
●db2 list db directory 列出本實例下的所有庫
●db2 list active databases顯示活動庫
●db2 restart database testdb 重新啟動數據庫
●db2 activate database testdb 激活數據庫
●db2 Deactivate database testdb 停止數據庫
●db2 LIST、update COMMAND OPTIONS 顯示clp命令行選項
●db2 list applications
●db2 list applications show detail
●db2 force application ( 1128,1129 )根絕句柄值斷掉應用
●db2 force applications all 中斷所有數據庫應用
●db2 list tablespaces show detail 查看表空間
●db2 list tablespace containers for (tablepace id) show detail根據表空間ID查看容器
●db2 list tables for all 列出所有的表名
●db2 "list tables for schema myschema" 列出shecma 為myschema的表名 list tables for system查看所有系統表
●db2 list packages 列出包名
●db2 "describe table tablename" db2 "describe select * from tablename"顯示某表的表結構
●db2 describe indexes for table lcpt.HIS_TBDATACSRCTMP show detail 顯示表的索引信息
●db2 load query load狀態查詢
●db2 archive log 對日志強行截斷和歸檔
●db2 autoconfigure 對系統進行簡單評估,自動配置參數
●db2 change database comment 修改db 的commet信息,可以從db2 list db directory中看到
●db2 change isolation level :Isolation level changes are not permitted while connected to a database with a type 1 connection. The back end process must be terminated before isolation level can be changed
●db2 deregister 在LDAP服務器上注冊
●db2 START HADR
●db2 STOP HADR
●db2 TAKEOVER HADR
●db2 PRUNE HISTORY/LOGFILE Used to delete entries from the recovery history file or to delete log files from the active log file path. The PRUNE LOGFILE command is deprecated and might be removed in a future release.
●db2 RECOVER DATABASE 相當於resotre 家 rollforward
●db2 get cli cfg 查看db2cli.ini
●db2 get connection state 查看連接狀態
●db2 get dbm monitor switches 查看monitor開啟情況,直接在dbm中看也可以,使用db2 get monitor switches 可以查看當前回話的監控設置
●db2 RESET MONITOR 重置監控器計數器
●db2 INGEST 可以從輸入文件或者管道將數據導入到表,沒做過測試,不清楚具體作用於何種場景
●db2 INSPECT 和db2dart作用類似,詳細情況見信息中心。
●db2 LIST UTILITIES show detail 查看正在執行的utilities信息,目前知道的有backup、restore、rollforward、runstats、load、dpf的數據重新分發、異步索引清除,reorg不能監視。
●db2 MIGRATE DATABASE Converts a previous version of a DB2? database to the formats corresponding to the release run by the instance.This command is deprecated and will be discontinued in a future release. You should use the UPGRADE DATABASE command instead.
●db2 SET SERVEROUTPUT 控制輸出到標准輸出的結果,詳情見信息中心。
●db2 SET UTIL_IMPACT_PRIORITY ;db2 SET WORKLOAD和工作負載相關,節流策略。
●db2 GET AUTHORIZATIONS 查看當前用戶的權限
●db2 set integrity for test.users immediate checked 初始化一致性檢查,一般在load結束后會出現不一致情況,需要執行此命令,使用load query 命令可以看到狀態為checked狀態,而不是normal
●db2 set write suspend/resume 用來進行鏡像分割備份
●db2get routine into <filename> from [specific] procedure <routine-name>[hide body] 將 SQL 過程抽取成二進制文件。
●db2put routine from <filename> [owner <newowner>[use registers]] 從二進制文件部署 SQL 過程。

<######################################>REORG INDEXES/TABLE

reorg table f_sw.VWLog1_113 allow read access use VWSTMP2 脫機
reorg table f_sw.VWLog1_113 inplace allow write access 聯機整理
reorg table f_sw.VWLog1_113 inplace stop
reorg table f_sw.VWLog1_113 inplace pause
reorg table f_sw.VWLog1_113 inplace resume

reorg indexes all for table f_sw.VWLog1_113 allow write access;聯機整理索引。

可通過db2pd -d xxdb -reorg或者歷史文件查看reorg進度。
<######################################>分區內並行度
●db2 SET RUNTIME DEGREE
>>-SET RUNTIME DEGREE FOR--+-ALL--------------------------+-----TO--degree------><
| .-,------------------. |
| V | |
'-(----application-handle-+--)-'
Sets the maximum run time degree of intra-partition parallelism for SQL statements for specified active applications.
The actual run time degree will be the lowest of:
the max_querydegree configuration parameter dbm的參數
the application run time degree
the SQL statement compilation degree.bind時候可以指定

<######################################>alternate server

在create database 和 catalog 后可以通過命令指定和修改alternate server
●UPDATE ALTERNATE SERVER FOR DATABASE
●UPDATE ALTERNATE SERVER FOR LDAP


<######################################>quiesced
當調用表空間停頓(quiesce)功能的應用程序獨占(讀或寫)、共享或意向更新訪問的表空間的時候處於該狀態。
使用下列命令將表空間處於該狀態:
首先確認表空間處於normal
db2 quiesce tablespaces for table table1 reset;
db2 quiesce tablespaces for table table1 exclusive;
db2 quiesce tablespaces for table table1 share;
db2 quiesce tablespaces for table table1 intend to update;
可以執行
db2 quiesce tablespaces for table table1 reset;消除該狀態。


如何除去quiesce狀態
1. 連接到數據庫
2. 用 list tablespaces 判斷哪個tablespace處於quiesce狀態和和取得對象(object)ID
3. 判斷對象ID對應的表
a)用 db2 "select tabname from syscat.tables where tablid=對象ID" 得到表名
b)用 db2 list history 判斷是那個表
4. 用 db2 quiesce tablespaces for table 表名 reset 去除quiesce狀態


QUIESCE DATABASE
QUIESCE INSTANCE--instance-name--+-------------------+------->
+-USER--user-name---+
'-GROUP--group-name-'
然后使用 UNQUIESCE恢復實例和數據庫即可

 

 

 

<######################################>仿操作系統命令
●db2 echo 和操作系統的echo相同,只是可以通過db2 CLP調用
●db2 history 和系統的history相同
●RUNCMD xx 或者執行r xx 執行使用db2 history命令看到的歷史命令,xx是歷史命令對應的號碼
●db2 edit 何以調用系統的editor例如vi.
●db2 ping

<######################################>二階段提交相關
●LIST DRDA INDOUBT TRANSACTIONS
●LIST INDOUBT TRANSACTIONS
INDOUBT TRANSACTION 是DB2 為了保護數據一致性 而采取的方法。當一個交易完成一階段提交而沒有開始第二階段時,DB2不能判斷其它同伴的狀況,不能作出回滾或前滾決定.這時候, DB2就把這個交易定為INDOUBT TRANSACTION。
嚴格按MESSAGE 推選的方法進行恢復, 一般先用DISPLAY THREAD(INDOUBT)找出 INDOUBT TRANSACTION 信息,確定采取回滾或前滾.然后用RECOVERY INDOUBT 命令回滾或前滾。
●QUERY CLIENT 詳情參看set client命令,可以配置連接和斷開連接時候的一些機制,同二段連接有很大關系。type1和type2連接。


<######################################>dpf相關
●LIST DATABASE PARTITION GROUPS
●LIST DBPARTITIONNUMS

<######################################>快照相關
●get snapshot for database on xx
●get snapshot for all databases
●get snapshot for remote database on dbname
●get snapshot for application applid appl-id
●get snapshot for application agentid appl-handle
●get snapshot for applications on dbname
●get snapshot for all applications
●get snapshot for locks for application applid appl-id
●get snapshot for locks for application agentid appl-handle
●get snapshot for locks on dbname
●get snapshot for tablespaces on dbname
●get snapshot for all bufferpools
●get snapshot for bufferpools on dbname
●get snapshot for dynamic sql on dbname

<######################################>bind相關
●PRECOMPILE 編譯*.sqc文件。
●BIND command Invokes the bind utility, which prepares SQL statements stored in the bind file generated by the precompiler, and creates a package that is stored in the database.
●db2rbind - Rebind all packages command
●REBIND command Allows the user to recreate a package stored in the database without the need for a bind file.
●db2bfd -s -b -v 察看bnd文件屬性 屬主、創建者、模式,-s查看sql,-b查看文件頭,-v查看變量


<######################################>catalog 編目相關
db2 catalog tcpip node XXX remote 22.5.232.24 server 50001 編目節點
db2 uncatalog node XXX 刪除node
db2 catalog db ccbdb as oltpdb at node dbserver 編目遠程庫

實例損壞、或者其它情況需要重新建造實例:
B2DIR/instance/db2idrop XXXinst
B2DIR/instance/db2icrt -u XXXinst XXXinst
db2 catalog db XXdb on /xxx/xxx(原來數據庫所在路徑)

db2 catalog tcpip node XXX remote 22.5.232.24 server 50001 編目節點
db2 list node directory 查看建成的node
db2 uncatalog node XXX 刪除node

db2 catalog db ccbdb as oltpdb at node dbserver 編目遠程庫
list db directory 可以看到所catalog的庫例如
Database alias = FXDB_ALIAS 通過alias來訪問遠程庫。
Database name = FXDB
Node name = FXDBNODE ##通過節點來訪問。
Database release level = c.00
Comment =
Directory entry type = Remote ##############代表為編目的遠程庫接口
Catalog database partition number = -1
Alternate server hostname =
Alternate server port number =

db2 uncatalog db XXDB 反編目xxdb


<######################################>創建,備份,恢復相關
db2 create db testdb on /xxx/xxx using codeset GBK territory CN 創建數據庫

db2"CREATE DATABASE GCFRONT USING CODESET GBK TERRITORY CN COLLATE USING IDENTITY
CATALOG TABLESPACE MANAGED BY SYSTEM USING ('/bcabdb/GCFRONT/sys/SYSCATSPACE')
USER TABLESPACE MANAGED BY DATABASE USING (FILE '/bcabdb/GCFRONT/usr/USERSPACE1' 1000) EXTENTSIZE 32 PREFETCHSIZE 64
TEMPORARY TABLESPACE MANAGED BY SYSTEM USING ('/bcabdb/GCFRONT/tmp/TEMPSPACE1')"

db2 backup db dbname to directory備份整個數據庫,也可以做鏡像分割進行備份和恢復。
db2 restore db dbname from directory 恢復整個數據庫
db2 rollforward db sample to end of logs

db2 rollforward db sample to 1998-04-03-14.21.56.000000

db2 rollforward db xxxdb query status就可以看到必須滾的日志了


db2 drop db testdb 刪除數據庫

<######################################>恢復被刪除的表
如何實施已刪除表的恢復(Dropped Table Recovery)
1. 首先數據庫要可以前滾恢復(數據庫配置參數logretain或userexit打開)。
2. 對要實施Drop Table Recovery的表空間(限regular tablespace),執行: alter tablespace 表空間名 dropped table recovery on
3. 用 list history dropped table all for 數據庫名 得到刪除表的tableid(例如 0000000000006d0000020003)和表結構的生成語句(DDL),記錄tableid和該語句以便恢復。之后,用drop命令刪除的表中的數據可以在前滾恢復時導出。
4. 恢復數據庫后,如果想恢復已刪除的表,在前滾時加recover dropped table tableid to 目標目錄 。 在該目錄下被刪除的表中的數據導出,例如導出至 ../NODE0000/data文件。利用上面提到表結構生成語句生成被刪除了的表,然后用import命令將數據導入表中。
例如:
db2 "restore db db00 taken at 20140527090933 logtarget /home/db2nps/db00/db2bak/logtar"
db2 "rollforward database db00 to end of logs and stop overflow log path (/home/db2nps/db00/arclog/sjzbinst/DB00/NODE0000/C0000000) recover dropped table 000000000000560100020004 to /home/db2nps/db00/db2bak"

 

<######################################>導入導出相關
export 導出數據
db2 "export to filename of ixf select * from tablename "
例:db2 "export to usertable.exp of del select * from myschema.usertable "
db2 "export to usertable.exp of ixf select * from myschema.usertable "
import導入數據
db2 "import from filename of del|ixf insert into tablename "
例:db2 "import from usertable.exp of del insert into myschema.usertable "
db2 "import from usertable.exp of ixf insert into myschema.usertable "
load游標導入
declare INSbasecurs5 cursor for select * from R_SHARE_DUE_TMP_BAK ;
load from INSbasecurs5 of cursor replace into CISYS.R_SHARE_DUE NONRECOVERABLE;

lob數據導入導出
export to /tmp/tmp/blob/XLSRULE.ixf of ixf LOBS TO /tmp/tmp/blob LOBFILE XLSRULE_blob MODIFIED BY LOBSINFILE MESSAGES OYP.OUT select * from hdev.XLSRULE
import from /tmp/tmp/blob/XLSRULE.ixf of ixf LOBS FROM /tmp/tmp/blob MODIFIED BY LOBSINFILE REPLACE INTO hdev.XLSRULE

XML數據導入導出
export to staff.ixf of ixf XML to /db2exp1/, /db2exp2/ modified by XMLINSEPFILES select * from db2inst1.staff

快速清空表
db2 "import from /dev/null of del replace into RISYS .SHARE_DUE_TMP_BAK ”可以快速釋放空間
如果是drop table不會馬上釋放,會逐步釋放空間。
快速清除一個大表? ALTER TABLE TABLE_NAME ACTIVE NOT LOGGED INITALLY WITH EMPTY TABLE 和使用load不同,load通過物理形式導入,修改該屬性只是不記錄日志,執行該語句只是激活該屬性,只在本連接中有效。


EXPORT TO "C:\Documents and Settings\likeliang\test.dat" OF DEL MODIFIED BY NOCHARDEL COLDEL0x03 DECPT. MESSAGES "C:\Documents and Settings\likeliang\test.txt"
LOAD FROM "C:\Documents and Settings\likeliang\test.dat" OF DEL MODIFIED BY NOCHARDEL COLDEL0x03 DECPT. MESSAGES "C:\Documents and Settings\likeliang\test.txt" REPLACE INTO CBMP.F_GL_INN_IAMAA_S;

modified by delprioritychar防止數據庫記錄中存在換行符,導致數據無法裝入的情況;默認定界符優先級是: record delimiter, character delimiter, column delimiter.使用該參數后的優先級是: character delimiter, record delimiter, column delimiter.

影響Export工具性能的因素:
Export中指定的Select語句的執行效率
Export指定的文件目錄的磁盤寫速度
影響Import工具性能的因素
指定的insert語句執行效率
指定的文件目錄的磁盤讀速度
提交頻率(在不產生日志滿和鎖升級等錯誤的前提下,盡量將COMMITCOUNT指定的大一些)
<######################################>歷史文件相關命令
查看歷史文件使用 list history
例如list history all for testdb
查看備份db2 list history backup all for testdb
查看歸檔db2 list history ARCHIVE LOG all for CICHEAL
刪除歷史文件使用 prune history timestamp [with force options]刪除小於等於該時間戳的內容。
恢復歷史文件使用 restore db testdb history file
修改更新歷史文件內的條目,詳情見信息中心UPDATE HISTORY FILE

 

<######################################>收集統計信息
下面是收集統計信息的命令的例子

!!!!!注意:不能收集列組上的分布統計信息。Collection of frequent values and distribution statistics on column groups is currently not supported; distribution statistics will not be collected when column groups are specified in the WITH DISTRIBUTION ON COLUMNS clause


1 收集表和索引上的數據庫統計信息,包含分布統計信息
runstats on table testinst.table1 with distribution and indexes all
2 收集表上的統計信息,索引上的詳細統計信息,包含分布統計信息
runstats on table testinst.table1 with distribution and detailed indexes all

3 收集選定列中包含分布的統計信息。
!!!!!!!!注意:這只是指定列的分布統計信息而不是列組的。
runstats on table testinst.table1 with distribution on columns(a,b)
4 只收集表上的統計信息,包含a、b列上的基本統計信息和c、d列上分布統計信息
runstats on table testinst.table1 on columns(a,b) with disribution on columns(c,d)
5 收集構成索引的a、b列以及非索引列的c、d列包含分布的統計信息。
runstats on table testinst.table1 with distribution on key columns and columns(c,d)
6 收集表上的數據庫統計信息,使用指定的num_freqvalues和db cfg中的num_quantiles收集所有列的分布統計信息。
runstats on table testinst.table1 with distribution default num_freqvalues 40 default后跟的num_freqvalues值的意義是所有為明確指定num_freqvalues值的列都使用此值。
7 收集表上的數據庫統計信息,包括列a、b上的分布統計信息,a使用指定的統計信息范圍,b、c使用默認統計信息范圍,並且收集idx_a、idx_b的數據庫統計信息。
runstats on table testinst.table1 with distribution on columns(a num_freqvalues 50 num_quatiles 60,b,c) default num_freqvalues 70 num_quatiles 80 and indexes testinst.idx_a,testinst.idx_b
8 收集所有索引上的統計信息,包括列a上分布統計信息,未列出的列上的分布統計信息將被清除。
runstats on table testinst.table1 with distribution on columns(a num_freqvalues 50 num_quatiles 60) and indexes all


<------->like statistics
在runstats 中指定like statistics子句時,將收集附加的統計信息,這些統計信息被存儲在sysibm.syscolumns表中的sub_count和sub_delim_length列中,它們僅針對字符串列進行收集,查詢優化器利用它們提高 where column like %abc/abc%/%abc%類型的選擇性估計。
收集所有列上的統計信息並指定varchar列上的like統計信息
runstats on table testinst.table1 on all columns and columns(a like statistics)


<------->包含統計信息配置文件的runstats
統計信息配置文件是一組選項,預先定義了特定表上要收集的統計信息。
db2中沒有刪除配置文件的選項。常用命令如下:
1 注冊一個配置文件,不收集數據庫統計信息
runstats on table testinst.table1 and indexes all set profile only
2 注冊一個配置文件,並執行所存儲統計信息配置文件的runstats命令選項來收集目錄統計信息
runstats on table testinst.table1 and indexes all set profile
3 只修改現有配置文件,不收集任何數據庫統計信息
runstats on table testinst.table1 with distribution and indexes all update frofile only
4 修改現有配置文件,並執行已經更新的配置文件的runstats命令來收集數據庫統計信息。
runstats on table testinst.table1 with distribution and indexes all update frofile
5 根據前面已經注冊的統計信息配置文件來查詢runstats選項。
select statistics_profile from sysibm.systables where name='TABLE1' and creator ='TESTINST'
6 使用前面注冊的統計信息文件收集統計信息
runstats on table testinst.table1 use profile

<------->抽樣的runstats
如果數據量巨大的表做全面的runstats會對資源造成很大的耗費,所以可以通過掃描表的一部分做抽樣來收集統計信息。

通過sampleed detailed子句來收集詳細的索引統計信息。例子如下:
1 通過抽樣收集全部索引上的詳細數據庫統計信息
runstats on table testinst.table1 and sampled detailed indexes all
2 收集索引上的詳細抽樣統計信息和表的分布統計信息。
runstats on table testinst.table1 with distrbution on key columns and sampled detailed indexes all

V8.2后提供了對表數據進行抽樣的兩種方法:行級別Bernoulli抽樣和系統頁級抽樣
頁級抽樣的對象是頁,以P/100的概率選擇每頁。在被選中頁中的,選中所有行。和行級抽樣和全表掃描比頁級抽樣節約了I/O

例子:
1 收集統計信息,包含10%行的分布統計信息
runstats on table testinst.table1 with distribution tablesample bernoulli(10)
2 控制收集統計信息的樣本集,以及可以重復使用相同的樣本集:(1024是指定的一個整數,表示將用於生成樣本的種子(seed),使用相同的種子可以生成相同的樣本,只要表數據沒發生改變)
runstats on table testinst.table1 with distribution tablesample bernoulli(10) repeatable(1024)
3 收集10%的數據頁上的索引統計信息和表統計信息。注意只對表頁抽樣,而不是索引頁。下例中的10%的表數據頁用於表統計信息的收集,而用於索引統計信息將使用所有的索引頁
runstats on table testinst.table1 and indexes all tablesample system(10)


總之抽樣信息的准確性取決於抽樣率、數據傾斜、以及用於抽樣的數據集群。


<------->reorgechk
例子:
1 收集全部表的統計信息,請慎用,很耗費系統資源,大系統不要在繁忙時間做。
$ db2 reorgchk update/current statistics [on tables all]
update statistics選項作用類似調用runstats來更新數據統計信息,但是所有列上的統計信息智能通過默認的runstats選項來收集。
2 收集單個表上的統計信息
reorgchk update/current statistics on table testinst.table1
3 收集一個模式下對象的數據庫統計信息
reorgchk update/current statistics on schema testinst

<------->load
V8.2之后可以在load期間收集統計信息,可以使用選項stistics use profile(需要在這之前創建統計信息配置文件),這樣快過在load后再執行runstats。選項statistics yes相對已經過時,不如stistics use profile控制的更精細化.
例子:
load from xx.del of del replace into testinst.table1 statistics usre profile

<------->創建索引的過程中收集統計信息
收集基本的索引統計信息:
create index testinst.idx_a on table1(a) collect statistics
收集擴展的索引統計信息:
create index testinst.idx_a on table1(a) collect detailed statistics
收集擴展的索引統計信息,指定使用抽樣:
create index testinst.idx_a on table1(a) collect sampled detailed statistics

 

 

 

 

 

 

 

 


=======================================================================================
===================================SQL=================================================
=======================================================================================

●db2 connect to dbname 連接數據庫
●db2 disconnect testdb 斷掉連接
●db2 COMMIT WORK 提交作業,詳細看命令詳解
●db2 CONNECT RESET 詳細看connect命令詳解
●db2 terminate 結束本session的所有應用,斷掉數據庫連接。
●db2 terminate 與db2 reset和disconnect的區別見命令詳解。
●create schema schema_name
●set current schema / set current sqlid
was的數據源中的屬性中的currentschema配置是區分大小寫的,例如配置了模式jzsd模式,他引用的時候會強制使用小寫模式名,而通常db2中為大寫,所以要注意
●db2 "call PRO_F_CM_SRC_TFUNDINFO('20111231','3',?)" 執行存儲過程PRO_F_CM_SRC_TFUNDINFO(22.5.228.188 rdmusr rdmusr@123)
創建存儲過程的時候,如果使用db2 -t 來執行創建,最好使用db2 -td xxx end結尾使用分隔符xxx,因為存儲過程中的語句結束符使用的";"所以會混淆。
●rename table xxtable to yytable
●rename index xxindex to yyindex
●rename tablespace xx to yy
●flush package cache DYNAMIC 清空動態包緩存

 

<######################################>db2對象的大小寫

例如表名,字段名,模式名,在默認建立時db2會自動將其轉換成大寫。只有使用雙引號例如"objectname"才能強制為小寫。例如:
create table "gdp".table1 (a int)
create table test.table1(a int)

db2 list tables for all
Table/View Schema Type Creation time
------------------------------- --------------- ----- --------------------------
TABLE1 gdp T 2012-08-24-09.33.54.864692
TABLE1 TEST T 2012-08-21-18.10.13.747499

select * from gdp.table1
SQL0204N "GDP.TABLE1" is an undefined name. SQLSTATE=42704
select * from "gdp".table1
A
-----------
0 record(s) selected.

<######################################>創建表空間
create tablespace testspace1 pagesize 16k managed by database using (file '/backup/containers/test1' 500) extentsize 32 bufferpool testbuf16k
create tablespace testspace2 pagesize 8k managed by automatic storage initialsize 10 M bufferpool testbuf8k
create tablespace testspace2 pagesize 16k managed by automatic storage bufferpool buf16k initialsize 50M increasesize 5M extentsize 64
alter tablespace testspace2 extend(file '/backup/containers/test2' 5M)
alter tablespace testspace2 extend (all 5M)
alter tablespace testspace2 add(file '/backup/containers/test3' 5M)


<######################################>創建修改bufferpool
create bufferpool testbuf16k size 1024 pagesize 16k
create bufferpool testbuf16k size 1024 pagesize 16k numblockpages 512 blocksize 32
drop bufferpool testbuf16k
alter bufferpool GCBP8K size 2048


<######################################>主鍵外鍵
外鍵語法:例子
create table A (
id int not null,
name varchar(30),
constraint constraint_xxx primary key (id) 主鍵
);
也可以
create table A (
id int not null,
name varchar(30),
primary key (id)
);

create table B (
id int not null,
name varchar(30),
groupid int,
primary key (id),
constraint constraint_yyy foreign key (groupid) references A(id) on delete cascade on update cascade 外鍵
);
也可以
create table B (
id int not null,
name varchar(30),
groupid int,
primary key (id),
foreign key (groupid) references A(id) on delete cascade
);

更改foreign key約束定義的引用行為(delete cascade/delete set null/delete no action),默認是delete on action
引用行為(當主表中一條記錄被刪除時,確定如何處理字表中的外部碼字段):
delete cascade : 刪除子表中所有的相關記錄
delete set null : 將所有相關記錄的外部碼字段值設置為NULL
delete no action: 不做任何操作

<######################################>comment
comment ON TABLE t1 is 'test table 1 aaaaa'
select remarks from syscat.tables where tabname='T1'

comment on column gdp1.a is 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
select remarks from syscat.columns where tabname='GDP1' and colname='A'

更新commnet只要再執行commnent語句,新注釋就會替換舊注釋了。

<######################################>創建索引
創建集群索引create index index1 on table1(a,b) cluster

創建唯一值索引
CREATE UNIQUE INDEX I_ztables_tabname ON zjt_tables(tabname);

創建雙向索引。
create index index1 on table1 (a desc) allow reverse scans 允許雙向掃描。
create index index1 on table1 (a desc) disallow reverse scans 不允許反向掃描。

create index index1 on table1 (a) include(b)
create index index1 on table1 (a,b)

指定索引頁中最小已用空間的閥值(pct是percentage的縮寫。):
create index index1 on table1 (a) minpctused 20
當低於該值時候,啟動聯機索引重組(前提是db cfg中的auto_maint 、auto_tbl_maint 、auto_reorg 參數為on)
就是當索引數據在葉子頁中占用的空間少於20%時候會嘗試將相鄰的兩個葉子頁進行合並,當然這只能解決葉子頁碎片化的問題。

指定索引創建時候預留出的空閑空間
create index index1 on table1 (a) pctfee 10
在索引創建的時候為每個葉子頁預留出10%的空閑空間,一可以避免后續的插入操作導致葉子頁滿后索引頁頻繁分裂,二可以對於聚簇索引可以保持索引數據的正確順序。

<######################################>序列:
create sequence xxxseq start with 1 increment by 1 maxvalue 100 nocycle cache 25
alter sequence xxxseq restart with 1
$ db2 "values next value for xxxseq"
1
-----------
3
SELECT NEXT VALUE FOR xxseq FROM sysibm.sysdummy1

<######################################>分區表相關
可以使用 MON_GET_TABLE
db2 "select tabname from syscat.datapartitions where seqno !=0"
db2 describe data partitions for table lineitem show detail


--create source table named test
drop table db2inst1.test;
create table db2inst1.test (id integer ,idd integer);
--insert data from below into db2inst1.test
insert into db2inst1.test
with a (id,addrid) as (values(1,1)
union all
select a.id+1,int(rand()*4)+1 from a a where a.id <10000)

select * from a;
commit;


--create target table test_p like table test but partitioned
drop table db2inst1.test_p;
create table db2inst1.test_p (id integer,idd integer) partition
by (idd) ( partition test_p1 starting from 1 inclusive ending at 1 inclusive ,
partition test_p2 starting from 2 inclusive ending at maxvalue inclusive);
commit;

--now using sysproc.sysibmadm.admin_move_table() procedure move data from soure
table test to target test_p which have same structure

call sysproc.admin_move_table('DB2INST1','TEST','TEST_P','','MOVE');
COMMIT;


<######################################>修改表結構
alter table CST_BANK_ZONE alter BRANCH_CODE set data type CHARACTER(6)
再對表操作會報錯57016 表為inactive狀態 需要執行:
reorg table XXX 或
runstats on table 或
reorgchk on table all
其實目的就是收集統計信息。

alter table EBC_BILL_LIST alter column EBL_SEQNO restart with 9000000 修改隊列初始值
ALTER TABLE "RISYS"."SHARE_DUE_TMP_BAK" ALTER COLUMN C_SHAREDUE_NO DROP IDENTITY 刪除identity定義。

<######################################>
UDF:要運行 DB2 Java 存儲過程或 UDF,還需要更新服務器上的 DB2 數據庫管理程序配置,以包括在該機器上安裝 JDK 的路徑
db2 update dbm cfg using JDK11_PATH d:sqllibjavajdk

<######################################>常用的字符串函數
ltrim、rtrim去除左右空格,
left、right、substr取字符串,
length取字符串長度,
CONCAT(ARG1,ARG2) 字符串連接||,
LCASE、LOWER函數返回定長、變長字符串的小寫形式,
UCASE、UPPER函數返回定長、變長字符串的大寫形式,
INSERT(ARG1,POS,SIZE,ARG2) 返回一個字符串,將ARG1從POS處刪除SIZE個字符,將ARG2插入該位置,
LOCATE(ARG1,ARG2,<POS>) LOCATE函數在ARG2中查找ARG1第一次出現的位置,如果指定POS,則從ARG2的POS處開始查找ARG1第一次出現的位置。
POSSTR(EXP1,EXP2) POSSTR函數返回EXP2在EXP1中的位置。
REPLACE(EXP1,EXP2,EXP3) REPLACE函數用EXP3代替EXP1中所有的EXP2。
SPACE(SIZE) 返回一個包含SIZE個空格的字符串
VALUE(EXPRESSION1,EXPRESSION2)
COALESCE(ARG1,ARG2...) 返回參數集中第一個非null參數。用法類似於VALUE函數

注釋:“--”(兩個減號)
字符串連接:“||”
如set msg=’aaaa’||’bbbb’,則msg為’aaaabbbb’
字符串的引用:‘’(一定用單引號),如果需要輸入單引號,輸入兩個單引號即可(例如:select '''' from sysibm.sysdummy1)。

轉義字符
如果你想查詢字符串中包含‘%’或‘_’ ,就得使用轉義字符(Escape Characters)。比如,要想查詢book_title中包含字符串’99%’的紀錄:
SELECT * FROM books WHERE book_title like ‘%99!%%’ escape ‘!’
后面的escape ‘!’是定一個轉義字符‘!’, 指明緊跟着轉義字符’!'后的%不再是統配符。


<######################################>列函數或叫集合函數
列函數對列中的一組值進行運算以得到單個結果值。下列就是一些列函數的示例。
AVG 返回某一組中的值除以該組中值的個數的和
COUNT 返回一組行或值中行或值的個數
MAX 返回一組值中的最大值
MIN 返回一組值中的最小值

<######################################>標量函數
標量函數對值進行某個運算以返回另一個值。
下列就是一些由DB2 通用數據庫提供的標量函數的示例。
ABS 返回數的絕對值
HEX 返回值的十六進制表示
LENGTH 返回自變量中的字節數(對於圖形字符串則返回雙字節字符數。)
YEAR 抽取日期時間值的年份部分
COALESCE函數返回()中表達式列表中第一個不為空的表達式,可以帶多個表達式, 和oracle的isnull類似。


DAYNAME 返回一個大小寫混合的字符串,對於參數的日部分,用星期表示這一天的名稱(例如,Friday)。
DAYOFWEEK 返回參數中的星期幾,用范圍在 1-7 的整數值表示,其中 1 代表星期日。
DAYOFWEEK_ISO 返回參數中的星期幾,用范圍在 1-7 的整數值表示,其中 1 代表星期一。
DAYOFYEAR 返回參數中一年中的第幾天,用范圍在 1-366 的整數值表示。
DAYS 返回日期的整數表示。
JULIAN_DAY 返回從公元前 4712 年 1 月 1 日(儒略日歷的開始日期)到參數中指定日期值之間的天數,用整數值表示。
MIDNIGHT_SECONDS 返回午夜和參數中指定的時間值之間的秒數,用范圍在 0 到 86400 之間的整數值表示。
MONTHNAME 對於參數的月部分的月份,返回一個大小寫混合的字符串(例如,January)。
TIMESTAMP_ISO 根據日期、時間或時間戳記參數而返回一個時間戳記值。
TIMESTAMP_FORMAT 從已使用字符模板解釋的字符串返回時間戳記。
TIMESTAMPDIFF 根據兩個時間戳記之間的時差,返回由第一個參數定義的類型表示的估計時差。
TO_CHAR 返回已用字符模板進行格式化的時間戳記的字符表示。TO_CHAR 是 VARCHAR_FORMAT 的同義詞。
TO_DATE 從已使用字符模板解釋過的字符串返回時間戳記。TO_DATE 是 TIMESTAMP_FORMAT 的同義詞。
WEEK 返回參數中一年的第幾周,用范圍在 1-54 的整數值表示。以星期日作為一周的開始。
WEEK_ISO 返回參數中一年的第幾周,用范圍在 1-53 的整數值表示。

要使當前時間或當前時間戳記調整到 GMT/CUT,則把當前的時間或時間戳記減去當前時區寄存器:
current time - current timezone
current timestamp - current timezone

給定了日期、時間或時間戳記,則使用適當的函數可以單獨抽取出(如果適用的話)年、月、日、時、分、秒及微秒各部分:
YEAR (current timestamp)
MONTH (current timestamp)
DAY (current timestamp)
HOUR (current timestamp)
MINUTE (current timestamp)
SECOND (current timestamp)
MICROSECOND (current timestamp)

因為沒有更好的術語,所以您還可以使用英語來執行日期和時間計算:
current date + 1 YEAR
current date + 3 YEARS + 2 MONTHS + 15 DAYS
current time + 5 HOURS - 3 MINUTES + 10 SECONDS

從時間戳記單獨抽取出日期和時間也非常簡單:
DATE (current timestamp)
TIME (current timestamp)

而以下示例描述了如何獲得微秒部分歸零的當前時間戳記:

CURRENT TIMESTAMP - MICROSECOND (current timestamp) MICROSECONDS

如果想將日期或時間值與其它文本相銜接,那么需要先將該值轉換成字符串。為此,只要使用 CHAR() 函數:

char(current date)
char(current time)
char(current date + 12 hours)

要將字符串轉換成日期或時間值,可以使用:

TIMESTAMP ('2002-10-20-12.00.00.000000')
TIMESTAMP ('2002-10-20 12:00:00')
DATE ('2002-10-20')
DATE ('10/20/2002')
TIME ('12:00:00')
TIME ('12.00.00')

TIMESTAMP()、DATE() 和 TIME() 函數接受更多種格式。上面幾種格式只是示例,我將把它作為一個練習,讓讀者自己去發現其它格式。

有時,您需要知道兩個時間戳記之間的時差。為此,DB2 提供了一個名為 TIMESTAMPDIFF() 的內置函數。但該函數返回的是近似值,因為它不考慮閏年,而且假設每個月只有 30 天。以下示例描述了如何得到兩個日期的近似時差:

timestampdiff (<n>, char(
timestamp('2002-11-30-00.00.00')-
timestamp('2002-11-08-00.00.00')))

對於 <n>,可以使用以下各值來替代,以指出結果的時間單位:

1 = 秒的小數部分
2 = 秒
4 = 分
8 = 時
16 = 天
32 = 周
64 = 月
128 = 季度
256 = 年
當日期很接近時使用 timestampdiff() 比日期相差很大時精確。如果需要進行更精確的計算,可以使用以下方法來確定時差(按秒計):

(DAYS(t1) - DAYS(t2)) * 86400 +
(MIDNIGHT_SECONDS(t1) - MIDNIGHT_SECONDS(t2))

為方便起見,還可以對上面的方法創建 SQL 用戶定義的函數:

CREATE FUNCTION secondsdiff(t1 TIMESTAMP, t2 TIMESTAMP)
RETURNS INT
RETURN (
(DAYS(t1) - DAYS(t2)) * 86400 +
(MIDNIGHT_SECONDS(t1) - MIDNIGHT_SECONDS(t2))
)
@

如果需要確定給定年份是否是閏年,以下是一個很有用的 SQL 函數,您可以創建它來確定給定年份的天數:

CREATE FUNCTION daysinyear(yr INT)
RETURNS INT
RETURN (CASE (mod(yr, 400)) WHEN 0 THEN 366 ELSE
CASE (mod(yr, 4)) WHEN 0 THEN
CASE (mod(yr, 100)) WHEN 0 THEN 365 ELSE 366 END
ELSE 365 END
END)@

最后,以下是一張用於日期操作的內置函數表。它旨在幫助您快速確定可能滿足您要求的函數,但未提供完整的參考。有關這些函數的更多信息,請參考 SQL 參考大全。

SQL 日期和時間函數
DAYNAME 返回一個大小寫混合的字符串,對於參數的日部分,用星期表示這一天的名稱(例如,Friday)。
DAYOFWEEK 返回參數中的星期幾,用范圍在 1-7 的整數值表示,其中 1 代表星期日。
DAYOFWEEK_ISO 返回參數中的星期幾,用范圍在 1-7 的整數值表示,其中 1 代表星期一。
DAYOFYEAR 返回參數中一年中的第幾天,用范圍在 1-366 的整數值表示。
DAYS 返回日期的整數表示。
JULIAN_DAY 返回從公元前 4712 年 1 月 1 日(儒略日歷的開始日期)到參數中指定日期值之間的天數,用整數值表示。
MIDNIGHT_SECONDS 返回午夜和參數中指定的時間值之間的秒數,用范圍在 0 到 86400 之間的整數值表示。
MONTHNAME 對於參數的月部分的月份,返回一個大小寫混合的字符串(例如,January)。
TIMESTAMP_ISO 根據日期、時間或時間戳記參數而返回一個時間戳記值。
TIMESTAMP_FORMAT 從已使用字符模板解釋的字符串返回時間戳記。
TIMESTAMPDIFF 根據兩個時間戳記之間的時差,返回由第一個參數定義的類型表示的估計時差。
TO_CHAR 返回已用字符模板進行格式化的時間戳記的字符表示。TO_CHAR 是 VARCHAR_FORMAT 的同義詞。
TO_DATE 從已使用字符模板解釋過的字符串返回時間戳記。TO_DATE 是 TIMESTAMP_FORMAT 的同義詞。
WEEK 返回參數中一年的第幾周,用范圍在 1-54 的整數值表示。以星期日作為一周的開始。
WEEK_ISO 返回參數中一年的第幾周,用范圍在 1-53 的整數值表示。


時間戳處理:db2 "values VARCHAR_FORMAT(timestamp(timestamp('20131219014701')),'DD/MM/YY HH24:MI:SS')


<######################################>數據類型
數據類型 類型 特性 示例或范圍
CHAR(15) 定長字符串 最大長度為 254 'Sunny day '
VARCHAR(15) 變長字符 最大長度為 4000 'Sunny day'
SMALLINT 數字 長度為 2 字節精度為 5 位范圍為-32768 至 32767
INTEGER 數字 長度為 4 字節精度為 10 位范圍為-2147483648 至 2147483647
REAL 數字 單精度浮點32 位近似值 范圍為-3.402E+38至-1.175E-37或 1.175E-37 至-3.402E+38或零
DOUBLE 數字 雙精度浮點64 位近似值 范圍為-1.79769E+308 至-2.225E-307或 2.225E-307 至 1.79769E+308或零
DECIMAL(5,2) 數字 精度為 5小數位為 2 范圍為 -10**31+1 至 10**31-1
DATE 日期時間 三部分值 1991-10-27
TIME 日期時間 三部分值 13.30.05
TIMESTAMP 日期時間 七部分值 1991-10-27-13.30.05.000000
二進制大對象 (BLOB) 字符串。
字符大對象 (CLOB) 字符串,它的字符序列可以是單字節字符或多字節字符, 或這兩者的組合。
雙字節字符大對象 (DBCLOB) 字符串,它的字符序列是雙字節字符。

<######################################>常用sql和技巧
索引拼接:select substr(indschema,1,20),substr(indname,1,20),listagg(colname,', ') within group(order by colseq) as list from syscat.indexcoluse group by indschema,indname
通過存儲過程調用管理命令,call sysproc.admin_cmd('load from /home/xx.del of del messages /home/xxx.msg replace into sacle') ,該存儲並不支持所有的管理命令,細節查看信息中心
只取表的幾行數據:select * from table1 fetch first 10 rows only
db2 "create table test like emp" 創建表結構一樣的表,但是注意一些表的屬性和約束並不一定相同,可以通過db2look查看
db2 "create table test as (select * from emp) definition only“ 創建表.
db2不能像sqlserver樣,使用select into 創建一個表,db2中的select into只能用於存儲過程,意思是把值取到一個變量中,
select count(col) from table count不統計col為NULL的值。
創建視圖:db2 create view view1 as select id from tb1
建立別名 create alias db2admin.tables for sysstat.tables;
類型轉換(cast) ip datatype:varchar select cast(ip as integer)+50 from log_comm_failed 或者使用select decimal(amount,16,2) from tablename;
多個字段時如何不通過使用select子句使用in/not in,注意:這里只用一個values select * from tabschema.tabname where (colA, colB, colC) [not] in (values (valueA1, valueB1, valueC1), (valueA2, valueB2, valueC2), ...(valueAn, valueBn, valueCn))
給某個模式授權 db2 list tables for schema eximuser |awk '{print "grant select on eximuser." $1 " to odsuser">1.sql
生成一個Runstats CLP腳本 select 'runstats on table'||rtrim(tabschema)||'.'||char(tabname,40)||'and detailed indexes all;' from syscat.tables where type='T' order by tabschema,tabname;

多表的關聯更新方法(最好使用merge)
db2的update語法不支持“update table1 set t1.col1=t2.value1 from table1 t1,table2 t2 where …”的寫法,但是可以通過如下方法解決:
update table1 t1 set t1.col1=(select t2.col1 from table2 t2 where …)
例:update test t1 set (t1.username,t1.instcode) = (select t2.instcode,t2.instname from sysinsttb t2 where t2.instcode=t1.instcode);


插入記錄 insert into zjt_tables select * from tables
插入100000條數據進入test表
create table test (id integer,idd integer)
insert into test with a (id ,idd) as (values(1,1) union all select a.id+1,int(rand()*4+1) from a where a.id<100000) select * from a;
insert into yhdab values ('20000300001','123456','user01','20000300001'), ('20000300002','123456','user02','20000300002')
利用存儲過程插入多條數據:
create procedure sp_insert2 (in count int)
language sql
begin
declare i integer default 0;
while i<count
do
insert into t2 values(i, 'abcdefghixxxxxxxxxxxxxxxxx' || char(i),
'bbbbbbbbbbbbbbbbbbbbbbbbbb' || char(i));
set i=i+1;
end while;
end
@

 

 


取得N-M條記錄 其中以第一列作為排序的字段
db2 SELECT * FROM ((SELECT * FROM (SELECT * FROM 表 ORDER BY 1 ASC FETCH FIRST M ROWS ONLY) a ORDER BY 1 DESC FETCH FIRST (M-N+1) ROWS ONLY)) b ORDER BY 1 ASC

創建觸發器:CREATE TRIGGER zjt_tables_del AFTER DELETE ON zjt_tables REFERENCING OLD AS O FOR EACH ROW MODE DB2SQL Insert into zjt_tables1 values(substr(o.tabschema,1,8),substr(o.tabname,1,10))

select * from tabschema.tabname where (colA, colB, colC) [not] in (values (valueA1, valueB1, valueC1), (valueA2, valueB2, valueC2), ...(valueAn, valueBn, valueCn))

 


查找重復索引
idx(a,b,c) idx2(a,b) idx3(a),idx4(b) 其中 idx2 idx3算是重復索引
可以寫個存儲過程逐條處理,但是我有個一次性的辦法,比較快,
可以用個臨時表做個全連接得到同一張表的索引列的排列組合
insert into xxx(tabname,xx,yy) select a.tabname,a.columes,b.columes from indexes a,indexes b where a.tabname=b.tabname
把xx=yy的排除然后就可以得到一張表上所有索引的組合,這樣就可以用POSSTR函數select一下就出來了。
我這只是個思路,就是把本來需要對不同行間的字段做比較轉化我同一行間的數據來坐比較,
列出索引中前序真子集:
select tabschema,tabname,indname,colnames from
(
select substr(a.tabschema,1,30)as tabschema,substr(a.tabname,1,30) as tabname,substr(a.indname,1,30) as indname, substr(a.colnames,1,70) as colnames
from syscat.indexes a
where
exists (select 1 from syscat.indexes b where a.colnames =substr(b.colnames,1,length(a.colnames)) and a.tabname=b.tabname having count(*)>1 )
) a group by tabschema,tabname,indname,colnames

 


<######################################>顯式鎖獲得
大多數情況下都是DB2數據庫管理器控制鎖的,唯一可以顯示指定鎖定的對象只有表。
可以使用lock table xx in share|exclusive mode語句可以在會話級別顯式的獲得表鎖。例子可以參看鎖試驗部分。
可以使用alter table xx locksize table|row 修改表的獲得鎖的級別參數locksize使用row時候,事務首先嘗試獲得行級鎖,必要時才鎖升級,這是默認的表locksize值。locksize使用table時,事務總是使用非意圖表鎖鎖定該表。


<######################################>物化視圖

DB2物化視圖(MQT Materialized Query Table)
create table mqt1 as (select * from t1 where a=1) data initially deferred refresh deferred;
refresh table mqt1;


<######################################>如何使用select獲取常量或變量值:使用表sysibm.sysdummy1
select 1 from sysibm.sysdummy1
select current timestamp from sysibm.sysdummy1
select current schema from sysibm.sysdummy1
select CURRENT QUERY OPTIMIZATION from sysibm.sysdummy1 (只影響當前session)

使用(values n) as xx和sysibm.sysdummy1有同樣的效果
select current time from (values 1) as tmp;
select current date from (values 2) as tmp;
select year(current date) from (values 2) as tmp; --獲取系統年份
select month(current date) from (values 2) as tmp; --獲取系統月份
select day(current date) from (values 2) as tmp; --獲取系統日份
(CURRENT TIMESTAMP 精度達到微秒)


或者使用寄存器
values 1
values current timestamp
values current schema
values current date
Special registers
A special register is a storage area that is defined for an application process by the database manager. It is used to store information that can be referenced in SQL statements. A reference to a special register is a reference to a value provided by the current server. If the value is a string, its CCSID is a default CCSID of the current server. The special registers can be referenced as follows:


>>-+-+-CURRENT CLIENT_ACCTNG-+-----------------------+---------><
| '-CLIENT ACCTNG---------' |
+-+-CURRENT CLIENT_APPLNAME-+---------------------+
| '-CLIENT APPLNAME---------' |
+-+-CURRENT CLIENT_USERID-+-----------------------+
| '-CLIENT USERID---------' |
+-+-CURRENT CLIENT_WRKSTNNAME-+-------------------+
| '-CLIENT WRKSTNNAME---------' |
+-+-CURRENT DATE-----+----------------------------+
| | (1) | |
| '-CURRENT_DATE-----' |
+-CURRENT DBPARTITIONNUM--------------------------+
+-CURRENT DECFLOAT ROUNDING MODE------------------+
+-CURRENT DEFAULT TRANSFORM GROUP-----------------+
+-CURRENT DEGREE----------------------------------+
+-CURRENT EXPLAIN MODE----------------------------+
+-CURRENT EXPLAIN SNAPSHOT------------------------+
+-CURRENT FEDERATED ASYNCHRONY--------------------+
+-CURRENT IMPLICIT XMLPARSE OPTION----------------+
+-CURRENT ISOLATION-------------------------------+
+-CURRENT LOCALE LC_MESSAGES----------------------+
+-CURRENT LOCALE LC_TIME--------------------------+
+-CURRENT LOCK TIMEOUT----------------------------+
+-CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION-+
+-CURRENT MDC ROLLOUT MODE------------------------+
+-CURRENT OPTIMIZATION PROFILE--------------------+
+-CURRENT PACKAGE PATH----------------------------+
+-+-CURRENT PATH-----+----------------------------+
| | (1) | |
| '-CURRENT_PATH-----' |
+-CURRENT QUERY OPTIMIZATION----------------------+ 優化級別
+-CURRENT REFRESH AGE-----------------------------+
+-+-CURRENT SCHEMA-----+--------------------------+
| | (1) | |
| '-CURRENT_SCHEMA-----' |
+-+-CURRENT SERVER-----+--------------------------+
| | (1) | |
| '-CURRENT_SERVER-----' |
+-CURRENT SQL_CCFLAGS-----------------------------+
+-+-CURRENT TIME-----+----------------------------+
| | (1) | |
| '-CURRENT_TIME-----' |
+-+-CURRENT TIMESTAMP-----+--+---------------+----+
| | (1) | '-(--integer--)-' |
| '-CURRENT_TIMESTAMP-----' |
+-+-CURRENT TIMEZONE-----+------------------------+
| | (1) | |
| '-CURRENT_TIMEZONE-----' |
+-+-CURRENT USER-----+----------------------------+
| | (1) | |
| '-CURRENT_USER-----' |
+-+-SESSION_USER-+--------------------------------+
| '-USER---------' |
'-SYSTEM_USER-------------------------------------'


<######################################>聯邦庫或稱聯合庫

db2 update dbm cfg using FEDERATED yes 修改后重新啟動實例

用作跨庫訪問(即使同一實例下的兩個庫想要進行聯邦也需要先建立節點和遠程庫訪問)
--------------------------------------建立聯合庫
在A 庫 訪問B庫德表 A庫用戶AA B庫用戶BB,
update dbm cfg using federated yes
-- ---------------------------
-- DDL Statements for WRAPPER
-- ---------------------------
CREATE WRAPPER "DRDA" LIBRARY 'libdb2drda.a' OPTIONS (DB2_FENCED 'N' )
-- ---------------------------
-- DDL Statements for SERVER
-- ---------------------------
CREATE SERVER "LCPT" TYPE DB2/UDB VERSION '9.1' WRAPPER "DRDA" AUTHORIZATION "BB" PASSWORD "XXXX" OPTIONS (DBNAME 'B' ,PASSWORD 'Y' )
用戶密碼為B庫的用戶密碼 注意""里的用戶名密碼要與實際的大小寫相同。這個認證用戶只需要有能訪問庫的權限即可、不需要有高權限。
-- --------------------------------
-- DDL Statements for USER MAPPING
-- --------------------------------
CREATE USER MAPPING FOR AA SERVER "LCPT" OPTIONS (REMOTE_AUTHID 'BB' ,REMOTE_PASSWORD 'XXX')
"for AA" 為本地AA庫的用戶A添加訪問權限 ,這里BB用戶的權限要求起碼可以訪問要聯邦的表的權限。可以和上一條CREATE SERVER中不使用同一用戶。

使用AA用戶登錄A庫執行下邊語句可以建成
CREATE NICKNAME "AGENT "."CCF" FOR "LCPT"."LCPTBY"."TBACCCFM"
注:BB用戶如果可以訪問A庫可以使用 db2 connect to A user BB using XXXX 連接到A庫創建NICKNAME,一定要使用db2 connect to A user BB using XXXX,如果A庫和BB在同一台服務器上只是su - BB 然后connect to A創建NICKNAME時候是同不過認證的.

聯邦還可以添加用戶mapping,使用多個用戶mapping

db2 connect to oltpdb user agent using agent123
# su - db2inst1

db2 => CREATE NICKNAME "AGENT "."INCALL_ACL_AG_GRP" FOR "INCALL"."AGENT"."ACL_AG_GRP"
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL1101N Remote database "webdb" on node "" could not be accessed with the
specified authorization id and password. SQLSTATE=08004
db2 =>
必須用AUTHORIZATION "agent"用戶建造nickename否則會報上邊的錯誤


查看server信息
SELECT * FROM SYSCAT.SERVEROPTIONS

查看聯邦
db2 list node directory
db2 "select * from syscat.servers"
db2 "select substr(AUTHID,1,10) as AUTHID,substr(AUTHIDTYPE,1,1) as AUTHIDTYPE,substr(SERVERNAME,1,10) as SERVERNAME,substr(OPTION,1,10) as OPTION,substr(SETTING,1,10) as SETTING from syscat.useroptions"

 


<######################################>常用的表函數語句和編目視圖
說明 目錄視圖
檢查約束 SYSCAT.CHECKS
列 SYSCAT.COLUMNS
檢查約束引用的列 SYSCAT.COLCHECKS
關鍵字中使用的列 SYSCAT.KEYCOLUSE
數據類型 SYSCAT.DATATYPES
函數參數或函數結果 SYSCAT.FUNCPARMS
參考約束 SYSCAT.REFERENCES
模式 SYSCAT.SCHEMATA
表約束 SYSCAT.TABCONST
表 SYSCAT.TABLES
觸發器 SYSCAT.TRIGGERS
用戶定義函數 SYSCAT.FUNCTIONS
視圖 SYSCAT.VIEWS


檢查沒有統計信息的表和索引
select tabname from syscat.tables where stats_time is null or stats_time in ("-1")
select indname from syscat.indexes where stats_time is null or stats_time in("-1")
select tabname from syscat.tables where stats_time < current timestamp- 30days
select indname from syscat.indexes where stats_time < current timestamp - 30 days

查看表空間和容器的使用大小
db2 "select char(tbsp_name,20)as tbsp_name,char(tbsp_type,10) as tbsp_type,char(tbsp_state,10) as tbsp_state,tbsp_free_pages,tbsp_page_size,tbsp_utilization_percent from sysibmadm.tbsp_utilization order by tbsp_utilization_percent"
db2 "select char(tbsp_name,20)as tbsp_name,char(container_name,80) as container_name,INT(TOTAL_PAGES) AS TOTAL_PAGES,INT(USABLE_PAGES) AS USABLE_PAGES from sysibmadm.container_utilization"

查看表和索引大小:
SELECT TABNAME,SUM(DATA_OBJECT_P_SIZE)/1024,SUM(INDEX_OBJECT_P_SIZE)/1024 FROM TABLE (SYSPROC.ADMIN_GET_TAB_INFO('模式','表名')) AS T GROUP BY TABNAME 注意模式和表明因為在編目表中都是大寫,所以在表函數中也要寫成大寫,DATA_OBJECT_P_SIZE的單位是KB,所以除以1024顯示的結果是M

SELECT (DATA_OBJECT_P_SIZE + INDEX_OBJECT_P_SIZE + LONG_OBJECT_P_SIZE + LOB_OBJECT_P_SIZE + XML_OBJECT_P_SIZE) AS TOTAL_P_SIZE FROM SYSIBMADM.ADMINTABINFO WHERE TABNAME = '表名'
另外統計表語句:
select * from tkdw.edw_tables_for_acrm a,(
select snapshot_timestamp,tabschema,tabname,
(coalesce(data_object_pages,0)+coalesce(index_object_pages,0)+coalesce(lob_object_pages,0)+coalesce(long_object_pages,0))*32/1024.0/1024 tab_size
from table(snap_get_tab('MDM85',-2))
order by (coalesce(data_object_pages,0)+coalesce(index_object_pages,0)+coalesce(lob_object_pages,0)+coalesce(long_object_pages,0))*32/1024.0/1024
desc) b
where a.tabname=b.tabname
and tabschema='MDM'
with ur;

 


查看日志使用:db2 "select int(total_log_used/1024/1024) as Log_used_meg,int(total_log_available/1024/1024) as Log_space_free_meg,int((float(total_log_used) / float(total_log_used+total_log_available))*100) as Pct_used,int(tot_log_used_top/1024/1024) as Max_log_used_meg,int(sec_log_used_top/1024/1024) as max_sec_used_meg,int(sec_logs_allocated) as Secondaries from sysibmadm.snapdb"


查看執行時間最長的語句:
當前正在執行的語句:
select ELAPSED_TIME_MIN,STMT_TEXT from sysibmadm.long_running_sql where ELAPSED_TIME_MIN is not NULL order by ELAPSED_TIME_MIN desc fetch first 1 rows only

查看快照:
select
NUM_EXECUTIONS as num ,
decimal((TOTAL_EXEC_TIME+TOTAL_EXEC_TIME_MS*0.000001)/NUM_EXECUTIONS,8,2) as exetime,
decimal((TOTAL_USR_CPU_TIME+TOTAL_SYS_CPU_TIME+TOTAL_USR_CPU_TIME_MS*0.000001+TOTAL_SYS_CPU_TIME_MS*0.000001)/NUM_EXECUTIONS,8,2) as cpu_time,
substr (STMT_TEXT,1,50) as stmt
from SYSIBMADM.SNAPDYN_SQL
where NUM_EXECUTIONS<>0
order by exetime desc
fetch first 3 rows only

查看統計信息收集時間,db2 "select name, stats_time from sysibm.systables"


表或視圖特權
grant select,delete,insert,update on tables to user
grant all on tables to user WITH GRANT OPTION
程序包特權
GRANT EXECUTE ON PACKAGE PACKAGE-name TO PUBLIC
模式特權
GRANT CREATEIN ON SCHEMA SCHEMA-name TO USER
數據庫特權
grant connect,createtab,dbadm on database to user
索引特權
grant control on index index-name to user
查看表上的權限(特權)
select "AUTHID", "PRIVILEGE","OBJECTSCHEMA", "OBJECTTYPE" from "SYSIBMADM"."PRIVILEGES" where objecttype='TABLE' and objectname= tab_name
查看用戶的系統權限:
SELECT substr(AUTHORITY,1,40), D_USER, D_GROUP, D_PUBLIC, ROLE_USER, ROLE_GROUP, ROLE_PUBLIC, D_ROLE FROM TABLE (SYSPROC.AUTH_LIST_AUTHORITIES_FOR_AUTHID ('DB2INST1', 'U') ) AS T ORDER BY AUTHORITY

檢索具有特權的所有授權名
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'DATABASE' FROM SYSCAT.DBAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'TABLE ' FROM SYSCAT.TABAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'PACKAGE ' FROM SYSCAT.PACKAGEAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'INDEX ' FROM SYSCAT.INDEXAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'COLUMN ' FROM SYSCAT.COLAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SCHEMA ' FROM SYSCAT.SCHEMAAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SERVER ' FROM SYSCAT.PASSTHRUAUTH
ORDER BY GRANTEE, GRANTEETYPE, 3


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM