db2sql手冊
『壹』 用sql如何給DB2表加鎖和解鎖
在DB2的命令行中輸入:
update monitor switches using lock on table on
然後打開另一個DB2命令窗口執行我的那個被弔死的Update語句。
然後在第一個DB2命令窗口執行: [@more@]get snapshot for locks on Database_Name(你的資料庫的名字)> locks.TXT
然後,可以看到第一個DB2的窗口有一個信息輸出,把這些信息輸出到TXT中,大致如下:
應用程序句柄 = 36
應用程序標識 = AC100C47.IC05.00F6C6095828
序號 = 0246
應用程序名 = java.exe
CONNECT 授權標識 = DB2ADMIN
應用程序狀態 = UOW 正在等待
狀態更改時間 = 未收集
應用程序代碼頁 = 1208
掛起的鎖定 = 0
總計等待時間(毫秒) = 0
應用程序句柄 = 43
應用程序標識 = *LOCAL.DB2.060512054331
序號 = 2273
應用程序名 = java.exe
CONNECT 授權標識 = DB2ADMIN
應用程序狀態 = 聯合請求暫掛
狀態更改時間 = 未收集
應用程序代碼頁 = 1208
掛起的鎖定 = 6
總計等待時間(毫秒) = 0
鎖定列表
鎖定名稱 = 0x031F9052000000000000000055
鎖定屬性 = 0x00000000
發行版標志 = 0x40000000
鎖定計數 = 255
掛起計數 = 0
鎖定對象名 = 0
對象類型 = 內部
方式 = S
鎖定名稱 = 0x26800000000000000000000044
鎖定屬性 = 0x00000000
發行版標志 = 0x40000000
鎖定計數 = 1
掛起計數 = 0
鎖定對象名 = 0
對象類型 = 內部
方式 = S
鎖定名稱 = 0x020006000F1700000000000052
鎖定屬性 = 0x00000000
發行版標志 = 0x00000001
鎖定計數 = 1
掛起計數 = 0
鎖定對象名 = 5903
對象類型 = 行
表空間名 = USERSPACE1
表模式 = DB2ADMIN
表名 = C_USER
方式 = NS
鎖定名稱 = 0x01000000010000000500BC0056
鎖定屬性 = 0x00000000
發行版標志 = 0x40000000
鎖定計數 = 1
掛起計數 = 0
鎖定對象名 = 0
對象類型 = 內部變化鎖定
方式 = S
鎖定名稱 = 0x535953534E333030FD965C0641
鎖定屬性 = 0x00000000
發行版標志 = 0x40000000
鎖定計數 = 1
掛起計數 = 0
鎖定對象名 = 0
對象類型 = 內部方案鎖定
方式 = S
鎖定名稱 = 0x02000600000000000000000054
鎖定屬性 = 0x00000000
發行版標志 = 0x00000001
鎖定計數 = 1
掛起計數 = 0
鎖定對象名 = 6
對象類型 = 表
表空間名 = USERSPACE1
表模式 = DB2ADMIN
表名 = C_USER
方式 = IS
應用程序句柄 = 557
應用程序標識 = *LOCAL.DB2.060512053913
序號 = 1254
應用程序名 = java.exe
CONNECT 授權標識 = DB2ADMIN
應用程序狀態 = 聯合請求暫掛
狀態更改時間 = 未收集
應用程序代碼頁 = 1208
掛起的鎖定 = 6
總計等待時間(毫秒) = 0
鎖定列表
鎖定名稱 = 0x031F9052000000000000000055
鎖定屬性 = 0x00000000
發行版標志 = 0x40000000
鎖定計數 = 255
掛起計數 = 0
鎖定對象名 = 0
對象類型 = 內部
方式 = S
鎖定名稱 = 0x26800000000000000000000044
鎖定屬性 = 0x00000000
發行版標志 = 0x40000000
鎖定計數 = 1
掛起計數 = 0
鎖定對象名 = 0
對象類型 = 內部
方式 = S
鎖定名稱 = 0x02000600071D00000000000052
鎖定屬性 = 0x00000000
發行版標志 = 0x00000001
鎖定計數 = 1
掛起計數 = 0
鎖定對象名 = 7431
對象類型 = 行
表空間名 = USERSPACE1
表模式 = DB2ADMIN
表名 = C_USER
方式 = NS
鎖定名稱 = 0x01000000010000000500BC0056
鎖定屬性 = 0x00000000
發行版標志 = 0x40000000
鎖定計數 = 1
掛起計數 = 0
鎖定對象名 = 0
對象類型 = 內部變化鎖定
方式 = S
鎖定名稱 = 0x535953534E333030FD965C0641
鎖定屬性 = 0x00000000
發行版標志 = 0x40000000
鎖定計數 = 1
掛起計數 = 0
鎖定對象名 = 0
對象類型 = 內部方案鎖定
方式 = S
鎖定名稱 = 0x02000600000000000000000054
鎖定屬性 = 0x00000000
發行版標志 = 0x00000001
鎖定計數 = 1
掛起計數 = 0
鎖定對象名 = 6
對象類型 = 表
表空間名 = USERSPACE1
表模式 = DB2ADMIN
表名 = C_USER
方式 = IS
其中應用程序句柄43和557的狀態都是死鎖了,猜測是這2個應用爭用DB2的表,造成死鎖,根據日誌提示,在DB2的命令窗口輸入:
force application (43)
force application (557)
提示這個操作是非同步的,我執行list applicaions,結果進程中還有那2個進程,那2個進程可能是在執行比較大的操作,需要耐心等待,如何還不行,則使用下面的命令來強制所有的應用都停止,然後重啟DB2:
force application all
terminate
db2stop force
db2start
如果DB2在Window上,則可以使用「控制中心」->實例->右鍵「應用程序」,可以看到當前的鎖定情況,並且可以強行關閉某個進程,也可以顯示「鎖定鏈」。
『貳』 SQL資料庫使用速查手冊的目錄
第1章資料庫系統與SQL基礎知識
1.1資料庫系統基本概念
1.1.1資料庫系統的基本特點
1.1.2資料庫定義與資料庫系統構成
1.1.3資料庫系統的發展
1.2數據模型
1.2.1數據模型的基本概念
1.2.2概念數據模型
1.2.3結構數據模型
1.3關系數據模型
1.3.1關系數據模型的基本結構與特點
1.3.2關系數據模型的完整性約束
1.3.3關系數據語言
1.4SQL基礎知識
1.4.1SQL概述
1.4.2SQL資料庫的基本結構
1.4.3SQL應用的主要內容
第2章SQL應用
2.1資料庫與數據表的定義
2.1.1資料庫的定義
2.1.2數據表的定義
2.1.3表結構的修改
2.1.4索引的定義
2.2數據查詢
2.2.1查詢語句的基本結構
2.2.2SELECT子句
2.2.3FROM子句
2.2.4WHERE子句
2.2.5ORDERBY子句
2.2.6聚集函數應用
2.2.7GROUPBY子句
2.2.8HAVING子句
2.2.9連接查詢
2.2.10嵌套查詢
2.2.11集合查詢
2.3數據更新
2.3.1INSERT語句
2.3.2UPDATE語句
2.3.3DELETE語句
2.4視圖的定義
2.4.1創建視圖CREATEVIEW
2.4.2刪除視圖DROPVIEW
2.4.3視圖應用舉例
2.5數據控制
2.5.1創建用戶
2.5.2角色的創建與刪除
2.5.3許可權授予GRANT
2.5.4許可權傳遞WITHGRANTOPTION
2.5.5許可權回收REVOKE
2.6存儲過程
2.6.1存儲過程的創建
2.6.2存儲過程的調用
2.6.3常用的系統存儲過程
2.7觸發器
2.7.1觸發器的創建
2.7.2觸發器的刪除
2.8其他語句
2.8.1創建模式
2.8.2創建同義詞
第3章運算符
3.1算術運算符
+加
-減
*乘
/除
%取余
3.2關系運算符
=等於
!=不等於
>大於
<小於
=大於等於
=小於等於
<>不等於
3.3位運算符
&按位與運算符
│按位或運算符
^按位異或運算符
~按位取反運算符
3.4邏輯運算符
ALL與所有比較
ANY(SOME)與任意一個比較
EXISTS存在與否
AND邏輯與
OR邏輯或
BETWEEN范圍之間存在與否
NOT否定
IN是否在其中
LIKE模式匹配
REGEXP(RLIKE)模式匹配(MySQL)
3.5集合運算符
UNION求集合的和
EXCEPT求集合的差
MINUS求集合的差
INTERSECT求集合的交集
3.6其他運算符
||字元串結合
CASE替換
ISNULL是否為空
+取正
-取負
第4章函數
4.1統計函數
AVG函數
COUNT函數
MAX函數
MIN函數
SUM函數
4.2字元串函數
ASCII函數
AT函數
CHAR/CHR函數
CHARINDEX函數
CONCAT函數
INITCAP函數
INSERT函數
INSTR函數
LEFT函數
LEN/LENGTH/CHARACTER_LENGTH/CHAR_LENGTH函數
LOCATE函數
LOWER函數
LPAD/RPAD函數
LTRIM/RTRIM函數
NCHAR/NCHR函數
OCTET_LENGTH函數
POSITION函數
POSSTR函數
REPEAT/REPLICATE函數
REPLACE函數
REVERSE函數
RIGHT函數
SPACE函數
STR函數
STUFF函數
SUBSTR/SUBSTRING函數
TRANSLATE函數
TRIM函數
UNICODE函數
UPPER函數
4.3日期函數
ADD_MONTHS函數
CURRENT_DATE函數
CURRENT_TIME函數
CURRENT_TIMESTAMP函數
DATE_ADD/ADDDATE函數
ATE_FORMAT函數
DATE_SUB函數
DATEADD函數
DATEDIFF函數
DATENAME函數
DATEPART函數
DAY函數
DAYNAME函數
DAYOFMONTH函數
DAYOFWEEK函數
DAYOFYEAR函數
EXTRACT函數
GETDATE函數
HOUR函數
LAST_DAY函數
MINUTE函數
MONTH函數
MONTHNAME函數
MONTHS_BETWEEN函數
NEXT_DAY函數
NOW函數
QUARTER函數
SECOND函數
SYSDATE函數
TIME_FORMAT函數
WEEK函數
WEEKDAY函數
YEAR函數
4.4轉換函數
CAST函數
COALESCE函數
CONVERT函數
DECODE函數
ISNULL函數
NULLIF函數
NVL函數
TO_CHAR函數
TO_DATE函數
TO_NUMBER函數
4.5數學函數
ABS函數
ACOS函數
ASIN函數
ATAN函數
ATAN2函數
BITAND函數
CEIL/CEILING函數
COS函數
COT函數
DEGREES函數
EXP函數
FLOOR函數
GREATEST函數
LEAST函數
LN函數
LOG函數
LOG10函數
MOD函數
PI函數
POW/POWER函數
RADIANS函數
RAND/RANDOM函數
ROUND函數
SIGN函數
SIN函數
SQRT函數
SQUARE函數
TAN函數
TRUNC函數
第5章SQL應用程序編程介面
5.1ODBC7
5.2JDBC4
5.3ESQL/C(EmbeddedSQLforC)
5.4ADO
5.5OO4O&OCI
5.6PRO*C
5.7SQLJ
5.8XML
第6章資料庫的導入/導出
6.1Oracle資料庫的導入/導出
6.2DB2資料庫的導入/導出
6.3Sybase資料庫的導入/導出
6.4SQLServer資料庫的導入/導出
6.5MySQL資料庫的導入/導出
……
『叄』 db2 查詢資料庫里都有哪些表的SQL語句
select
name
from
sysibm.systables
where
type='t'
and
creator='db2admin'
type:資料庫表用t表示;資料庫視圖用v表示
creator:資料庫對象的創建者
select
tabname
from
syscat.tables
where
tabschema
=
current
schema
;//
獲取當前模式下面的所有用戶表
『肆』 想從事銀行方面的c語言開發,他上面還要了解db2資料庫的常用操作
1、 打開命令行窗口
#db2cmd
2、 打開控制中心
# db2cmd db2cc
3、 打開命令編輯器
db2cmd db2ce
=====操作資料庫命令=====
4、 啟動資料庫實例
#db2start
5、 停止資料庫實例
#db2stop
如果你不能停止資料庫由於激活的連接,在運行db2stop前執行db2 force application all就可以了 /db2stop force
6、 創建資料庫
#db2 create db [dbname]
7、 連接到資料庫
#db2 connect to [dbname] user [username] using [password]
8、 斷開資料庫連接
#db2 connect reset
9、 列出所有資料庫
#db2 list db directory
10、 列出所有激活的資料庫
#db2 list active databases
11、 列出所有資料庫配置
#db2 get db cfg
12、 刪除資料庫
#db2 drop database [dbname]
(執行此操作要小心)
如果不能刪除,斷開所有資料庫連接或者重啟db2
=========操作數據表命令==========
13、 列出所有用戶表
#db2 list tables
14、列出所有系統表
#db2 list tables for system
15、列出所有表
#db2 list tables for all
16、 列出系統表
#db2 list tables for system
17、列出用戶表
#db2 list tables for user
18、 列出特定用戶表
#db2 list tables for schema [user]
19、 創建一個與資料庫中某個表(t2)結構相同的新表(t1)
#db2 create table t1 like t2
20、 將一個表t1的數據導入到另一個表t2
#db2 "insert into t1 select * from t2"
21、 查詢表
#db2 "select * from table name where ..."
22、 顯示表結構
#db2 describe table tablename
23、 修改列
#db2 alter table [tablename] alter column [columname] set data type varchar(24)
======腳本文件操作命令=======
24、 執行腳本文件
#db2 -tvf scripts.sql
25、幫助命令
* 查看命令幫助
#db2 ? db2start
* 查看錯誤碼信息
#db2 ? 22001
* memo: 詳細命令請使用"db2 ? <command>"進行查看。
=========================
26、備份資料庫
#db2 backup db <db name>
備註:執行以上命令之前需要斷開資料庫連接
27、在線備份資料庫
#db2 -v "BACKUP DATABASE <database name> ONLINE TO <path> WITH 2 BUFFERS BUFFER 1024 INCLUDE LOGS WITHOUT PROMPTING"
28、恢復資料庫
#db2 restore db <source db name>
29、在線恢復資料庫
#db2 "RESTORE DB <database name> TO <db path> LOGTARGET <logpath> WITHOUT PROMPTING"
#db2 "ROLLFORWARD DB <database name> TO END OF LOGS AND STOP" ...
30、導出數據文件
#db2move <db name> export
[-sn <模式名稱,一般為db2admin>]
[-tn <表名,多個之間用逗號分隔>]
31、導入數據文件
#db2move <db name> import
32、獲取db2資料庫管理配置環境信息
#db2 get dbm cfg
33、.獲取db2某個資料庫資料庫管理配置環境信息
#db2 get db cfg for <db name>
或者:連接至某個資料庫以後執行db2 get db cfg
34、更改db2日誌空間的大小
備註:以下命令為了防止db2資料庫過份使用硬碟空間而設,僅用於開發者自己機器上的db2,如果是伺服器,則參數需要修改。
#db2 UPDATE DB CFG FOR <db name> USING logretain OFF logprimary 3 logsecond 2 logfilsiz 25600;
如果頁大小是4KB,則以上命令創建3個100M的日誌文件,佔用300MB硬碟空間。25600*4KB=102400KB。
35、創建臨時表空間
#DB2 CREATE USER TEMPORARY TABLESPACE STMASPACE PAGESIZE 32 K MANAGED BY DATABASE USING (FILE 'D:\DB2_TAB\STMASPACE.F1' 10000)
EXTENTSIZE 256
36、獲取資料庫管理器的快照數據
#db2 –v get snapshot for dbm
37、顯示進行程號
#db2 list applications show detail
===================================================
一、載入數據:
1、 以默認分隔符載入,默認為「,」號
db2 "import from btpoper.txt of del insert into btpoper"
2、 以指定分隔符「|」載入
db2 "import from btpoper.txt of del modified by coldel| insert into btpoper"
二、卸載數據:
1、 卸載一個表中全部數據
db2 "export to btpoper.txt of del select * from btpoper"
db2 "export to btpoper.txt of del modified by coldel| select * from btpoper"
2、 帶條件卸載一個表中數據
db2 "export to btpoper.txt of del select * from btpoper where brhid='907020000'"
db2 "export to cmmcode.txt of del select * from cmmcode where codtp='01'"
db2 "export to cmmcode.txt of del modified by coldel| select * from cmmcode where codtp='01'"
三、查詢數據結構及數據:
db2 "select * from btpoper"
db2 "select * from btpoper where brhid='907020000' and oprid='0001'"
db2 "select oprid,oprnm,brhid,passwd from btpoper"
四、刪除表中數據:
db2 "delete from btpoper"
db2 "delete from btpoper where brhid='907020000' or brhid='907010000'"
五、修改表中數據:
db2 "update svmmst set prtlines=0 where brhid='907010000' and jobtp='02'"
db2 "update svmmst set prtlines=0 where jobtp='02' or jobtp='03'"
六、聯接資料庫
db2 connect to btpdbs
七、清除資料庫聯接
db2 connect reset 斷開資料庫連接
db2 terminate 斷開資料庫連接
db2 force applications all 斷開所有資料庫連接
八、備份資料庫
1、 db2 backup db btpdbs
2、 db2move btpdbs export
db2look -d btpdbs -e -x [-a] -o crttbl.sql
九、恢復資料庫
1、 db2 restore db btpdbs without rolling forward
2、 db2 -tvf crtdb.sql
crtdb.sql文件內容:create db btpdbs on /db2catalog
db2 -stvf crttbl.sql
db2move btpdbs import
十、DB2幫助命令:
db2 ?
db2 ? restroe
db2 ? sqlcode (例:db2 ? sql0803) 註:code必須為4位數,不夠4位,前面補0
十一、bind命令:將應用程序與資料庫作一捆綁,每次恢復資料庫後,建議都要做一次bind
(1) db2 bind br8200.bnd
(2) /btp/bin/bndall /btp/bnd
/btp/bin/bndall /btp/tran/bnd
十二、查看資料庫參數:
db2 get dbm cfg
db2 get db cfg for btpdbs
十三、修改資料庫參數:
db2 update db cfg for btpdbs using LOGBUFSZ 20
db2 update db cfg for btpdbs using LOGFILSIZ 5120
改完後,應執行以下命令使其生效:
db2 stop
db2 start
補充:
db2 set schema btp 修改當前模式為"btp"
db2 list tablespaces show detail 查看當前資料庫表空間分配狀況
db2 list tablespace containers for 2 show detail 查看tablespace id=2使用容器所在目錄
db2 list application
db2 list db directory 列出所有資料庫
db2 list active databases 列出所有活動的資料庫
db2 list tables for all 列出當前資料庫下所有的表
db2 list tables for schema btp 列出當前資料庫中schema為btp的表
db2 list tablespaces show detail 顯示資料庫空間使用情況
db2 list packages for all
db2 "import from tab76.ixf of ixf commitcount 5000 insert into achact"
db2 "create table achact_t like achact"
db2 "rename table achact_t to achact"
db2 "insert into achact_t select * from achact where txndt>=(select lstpgdt from
acmact where actno=achact.actno)"
db2 get snapshot for dynaimic sql on jining
刪除一個實例:
# cd /usr/lpp/db2_07_01/instance
# ./db2idrop InstName
列出所有DB2實例:
# cd /usr/lpp/db2_07_01/bin
# ./db2ilist
為資料庫建立編目
$ db2 catalog db btpdbs on /db2catalog
取消已編目的資料庫btpdbs
$ db2 uncatalog db btpdbs
查看版本
# db2level
顯示當前資料庫管理實例
$ db2 get instance
設置實例系統啟動時是否自動啟動。
$ db2iauto -on 自動啟動
$ db2iauto -off 不自動啟動
資料庫優化命令:
reorg、runstats
當資料庫經過一段時間使用,數據空間會變得越來越龐大。一些delete掉
的數據仍存放在資料庫中,佔用數據空間,影響系統性能。因此需要定期
運行reorg、runstats命令,清除已delete的數據,優化數據結構。
db2 reorg table 表名
db2 runstats on table 表名 with distribution and indexes all
因為要優化的表比較多,所以在/btp/bin目錄下提供了一個sh程序runsall,
可在當天業務結束後,運行runsall,對資料庫進行優化
在DB2的開發過程中,貫穿整個開發過程還有很重要的一部分工作就是資料庫的維護;對於維護一個龐大信息系統來說是非常必要的;留一份簡易的維護手冊,以備不時之需;以下收集到的部分維護命令,以饗我們的維護工程師和項目經理。
=================================================================
38、更改db2日誌空間的大小
備註:以下命令為了防止db2資料庫過份使用硬碟空間而設,僅用於開發者自己機器上的db2,如果是伺服器,則參數需要修改。
# db2 UPDATE DB CFG FOR <db name> USING logretain OFF logprimary 3 logsecond 2 logfilsiz 25600;
如果頁大小是4KB,則以上命令創建3個100M的日誌文件,佔用300MB硬碟空間。25600*4KB=102400KB。
39、創建臨時表空間
#DB2 CREATE USER TEMPORARY TABLESPACE STMASPACE PAGESIZE 32 K MANAGED BY DATABASE USING (FILE 'D:\DB2_TAB\STMASPACE.F1' 10000) EXTENTSIZE 256
40、創建表空間
rem 創建緩沖池空間 8K
#db2 connect to gather
#db2 CREATE BUFFERPOOL STMABMP IMMEDIATE SIZE 25000 PAGESIZE 8K
rem 創建表空間:STMA
rem 必須確認路徑正確
rem D:\DB2Container\Stma
#db2 drop tablespace stma
#db2 CREATE REGULAR TABLESPACE STMA PAGESIZE 8 K MANAGED BY SYSTEM USING ('D:\DB2Container\Stma' ) EXTENTSIZE 8 OVERHEAD 10.5 PREFETCHSIZE 8 TRANSFERRATE 0.14 BUFFERPOOL STMABMP DROPPED TABLE RECOVERY OFF
#db2 connect reset
41、將暫掛的數據恢復到前滾狀態
#db2 ROLLFORWARD DATABASE TESTDB TO END OF LOGS AND COMPLETE NORETRIEVE
42、備份表空間
#BACKUP DATABASE YNDC TABLESPACE ( USERSPACE1 ) TO "D:\temp" WITH 2 BUFFERS BUFFER 1024 PARALLELISM 1 WITHOUT PROMPTING
43、創建db2工具資料庫
#db2 create tools catalog systools create new database toolsdb
44、如何進行增量/差量備份
增量:上一次完整備份至本次備份之間增加的數據部分;
差量(delta):上次備份以來(可能是完整備份、增量備份或者差量備份)至本次備份之間增加的數據部分;
45、更新所有表的統計信息
#db2 -v connect to DB_NAME
#db2 -v "select tbname, nleaf, nlevels, stats_timefrom sysibm.sysindexes"
#db2 -v reorgchkupdate statistics on table all
#db2 -v "select tbname, nleaf, nlevels, stats_timefrom sysibm.sysindexes"
#db2 -v terminate
46、對一張表運行統計信息
#db2 -v runstatson table TAB_NAMEand indexes all
47、查看是否對資料庫執行了RUNSTATS
#db2 -v "select tbname, nleaf, nlevels,stats_timefrom sysibm.sysindexes"
48、更改緩沖池的大小
緩沖池中,當syscat.bufferpools的npages是-1時,由資料庫的配置參數bufferpage控制緩沖池的大小。
將npages的值更改為-1的命令:
#db2 -v connect to DB_NAME
#db2 -v select * from syscat.bufferpools
#db2 -v alter bufferpoolIBMDEFAULTBP size -1
#db2 -v connect reset
#db2 -v terminate
更改資料庫配置參數BufferPages的命令如下:
#db2 -v update db cfgfor dbnameusing BUFFPAGE bigger_value
#db2 -v terminate
49、看資料庫監視內容列表
#db2 -v get monitor switches
50、打開某個資料庫監視內容
#db2 -v update monitor switches using bufferpoolon
51、獲取資料庫快照
#db2 -v get snapshot for all databases > snap.out
#db2 -v get snapshot for dbm>> snap.out
#db2 -v get snapshot for all bufferpools>> snap.out
#db2 -v terminate
52、重置資料庫快照
#db2 -v reset monitor all
53、計算緩沖池命中率
理想情況下緩沖池命中率在95%以上,計算公式如下:
(1 -((buffer pool data physical reads + buffer pool index physical reads)
/(buffer pool data logical reads + pool index logical reads))) *100%
=========資料庫實例========================
54、創建db2實例
#db2icrt <實例名稱>
55、刪除db2實例
#db2idrop <實例名稱>
56、設置當前db2實例
#set db2intance=db2
57、顯示db2擁有的實例
#db2ilist
58、恢復離線增量備份資料庫的命令
#DB2 RESTORE DATABASE YNDC INCREMENTAL AUTOMATIC FROM D:\backup\autobak\db2 TAKEN AT 20060314232015
59、創建樣本資料庫
在unix平台,使用:
#sqllib/bin/db2sampl <path>
在windows,os/2平台,使用:db2sampl e,e是可選參數,指定將創建資料庫的驅動器
60、設置聯合資料庫為可用(默認聯合資料庫不可用)
#db2 update dbm cfg using federated yes
61、列出資料庫中所有的表
#db2 list tables
62、數據遷移方法1
export腳本示例
#db2 connect to testdb user test password test
#db2 "export to aa1.ixf of ixf select * from table1"
#db2 "export to aa2.ixf of ixf select * from table2"
#db2 connect reset
import腳本示例
#db2 connect to testdb user test password test
#db2 "load from aa1.ixf of ixf replace into table1 COPY NO without prompting "
#db2 "load from aa2.ixf of ixf replace into table2 COPY NO without prompting "
#db2 connect reset
『伍』 Db2 中的sql 怎樣實現正則表達式的功能
盡管上面的函數按照預期的方式工作,但還可以改進它以獲得更佳的性能。註:函數內部的執行完成得越快,DB2 處理整個 SQL 語句的速度也就越快。
SQL 旨在處理多組行,這意味著通常會針對一個模式匹配多個行。在大多數情況下,模式本身對於整個 SQL 語句都是不變的;即,它不會隨行的更改而更改。 清單 5 中的 C 代碼展示了對每一行都調用函數 pcre_compile() ,該函數將給定模式轉換成內部表示法。
DB2 通過使用所謂的「高速暫存(scratchpad)」提供了在 UDF 調用之間傳遞信息的機制。此外,您可以標識特定調用「類型」;即它是對該 UDF 的第一次調用、普通調用還是最後一次(最終)調用。使用高速暫存和調用類型,有可能只對模式編譯一次,然後將該已編譯模式的內部表示法重用於對該 UDF 的所有後續調用。在最後一次調用時,釋放在處理期間分配的資源。
如 清單 6所示,對 CREATE FUNCTION 語句進行修改,告訴 DB2 向外部 C 代碼提供高速暫存和調用類型:
清單 6. 將高速暫存和調用類型添加到 CREATE FUNCTION 語句
CREATE FUNCTION regex2(pattern VARCHAR(2048), string CLOB(10M))
RETURNS INTEGER
SPECIFIC regexPerf
EXTERNAL NAME 'regexUdf!regexpPerf'
LANGUAGE C
PARAMETER STYLE DB2SQL
DETERMINISTIC
NOT FENCED
RETURNS NULL ON NULL INPUT
NO SQL
NO EXTERNAL ACTION
SCRATCHPAD 50
FINAL CALL
ALLOW PARALLEL;
UDF 入口點看起來很不一樣,因為必須改寫函數內部的邏輯。參數方面唯一的更改是使用 SQLUDF_TRAIL_ARGS_ALL 代替了 SQLUDF_TRAIL_ARGS ,如 清單 7所示。
清單 7. regex2 的 C UDF 入口點
#include <pcre.h>
#include <sqludf.h>
// data structure mapped on the scratchpad for easier use and access
// to the objects
// the size of the scratchpad defined in the CREATE FUNCTION statement
// must be at least as large as sizeof(scratchPadMapping)
struct scratchPadMapping {
pcre *re;
pcre_extra *extra;
const char *error;
int errOffset;
};
void regexpPerf(
// input parameters
SQLUDF_VARCHAR *pattern, SQLUDF_CLOB *str,
// output
SQLUDF_INTEGER *match,
// null indicators
SQLUDF_NULLIND *pattern_ind, SQLUDF_NULLIND *str_ind,
SQLUDF_NULLIND *match_ind,
SQLUDF_TRAIL_ARGS_ALL) // SQLUDF_SCRAT & SQLUDF_CALLT
{
int rc = 0;
struct scratchPadMapping *scratch = NULL;
// map the buffer of the scratchpad and assume successful return
scratch = (struct scratchPadMapping *)SQLUDF_SCRAT->data;
*match_ind = 0;
switch (SQLUDF_CALLT) {
case SQLUDF_FIRST_CALL:
// initialize data on the scratchpad
scratch->re = NULL;
scratch->extra = NULL;
scratch->error = NULL;
scratch->errOffset = 0;
// compile the pattern (only in the FIRST call
scratch->re = pcre_compile(pattern, 0 /* default options */,
&scratch->error, &scratch->errOffset, NULL);
if (scratch->re == NULL) {
snprintf(SQLUDF_MSGTX, 70, "Regexp compilation failed at "
"offset %d: %s\\n", scratch->errOffset, scratch->error);
strcpy(SQLUDF_STATE, "38900");
rc = -1;
break;
}
// further analyze the pattern (might return NULL)
scratch->extra = pcre_study(scratch->re,
0 /* default options */, &scratch->error);
/* fall through to NORMAL call because DB2 expects a result
already in the FIRST call */
case SQLUDF_NORMAL_CALL:
// match the current string
rc = pcre_exec(scratch->re, scratch->extra, str->data,
str->length, 0, 0 /* default options */, NULL, 0);
switch (rc) {
case PCRE_ERROR_NOMATCH:
*match = 0;
rc = 0;
break;
case PCRE_ERROR_BADOPTION:
snprintf(SQLUDF_MSGTX, 70, "An unrecognized bit was set "
"in the options argument");
strcpy(SQLUDF_STATE, "38901");
rc = -1;
break;
case PCRE_ERROR_NOMEMORY:
snprintf(SQLUDF_MSGTX, 70, "Not enough memory available.");
strcpy(SQLUDF_STATE, "38902");
rc = -1;
break;
default:
if (rc < 0) {
snprintf(SQLUDF_MSGTX, 70, "A regexp match error "
"occured: %d", rc);
strcpy(SQLUDF_STATE, "38903");
rc = -1;
}
else {
*match = 1;
rc = 0;
}
break;
}
break;
}
// cleanup in FINAL call, or if we encountered an error in
// the FIRST call (DB2 will make a FINAL call if we encounter
// an error in any NORMAL call)
if (SQLUDF_CALLT == SQLUDF_FINAL_CALL ||
(SQLUDF_CALLT == SQLUDF_FIRST_CALL && rc < 0)) {
(*pcre_free)(scratch->re);
(*pcre_free)(scratch->extra);
}
return;
}
為了進一步改進該函數的性能,我添加了對函數 pcre_study() 的調用,該函數是由模式匹配引擎提供的。該函數進一步分析了該模式,並將額外的信息存儲在獨立的結構中。然後,在實際的匹配期間使用這些額外的信息來加快處理速度。通過使用一個非常簡單的模式和大約 4000 行的表,我獲得了 5% 的執行時間的改善。當然,模式越復雜,差異將越顯著。
我先前提到該實現假定模式在處理期間不會隨行的不同而更改。當然,如果模式確實更改了,您可以進行少量的改寫以再次編譯一個模式。要這樣做,有必要跟蹤當前(已編譯的)模式並在每次調用中將它與所提供的模式進行比較。也可以在高速暫存中維護當前模式。但必須將它復制到獨立的緩沖區,並且不能通過指針模式直接引用它,因為這個指針或它所引用的數據可能會更改或變為無效。至於相應的代碼更改,就當作練習留給讀者了。
返回匹配子串
大多數模式匹配引擎提供了一種方法,返回與指定模式或其一部分相匹配的子串。如果想在 SQL 中使用這種能力,則必須使用不同的方法來實現匹配函數。給定的字元串可能包含不止一個匹配的子串。例如,當解析類似「abc = 123;」或「def = 'some text';」這樣的字元串時,用戶可能會希望檢索由等號分隔的兩個子串。您可以使用模式「\\w+\\s*=\\s*(\\d+|'[\\w\\s] *');」來表示適用於該字元串的語法規則。Perl 兼容的正則表達式允許您捕獲等號兩邊的子串。最後,必須將要捕獲的子串用括弧括起來。我已經用該方式編寫了第二個子串,但第一個子串不是這樣編寫的。用於該用途的最終模式是這樣的:
(\\w+)\\s*=\\s*(\\d+|'[\\w\\s]*');
當把這個模式應用於字元串「abc= 123;」或「def = 'some text';」時,「abc」或「def」分別與「(\\w+)」匹配,空格和等號是通過「\\s*=\\s*」查找的,並用另外的「(\\d+|'[\ \w\\s*]')」涵蓋了餘下的子串。在「(\\d+|'[\\w\\s*]')」中,第一個選項與任何至少由一個數字「\\d+」組成的數匹配,而第二個選項解析任何由字母和空格組成的由單引號括起的字元串「'[\\w\\s]*'」。
在 DB2 中做到這一點的需求可以描述成:為一次 UDF 調用返回多個結果。換句話說,就是返回針對模式進行匹配的單個字元串的多個子串。DB2 的表函數是完成這一任務的完美工具。
實現表 UDF
和以前一樣,必須在資料庫中創建該函數。 清單 8中的下列語句正是用於這一任務的:
清單 8. 注冊名為 regex3 的表 UDF
CREATE FUNCTION regex3(pattern VARCHAR(2048), string CLOB(10M))
RETURNS TABLE ( position INTEGER, substring VARCHAR(2048) )
SPECIFIC regexSubstr
EXTERNAL NAME 'regexUdf!regexpSubstr'
LANGUAGE C
PARAMETER STYLE DB2SQL
DETERMINISTIC
NOT FENCED
RETURNS NULL ON NULL INPUT
NO SQL
NO EXTERNAL ACTION
SCRATCHPAD 50
NO FINAL CALL
DISALLOW PARALLEL;
實現該函數的實際邏輯的 C 代碼與 清單 7中的代碼非常相似,但根據表函數所必須滿足的特殊需求對它進行了改編,如 清單 9所示
你還是看一下這個網站
http://news.weixiuwang.com/server/2006-6/2006E6Y2;1057E89818855_1.htm
『陸』 DB2 怎麼查看 sql 語法
export
to
/opt/mydb/mydata.txt
of
del
modified
by
nochardel
coldel0x09
select
table1.a,table2.d
from
table1
table2
這是導出的語句,其中nochardel表示導出到文本文件時,每個欄位不用引號引起來,默認是引號引起來的,coldel表示欄位之間的分隔符,
其中0x09表示tab鍵,如果用空格分隔就是0x20,$為0x24其他的你可以自己查。
執行過程如下:
db2=>
connect
to
yourdb
export
......
『柒』 db2 sql怎麼寫
sql中有兩種方式表示不等於,一種是"<>"(不含引號),另一種是"!="(不含引號),用法是一樣的。
1、創建測試表,插入數據:
create table test
(id int,
name varchar(10));
insert into test values (1,'張三');
insert into test values (2,'李四');
2、執行第一種操作"<>"
select * from test where id<>1;
『捌』 如何在db2命令行運行sql必知必會例子
db2 => connect to dbName user xxx using password
db2 => sql語句
如果要執行一個sql腳本文件:
db2 => quit
c:\> db2 -tvf sql文件名
db2 -td@ -f filename
@是語句結束符。
E:\>db2 ? options
db2 [option ...] [db2-command | sql-statement |
[? [phrase | message | sqlstate | class-code]]]
option:-a、-c、-e{c|s}、-finfile、-lhistfile、-n、-o、-p、-rreport、-s、-t、
-td;、-v、-w、-x 和 -zoutputfile。
選項 描述 預設設置
------ ---------------------------------------- ---------------
-a 顯示 SQLCA OFF
-c 自動落實 ON
-e 顯示 SQLCODE/SQLSTATE OFF
-f 讀取輸入文件 OFF
-l 將命令記錄到歷史文件中 OFF
-n 除去換行字元 OFF
-o 顯示輸出 ON
-p 顯示 db2 互動式提示符 ON
-r 將輸出報告保存到文件 OFF
-s 在命令出錯時停止執行 OFF
-t 設置語句終止字元 OFF
-v 回送當前命令 OFF
-w 顯示 FETCH/SELECT 警告消息 ON
-x 不列印列標題 OFF
-z 將所有輸出保存到輸出文件 OFF
注意:
使用 DB2OPTIONS 環境變數定製選項預設值。
緊跟選項字母後的減號(-)使該選項關閉。
使用 UPDATE COMMAND OPTIONS 更改選項設置(以互動式或
文件輸入方式)。
只能提供nt環境下編寫腳本的例子給你以供參考:
腳本樣例:
db2 connect to yourdb user yourname using yourpassword
db2 insert into newuser(username,password,email) values('Amy','1234','[email protected]')
db2 insert into newuser(username,password,email) values('Judy','1234','[email protected]')
db2 commit
db2 disconnect yourdb
運行腳本: 運行db2cmd X:\XXX.bat
以下摘自本論壇的FAQ可參考:
"
在命令窗口中運行DB2腳本,可用 db2 -svtf 腳本文件名 來實現。
例如,腳本文件名為sample.sql,運行:db2 -svtf sample.sql
參數中:
s 代表遇到錯誤時中止運行腳本
v 代表輸出結果到屏幕
t 指以;號作為每行的分隔符
f 指後面需跟腳本文件名 "---此摘錄版權歸斑竹非本人所有
具體在AS400如何編寫腳本非常遺憾.
db2 -x select SERIALNO from tabname where clause
C:>db2 attach to db2164 user ccp
輸入 ccp 的當前密碼:
實例連接信息
實例伺服器 = DB2/NT 8.2.0
授權標識 = CCP
本地實例別名 = DB2164
C:>db2 connect to dw164 user ccp
輸入 ccp 的當前密碼:
資料庫連接信息
資料庫伺服器 = DB2/NT 8.2.0
SQL 授權標識 = CCP
本地資料庫別名 = DW164
C:>db2 select * from CCP_STS1 fetch first 2 rows only with ur
CUST_ID NOW_PRED_S LOAD_TIME
-------------------- -------------------- --------------------------
3094736. ZFS 2008-05-07-10.02.00.453000
3145886. ZFS 2008-05-07-10.02.00.453000
2 條記錄已選擇。
C:>db2 list command options
命令行處理器選項設置
後端進程等待時間(秒) (DB2BQTIME) = 1
連接至後端的重試次數 (DB2BQTRY) = 60
請求隊列等待時間(秒) (DB2RQTIME) = 5
輸入隊列等待時間(秒) (DB2IQTIME) = 5
命令選項 (DB2OPTIONS) = +m
選項 描述 當前設置
------ ---------------------------------------- ---------------
-a 顯示 SQLCA OFF
-c 自動落實 ON
-d 檢索並顯示 XML 聲明 OFF
-e 顯示 SQLCODE/SQLSTATE OFF
-f 讀取輸入文件 OFF
-i 顯示 XML 數據並帶有縮進 OFF
-l 將命令記錄到歷史記錄文件中 OFF
-m 顯示受影響的行數 OFF
-n 除去換行字元 OFF
-o 顯示輸出 ON
-p 顯示互動式輸入提示符 ON
-q 保留空格和換行符 OFF
-r 將輸出保存到報告文件 OFF
-s 在命令出錯時停止執行 OFF
-t 設置語句終止字元 OFF
-v 回傳當前命令 OFF
-w 顯示 FETCH/SELECT 警告消息 ON
-x 不列印列標題 OFF
-z 將所有輸出保存到輸出文件 OFF
C:>db2set DB2OPTIONS=-x
C:>db2 select * from CCP_STS1 fetch first 2 rows only with ur
4654908. ZFS 2008-05-07-10.02.00.453000
3716687. ZFS 2008-05-07-10.02.00.453000
『玖』 關於DB2的基本sql語句問題。
1。decimal 的 SQL-92 同義字是 dec 和 dec(p, s)。numeric 的功能相當於 decimal。
p (有效位數)
可儲存的最大十進位數總數,小數點左右兩側都包括在內。有效位數必須是 1 至最大有效位數 38 之間的值。預設有效位數是 18。
s (小數位數)
小數點右側所能儲存的最大十進位數。小數位數必須是從 0 到 p 的值。只有在指定了有效位數時,才能指定小數位數。預設小數位數是 0;因此,0 <= s <= p。最大儲存體大小會隨著有效位數而不同。