DB2

From no name for this wiki
Jump to: navigation, search

DB2 z/OS Stuff.

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

Links