DB2
DB2 z/OS Stuff.
Contents
BLOBS, CLOBS
So kreiert man die auxiliary Tables automatisch. Das Zauberwort ist STD.
SET CURRENT SQLID = 'MYSCHEMA'; set current rules='STD'; Create table MYSCHEMA.MYTABLE ( ID DECIMAL(10,0) NOT NULL Generated Always as identity (start with 1, increment by 1, cache 20), DATEI BLOB(1048576) With Default ) in MYSCHEMA.MYTABLESPACE ;
XML
Tabelle kreieren
Create Tablespace SXML in MYDB using Stogroup SYSDEFLT Bufferpool BP5 Locksize Any ; CREATE TABLE MYSCHEMA.XMLTEST ( ID INT primary key not null, MYXML xml ) IN MYDB.SXML;
Einfügen
INSERT INTO MYSCHEMA.XMLTEST (ID, MYXML) VALUES (1, XMLPARSE (DOCUMENT '<schedule>Claude</schedule>' STRIP WHITESPACE))
Holen
select * from MYSCHEMA.XMLTEST where xmlexists('$s[schedule/boss="Claude"]' PASSING MYXML AS "s") select * from MYSCHEMA.XMLTEST where xmlexists('$s[schedule="Claude"]' PASSING MYXML AS "s")
DDL
Feld vergrössern
alter table MYSCHEMA.MYTABLE alter column MYCOLUMN set DATA TYPE CHAR(8);
Foreign Key hinzufügen
alter table MYSCHEMA.MYTABLE1 add constraint FK_MYFOREIGNKEY foreign key (MYCOLUMNOFTABLE1) references MYSCHEMA.MYTABLE2 (MYCOLUMNOFTABLE2) on delete restrict;
Der Tablespace ist dann meistens in einem Check-Pending Status. Mit folgendem Input für das CHECK DATA Programm kann der Check-Pending Status entfernt werden (Input im JCL):
CHECK DATA TABLESPACE MYDB.MYTABLE1TABLESPACE SCOPE PENDING //
Feld hinzufügen
alter table MYSCHEMA.MYTABLE add column MYCOLUMN CHAR(6);
generate always, generate by default
ALTER TABLE MYTABLE ALTER COLUMN MYCOLUMN SET GENERATED ALWAYS RESTART WITH 1000
oder
ALTER TABLE MYTABLE ALTER COLUMN MYCOLUMN SET GENERATED BY DEFAULT RESTART WITH 1000
Columns dokumentieren
Comment on Column SCHEMA.T_CODE.INAKTIV_DATUM is 'Inaktivdatum';
Tablespaces für Tabellen mit langen Rows
Gibt es Tabellen mit vielen Columns oder grossen Columns, dann muss der Tabelspace entsprechend angelegt werden. Ein entsprechender Bufferpool muss vorhanden sein.
create tablespace MYTABLESPACE in MYDB using stogroup SYSDEFLT bufferpool BP32K;
Bufferpools
Jeder Tablespace kann nur genau einem Bufferpool zugeordnet werden. Bufferpools können PAGESIZE von 4K, 8K, 16K oder 32K haben. So kann ein neuer Bufferpool angelegt werden:
CREATE BUFFERPOOL BP32K SIZE 2000 PAGESIZE 32K
So kann der Bufferpool eines Tablespaces geändert werden:
ALTER TABLESPACE MYTABLESPACE BUFFERPOOL BP32,
Sequenzen
Sample Sequenz
Sequenz erstellen:
Create Sequence MYSCHEMA.MYSEQUENCE as decimal(19,0) Start With 100000000 Increment by 1 MinValue 100000000 MaxValue 999999999 No Cycle Cache 20 No Order;
Sequenznummer holen:
SELECT NEXTVAL MYSCHEMA.MYSEQUENCE AS NEXTVAL FROM SYSIBM.SYSDUMMY1
ID holen
Holt die letzte, von der DB vergebene id dieser Transaktion:
SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1
SQL
Count
Im DB2 ist die Kolonnenwahl mit count limitiert. Hier der Workaround:
SELECT T2.COLUMN1, FROM S983EM2.T_ZUWEISUNG AS T1, (Select OSTE_ID AS COLUMN1, count(OSTE_ID) AS COLUMN2 from S983EM2.T_ZUWEISUNG group by OSTE_ID) AS T2 WHERE T1.OSTE_ID = T2.COLUMN1;
Current Schema
Aktuelles Schema herausfinden:
select current schema from sysibm.sysdummy1
Java Client, JCC
So kommt man auf eine DB. 5021 ist der Port. Defaultport DB2 ist 5000.
try {
Class p = Class.forName("com.ibm.db2.jcc.DB2Driver");
Connection conn = DriverManager.getConnection( "jdbc:db2://someserver:5021/SOMEDB", "user", "pwd" );
Statement stmt = conn.createStatement();
...
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
Achtung, für DB2 Express gibt es Probleme mit Hibernate und dem JCC Treiber. Lösung, alte Treiber einsetzen.
Datasource mit JCC Client:
com.ibm.db2.jcc.DB2ConnectionPoolDataSource
DB2 Utility Commands
Kleine Uebersicht über DB2 Commands (z/OS)
- -DIS THREAD(*) : Zeigt alle Threads.
- -CANCEL THREAD(23709) : Cancelt Thrad 23709
- -DIS DATABASE(MYDB) SPACENAM(*) RESTRICT : Zeigt alle Tabellen im Check-Pending Status
- -TERM UTILITY (*): Terminiert Utilities. Falls die Indices in einem Status sind ...
- -STA DATABASE(MYDB) SPACENAM(MYTABLESPACE) ACCESS(FORCE): Setzt alle Stati zurück (z.B. Copy Pending).
- -DIS DATABASE(MYDB) SPACENAM(MYTABLESPACE): Zeigt den Status vom Tablespace MYTABLESPACE