db2資料庫分區
『壹』 db2資料庫 怎麼按日或者按月 自動創建表分區
CREATE TABLE lineitem(l_orderkey DECIMAL(10,0) NOT NULL, l_cpartkey INTEGER, l_suppkey INTEGER, l_linenumber INTEGER, l_quantity DECIMAL(12,2), l_extendedprice DECIMAL(12,2), l_discount DECIMAL(12,2), l_tax DECIMAL(12,2), l_returnflag CHAR(1), l_linestatus CHAR(1), l_shipdate DATE, l_commitdate DATE, l_receiptdate DATE, l_shipinstruct CHAR(25), l_shipmode CHAR(10), l_comment VARCHAR(44)) PARTITION BY RANGE(l_shipdate) (STARTING MINVALUE, STARTING '1/1/2000' ENDING '31/12/2020' EVERY 1 YEAR(按月就是 MONTH), ENDING MAXVALUE);
『貳』 db2表分區刪除
1.常規方法
delete 查詢條件
1.1.刪除效率較慢
1.2.經常確認歸檔日誌是否占滿
1.3.大的事務長期沒有提交容易導致活動日誌壓力過大
2.detach效率較高
2.1.detach到臨時表
db2 "alter table T_PERFORM detach partition PART221 into table perform_PART221";
2.2.刪除臨時表
db2 drop tableperform_PART221;
『叄』 添加DB2 DPF分區節點出錯,緊急求助
普通的db2就都是單分區資料庫。 只有dpf或者purescale架構的集群db2有多個節點的說法。 db2 數據倉庫(DPF)情況下,是MPP架構,一個DB2的庫可以有很多個邏輯分區,每個邏輯分區可以放在不同的物理伺服器上,可以稱為1個節點。
『肆』 db2 查看錶分區語句與創建表分區
創建分區:ALTER TABLE tablename ADD PARTITION statis_month STARTING'201301'
INCLUSIVE ENDING '20090102' INCLUSIVE。
查詢分區select * from syscat.datapartitions t where tabschema =模式名 and tabname = 表名
『伍』 db2表分區
表分區可擴展表的存儲能力、對於大量數據表使用分區欄位可提高查詢效率。
create table IXP.ESBTLOG(
UUID VARCHAR(32),
UUID_POS VARCHAR(20),
MSG_ID VARCHAR(100),
ESB_CODE VARCHAR(20) ,
CLI_ID CHAR(3),
CLI_ID_BOCS CHAR(2),
SERV_ID CHAR(3),
SERV_TRAN_CODE VARCHAR(20),
SERV_TCODE VARCHAR(20),
ESB_RET_CODE VARCHAR(20),
ERR_MSG VARCHAR(200),
TRACE_NO VARCHAR(32),
TRAN_DATE CHAR(8),
TRAN_TIME CHAR(6),
TXN_STATUS CHAR(1),
JOURNAL_NO VARCHAR(32),
EXT_UUID VARCHAR(32),
TXN_TOKEN VARCHAR(32),
NODE_NAME VARCHAR(32),
TRAN_BEGIN_TIME TIMESTAMP,
TRAN_END_TIME TIMESTAMP,
SP1_BEGIN_TIME TIMESTAMP,
SP1_END_TIME TIMESTAMP,
USER_BOCS VARCHAR(20),
WKSTATION VARCHAR(20),
RET_TRAN_DATE VARCHAR(20),
RET_TRAN_TIME VARCHAR(20),
RET_AC_DATE VARCHAR(20),
RET_TRACE_NO VARCHAR(20),
AP_TRACE_NO VARCHAR(20),
BR_NO VARCHAR(20),
TM_SMP TIMESTAMP default current timestamp
)PARTITION BY RANGE(TM_SMP)
(
PARTITION PARTMAX starting '9999-12-31-00.00.00.000000' INCLUSIVE ending MAXVALUE EXCLUSIVE
)in USERSPACE1
注意:倒數三行是創建分區表的關鍵,此例中此TM_SMP為分區欄位,第一個分區名為PARTMAX,從'9999-12-31-00.00.00.000000'到無窮大都是它的分區范圍。我們還可以在EXCLUSIVE後面繼 續定義其它的分區,定義規則與定義PARTMAX分區相同,當然定義每個分區需以逗號分隔。最後一行in USERSPACE1表示分區表創建在USERSPACE1表空間中。我們還能添加,刪除表分區。
db2 "alter table ESBTLOG add partition part20181118 STARTING '2018-11-18-00.00.00.000000' INCLUSIVE ENDING '2018-11-19-00.00.00.000000' EXCLUSIVE"
其思路是:detach分區到一張臨時表(該操作會創建臨時表,臨時表已存在會報錯,detach是分離分區的意思),再將臨時表刪除。
db2 "alter table ixp.esbtlog detach partition PART20181118 into table tb_temp"
db2 "drop table tb_temp"
A. 查詢該表共有多少分區
db2 "select substr(TABNAME ,1,11) t_name,substr(DATAPARTITIONNAME ,1,12) part_name,DATAPARTITIONID ,substr(LOWVALUE,1,28) low_value,substr(HIGHVALUE,1,28) high_value from syscat.datapartitions where tabname='ESBTLOG' order by datapartitionid"
B. 顯示每個分區有多少數據(沒有數據的不會顯示)
db2 "select substr(tm_smp,1,10) as tran_day,count(*) from esbtlog where 1=1 group by substr(tm_smp,1,10)"
C. 查詢某個分區有多少數據量
db2 "select count(*) from ixp.esbtlog where substr(tm_smp,1,10)='2019-01-08'"
1. 請注意上方例子中的名稱和分區范圍。
2. 要想將一個已存在的表改成分區表,需要先將原表數據保存下來,刪除表。再新建分區表,設定好表的分區及其范圍,將原數據導入進去。
『陸』 我在安裝 DB2 老是報「創建分區實例的進程失敗」,請問怎麼處理 新手, 能解釋的詳細點嗎!!!
檢查一下你的DB2的實例名是什麼,LINUX系統按默認DB2的實例名是db2inst1,用命令
export DB2INSTANCE=db2inst1 設置一下實例,然後用db2start啟動資料庫。
『柒』 db2 表數據分區 是否可以修改
1.創建分區表,INCLUSIVE(包含),exclusive(不包含)
CREATE TABLE "MABAS"."BAS_MID_TRANS_LIST_CK_BAK" ( "REPORT_DATE" DATE, "MA_ACCT_NO" VARCHAR(100), "TRANS_DATE" DATE, "ORG_UNIT_ID" VARCHAR(15), "ORG_PROD_ID" VARCHAR(15), "CURR_CD" VARCHAR(15), "ACCT_NO" VARCHAR(15), "TRANS_NUM" VARCHAR(15), "TRANS_NO" VARCHAR(15), "TRANS_DIF" VARCHAR(15), "DEPOSIT_CHAR" VARCHAR(15), "DEPOSIT_BAL" DECIMAL(18,2), "TRANS_AMT" DECIMAL(18,2), "TRANS_TYPE" CHARACTER(1), "FLG" CHARACTER(1), "RATE" DECIMAL(18,6), "TRXMEM" DECIMAL(4,0)) IN "MA_DATA" INDEX IN "MA_INDEX" PARTITION BY RANGE ( "REPORT_DATE" NULLS LAST ) ( PARTITION PART0 STARTING '2010-12-10' INCLUSIVE ENDING '2010-12-20' INCLUSIVE ) ;
ALTER TABLE "MABAS"."BAS_MID_TRANS_LIST_CK_BAK" DATA CAPTURE NONE LOCKSIZE ROW APPEND OFF NOT VOLATILE;
COMMENT ON TABLE "MABAS"."BAS_MID_TRANS_LIST_CK_BAK" IS '活期交易明細表';
COMMENT ON "MABAS"."BAS_MID_TRANS_LIST_CK_BAK" ( "REPORT_DATE" IS '數據日期', "MA_ACCT_NO" IS '管會賬號', "TRANS_DATE" IS '營業日期', "ORG_UNIT_ID" IS '行所號', "ORG_PROD_ID" IS '業務品種 ', "CURR_CD" IS '幣別', "ACCT_NO" IS '帳號', "TRANS_NUM" IS '交易序號', "TRANS_NO" IS '交易代號', "TRANS_DIF" IS '交易區別', "DEPOSIT_CHAR" IS '存款性質 ', "DEPOSIT_BAL" IS '存款余額', "TRANS_AMT" IS '交易金額', "TRANS_TYPE" IS '交易別', "FLG" IS '連動標志', "RATE" IS '匯率' );
GRANT CONTROL ON TABLE "MABAS"."BAS_MID_TRANS_LIST_CK_BAK" TO USER "DB2INST2";
GRANT SELECT, INSERT, UPDATE, ALTER, DELETE, INDEX, REFERENCES ON TABLE "MABAS"."BAS_MID_TRANS_LIST_CK_BAK" TO USER "DB2INST2" WITH GRANT OPTION;
GRANT SELECT, INSERT, UPDATE, ALTER, DELETE, INDEX, REFERENCES ON TABLE "MABAS"."BAS_MID_TRANS_LIST_CK_BAK" TO USER "DB2INST2" WITH GRANT OPTION;
GRANT SELECT, INSERT, UPDATE, ALTER, DELETE, INDEX, REFERENCES ON TABLE "MABAS"."BAS_MID_TRANS_LIST_CK_BAK" TO USER "MAPUB" WITH GRANT OPTION;
2.增加分區,注意這里的INCLUSIVE,exclusive,這時只有2011-01-31的數據可以進行insert
alter table MABAS.BAS_MID_TRANS_LIST_CK_BAK add partition LIST_CK_bak0131 STARTING '2011-01-31' INCLUSIVE ENDING '2011-02-01' exclusive
3.insert 數據
insert into MABAS.BAS_MID_TRANS_LIST_CK_BAK select * from MABAS.BAS_MID_TRANS_LIST_CK where report_date=date('2011-01-31');
4.轉移分區到臨里表
alter table MABAS.BAS_MID_TRANS_LIST_CK_BAK detach partition LIST_CK_bak0131 into MABAS.BAS_MID_TRANS_LIST_CK_BAK1
5.刪除生成的分區遷移表,注意這時分區表的分區(LIST_CK_bak0131)己經不存在了,如果要insert必須新增該分區
drop table MABAS.BAS_MID_TRANS_LIST_CK_BAK1
以下為應用寫的shell腳本,並參照syscat.datapartitions 進行判斷,如果有則刪除分區,否則進行新建,以下為具體的腳本。
. /home/odSUSEr1/.profile#配置文件SYSNAME=GDBMAMADS_HOME=/home/odsuser1/gdbma/etl#DS ConfigDSConfigFile=$MADS_HOME/dsconfig_gdbma#MARPT ETL2資料庫#DB信息DBNAME=`awk 'FS="=" {if ($0~/^MABASDBName/) print $2}' $DSConfigFile`DBUSR=`awk 'FS="=" {if ($0~/^MABASDBUser/) print $2}' $DSConfigFile`DBPWD=`awk 'FS="=" {if ($0~/^MABASDBPassword/) print $2}' $DSConfigFile`DBSCHEMA=`awk 'FS="=" {if ($0~/^MABASDBSchema/) print $2}' $DSConfigFile`DBPWD=`$MADS_HOME/Encrypt/discrypt.sh $DBPWD`dbname=$DBNAMEuser=$DBUSRpasswd=$DBPWD#連接資料庫db2 connect to $DBNAME user $DBUSR using $DBPWD >/dev/nulldb2 set schema=$DBSCHEMA;#傳遞參數JOB_NAME=$1DELETE_DATE=$2#DELETE_DBSCHEMA=$1#DELETE_TAB=$2#DELETE_COL=$3#DELETE_TYPE=$4#DELETE_DATE=$5#DELETE_VALUE=$6
delete_tab="select SCH_NAME,TAB_NAME,IF_PARTITION,TAB_DATE,DEL_VALUE from mabas.s_job_info_m t where JOB_NAME = '"$JOB_NAME"' "DEL_DATA=`db2 -t "$delete_tab"`if [ $? -ne 0 ]thenecho "$SDATA"fiecho "$DEL_DATA" | sed -e '4,/^$/!d;/^$/d'|#循環讀取job,然後調度while read SCH_NAME TAB_NAME IF_PARTITION TAB_DATE DEL_VALUEdo#判斷刪除方式#分區欄位拼寫if [ "$IF_PARTITION" = 'Y' ] then #分區進行拼寫 partiton_name=`db2 -tx "select upper('p'||replace(varchar(date('"$DELETE_DATE"')),'-','')) from sysibm.sysmmy1 "` tmp_tab=`db2 -tx "select upper('tmp'||substr(replace(replace(varchar(current timestamp),'-',''),'.',''),5,10)) from sysibm.sysmmy1 "` #判斷分區是否存在 vi_result=`db2 -tx "select count(*) from syscat.datapartitions t where tabschema = upper('"$SCH_NAME"') and tabname = upper('"$TAB_NAME"') and datapartitionname=upper('"$partiton_name"') "` #對分區進行操作 if [ "$DEL_VALUE" = '-' ] then #判斷分區是否存在 if [ $vi_result -ne 0 ] then #進行分區數據到臨時表 alter_parition=`db2 -tx "alter table $SCH_NAME.$TAB_NAME detach partition $partiton_name into $SCH_NAME.$tmp_tab"` #刪除臨時表 drop_tmp=`db2 -tx "drop table $SCH_NAME.$tmp_tab"` #分區結束 partition_end=`db2 -tx "select varchar(date('"$DELETE_DATE"') +1 days) from sysibm.sysmmy1"` #增加分區 add_partition=`db2 -tx "alter table $SCH_NAME.$TAB_NAME add partition $partiton_name STARTING '"$DELETE_DATE"' INCLUSIVE ENDING '"$partition_end"' exclusive "` else #分區結束 partition_end=`db2 -tx "select varchar(date('"$DELETE_DATE"') +1 days) from sysibm.sysmmy1"` #增加分區 add_partition=`db2 -tx "alter table $SCH_NAME.$TAB_NAME add partition $partiton_name STARTING '"$DELETE_DATE"' INCLUSIVE ENDING '"$partition_end"' exclusive "` fi else if [ $vi_result -ne 0 ] then #進行分區數據到臨時表 drop_parition=`db2 -tx "alter table $SCH_NAME.$TAB_NAME detach partition $partiton_name into $SCH_NAME.$tmp_tab "` #備份臨時表中不屬於該條件的數據 delete_tab_date=`db2 -tx "delete from $SCH_NAME.$tmp_tab where "$DEL_VALUE" "` #分區結束 partition_end=`db2 -tx "select varchar(date('"$DELETE_DATE"') +1 days) from sysibm.sysmmy1"` #增加分區 add_partition=`db2 -tx "alter table $SCH_NAME.$TAB_NAME add partition $partiton_name STARTING '"$DELETE_DATE"' INCLUSIVE ENDING '"$partition_end"' exclusive "` #insert 不符合刪除條件的數據 insert_date=`db2 -tx "insert into $SCH_NAME.$TAB_NAME select * from $SCH_NAME.$tmp_tab "` else #分區結束 partition_end=`db2 -tx "select varchar(date('"$DELETE_DATE"') +1 days) from sysibm.sysmmy1"` #增加分區 add_partition=`db2 -tx "alter table $SCH_NAME.$TAB_NAME add partition $partiton_name STARTING '"$DELETE_DATE"' INCLUSIVE ENDING '"$partition_end"' exclusive "` fi fielse #直接刪除表 if [ "$DEL_VALUE" = "-" ] then delete_tab_data=`db2 -tx "delete from $SCH_NAME.$TAB_NAME where date("$TAB_DATE") = DATE('"$DELETE_DATE"') "` else delete_tab_data=`db2 -tx "delete from $SCH_NAME.$TAB_NAME where date("$TAB_DATE") = DATE('"$DELETE_DATE"') and $DEL_VALUE "` fifidone
『捌』 DB2 分區資料庫備份與恢復操作如何進行 (1)
恢復以及帶有 OVERFLOW 選項的前滾操作。對於 DB2 的分區資料庫,某些直接發出的 DB2 命令只作用於當前一個分區,備份和恢復(BACKUP/RESTORE)就屬於這一類命令。但是對於硬碟數據恢復分區資料庫,由於同一資料庫的數據分布在多個分區上。 則對它的備份和恢復操作就要考慮到各分區上數據的完整及同步問題,因此可以在 DB2 命令前加上 db2_all 命令,以便 DB2 命令在資料庫的各個分區上被執行,而無需分別對每個分區重復發出相同的命令。 另外在 DB2 中,啟用了前滾數據恢復模式的資料庫,使用的是歸檔日誌方式,而非預設的循環日誌方式。這樣,在進行恢復操作時,可在利用 RESTORE 命令恢復了資料庫或表空間的備份後,再通過前滾命令(ROLLFORWARD)命令前滾歸檔日誌中的事務,恢復資料庫備份時間點之後提交的事務,最大程度的保護資料庫的數據。 與備份和恢復命令不同的是,前滾命令僅能通過在分區資料庫的編目分區上運行,來實現資料庫各分區的前滾操作。 下面就以一個啟用了前滾恢復模式的分區資料庫 SAMPLE 為例介紹其備份、恢復以及前滾操作的具體步驟。這里假設該資料庫創建在一台伺服器上,具有四硬碟數據恢復個分區,其編目分區為0號分區。 一. 對分區資料庫的備份操作: 前面已經介紹了,備份操作僅作用於分區資料庫的當前分區,所以要使用「db2_all」的命令實現對所有分區進行備份(這里使用聯機備份方式),即: db2_all "db2 backup db sample online" 但是上述命令對各分區的備份是以串列方式進行的,為提高備份操作的性能,還有一種可使分區間以並行方式進行的方法。即在上述命令的 DB2 命令前加上以下選項來實現命令的並行: <<+分區號< :表示後續命令作用於該分區。 <<-分區號< :表示後續命令作用於除該分區之外的其它分區。 ||<<-分區號< 或 <<-分區號; :表示後續命令作用數據恢復於除該分區之外的其它分區,並且是以並行方式進行的。 但由於備份和恢復操作要求獨占編目分區,因此在對其它分區進行並行方式的備份操作之前,首先必須完成該分區的備份操作。其方法為: db2_all "<<+0< db2 backup db sample online" -- 對編目分區的備份 db2_all "||<<-0< db2 backup db sample online" -- 對其它分區硬碟數據恢復的並行備份 註:分區資料庫的備份結束後會為每個分區都產生一個備份映象文件。
『玖』 如何在AIX操作系統上安裝DB2 9的分區環境
磁碟和內存要求磁碟要求 磁碟要求取決於你安裝的選件的多少,安裝過程中有3個選件可以安裝,分別是 ESE、CLIENT 和 RTCL,一般情況下,如果你安裝所有的3個選件,2GB 空間是足夠了。在 AIX 上,DB2 基本產品預設是安裝在/opt/IBM/DB2/V9.1目錄下。內存要求 DB2 資料庫系統至少需要 256 MB RAM。對於一個只運行 DB2 和 DB2 GUI 工具的系統,至少需要 512 MB RAM。但是,建議提供 1 GB 的 RAM 以提高性能。這些需求並不包括在系統上運行的其他軟體所需要的內存。機器數目要求 你可以在一台機器上安裝 DB2 分區資料庫,也可以在多台機器上安裝一個分區資料庫,本文檔假設你在 ServerA、ServerB、ServerC 和 ServerD 四台機器上進行安裝。對操作系統的安裝要求表1. 對操作系統的環境要求AIX 版本操作系統AIX V5.2.01)64-bit AIX kernel is required; 2)TL08 and SP2; 3)Minimum C++ runtime level is xlC.rte 8.0.0.4 and xlC.AIX50.rte 8.0.0.4AIX V5.3.01)64-bit AIX kernel is required; 2)TL04 and SP2; 3)Minimum C++ runtime level is xlC.rte 8.0.0.4 and xlC.AIX50.rte 8.0.0.4使用bosboot 命令切換至 64 位內核 要切換至 64 位內核,需要 root 用戶許可權並應輸入下列命令:清單1 ln -sf /usr/lib/boot/unix_64 /unix
『拾』 如何獲取DB2 V9.5版本中的DPF許可證
如何獲取DB2 V9.5版本中的DPF許可證
環境情況---
產品:DB2 UDB
平台:跨平台
版本:V9.5
問題:
在版本 9.5 中,資料庫分區功能沒有單獨的許可證與之對應,它只能作為 DB2倉庫產品的一部分提供。
在 DB2 版本 9.1 中,資料庫分區功能部件隨 DB2 企業伺服器版(ESE)一起提供。如果需要使用分區功能,那麼就需要安裝分區功能的許可證,這個許可證文件一般名為db2_dpf.lic。
在 DB2 版本 9.5 中,資料庫分區功能部件僅作為 DB2 倉庫產品的一部分提供。使用資料庫分區功能部件的現有 DB2 ESE 用戶將升級到 IBM DB2 基本倉庫功能部件。要使用資料庫分區功能部件的新的 DB2 版本 9.5 客戶應升級到 DB2 倉庫產品。
解答:
要使用資料庫分區,可以使用 DB2 倉庫安裝程序。
如果您不需要其他倉儲工具,可以運行 DB2 ESE 安裝程序,然後應用倉庫許可證證書來激活資料庫分區,具體命令如下:
db2licm -a dwee.lic
轉載僅供參考,版權屬於原作者。祝你愉快,滿意請採納哦