db2部署與數據倉庫應用
- 概念特性
- 安裝
- 基礎命令
- 連接
- 監控
- 存儲過程
數據合並
Merge Into是增量備份
結果集分組
row_number() OVER (PARTITION BY COL1 ORDER BY COL2)
seletc row_number() over(partition by log_user_id order by id desc) as tmpid, o.* from ope_match_his_log o
表示根據COL1分組,在分組內部根據 COL2排序
tmpid | id | log_user_id |
---|---|---|
1 | 5616 | 111122222 |
2 | 5613 | 111122222 |
3 | 5611 | 111122222 |
1 | 5681 | 345678900 |
2 | 5654 | 345678900 |
syscat.routines
存儲所有的存儲過程和用戶自定義函數(UDF)信息
sysproc
call
調用存儲過程
分區特性
DISTRIBUTE BY HASH
原則上,盡量將大表分布在所有的分區上,提高並行處理能力;將小表放置在盡量少的分區上,一般是建議放在單一分區上;盡量減少分區間的通信
create or replace procedure
load from insert into PARTITIONED
專用寄存器(special register)
專用寄存器是 DBA 定義的一個存儲塊,供一個應用程序過程使用,寄存器中的值可以在 SQL 語句或 SQL PL 語句中訪問和引用
最常用的專用寄存器有:
- CURRENT DATE
- CURRENT TIME
- CURRENT TIMESTAMP
- CURRENT USER
- CURRENT PATH
多節點多分區數據庫配置的幾個要點
節點認證文件
[root@sjck-node00 ~]# cat /etc/hosts.equiv
sjck-node00 sjck
sjck-node01 sjck
實例用戶的實例目錄下添加.rhosts文件
[sjck@sjck-node00 sjck]# cat .rhosts
sjck-node00 sjck
sjck-node01 sjck
節點文件
[root@sjck-node00 sqllib]# cat db2nodes.cfg 0 sjck-node00 0 1 sjck-node00 1 2 sjck-node01 0 3 sjck-node01 1
啟動
[sjck@sjck-node00 root]$ db2start
01/20/2019 17:32:01 0 0 SQL1063N DB2START processing was successful.
01/20/2019 17:32:01 1 0 SQL1063N DB2START processing was successful.
01/20/2019 17:32:08 3 0 SQL1063N DB2START processing was successful.
01/20/2019 17:32:09 2 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.
連接數據庫
[sjck@sjck-node00 ~]$ db2 connect to sjck
Database Connection Information
Database server = DB2/LINUXX8664 9.7.4
SQL authorization ID = SJCK
Local database alias = SJCK
連接db2
su sjck
db2 connect to sjckdb user sjck using sjck
db2
退出db2
quit
顯示所有數據庫
db2 list db directory
顯示所有表名
db2 list tables
列出當前數據庫下所有的表
db2 list tables for all
db2 list tables for schema sjck
查看表結構
db2 describe table sjck.ccrd_card
查看當前數據庫表空間分配狀況
db2 list tablespaces show detail
查看數據庫配置參數
db2 get dbm cfg
查看當前連接到數據庫的應用
db2 list application
查詢分頁
db2 "select * from sjck.CORE_BHFMCMRM FETCH FIRST 501 ROWS ONLY"
存儲過程
增量表和歷史拉鏈表,生成新的拉鏈表
create or replace procedure tbbak.CREDITOR_ACCREDIT_LIMIT_to_his_proc(in dt_etl varchar(8))
begin
declare etldt date;
declare sql varchar(1000);
declare ct integer;
declare del_ct integer;
set etldt = to_date(dt_etl,‘YYYYMMDD‘);
select count(1) into del_ct from tbbak.XDZX_CREDITOR_ACCREDIT_LIMIT_his where bg_dt_test=etldt;
if del_ct > 0 then delete from tbbak.XDZX_CREDITOR_ACCREDIT_LIMIT_his where bg_dt_test>=etldt;
update tbbak.XDZX_CREDITOR_ACCREDIT_LIMIT_his set ed_dt_test = ‘9999-12-31‘
where ed_dt_test >= etldt - 1 days and ed_dt_test < ‘9999-12-31‘and etl_flag <> ‘D‘;
commit;
end if;
select count(1) into ct from tmp.XDZX_CREDITOR_ACCREDIT_LIMIT;
if ct > 0 then
merge into tbbak.XDZX_CREDITOR_ACCREDIT_LIMIT_his a
using tmp.XDZX_CREDITOR_ACCREDIT_LIMIT b on a.ID=b.ID and a.ed_dt_test=‘9999-12-31‘ when MATCHED then update set a.ed_dt_test=etldt -1 DAYS;
commit;
insert into tbbak.XDZX_CREDITOR_ACCREDIT_LIMIT_his select etldt, ‘9999-12-31‘, a.* from tmp.XDZX_CREDITOR_ACCREDIT_LIMIT a;
commit;
update tbbak.XDZX_CREDITOR_ACCREDIT_LIMIT_his set ed_dt_test = etldt where etl_flag = ‘D‘ and bg_dt_test = etldt;
commit;
end if ;
end
db2部署與數據倉庫應用