echo "Eingabe UpdateDBCFG.Bat <Datenbank>"
if %1 =='' goto ende
db2 connect to %1
db2 GRANT DBADM ON DATABASE TO GROUP DB2ADMNS
db2 GRANT SECADM ON DATABASE TO GROUP DB2ADMNS
db2 connect reset
db2 UPDATE DATABASE CONFIGURATION FOR %1 USING logarchmeth1 'LOGRETAIN'
db2 UPDATE DATABASE CONFIGURATION FOR %1 USING num_db_backups 5
db2 UPDATE DATABASE CONFIGURATION FOR %1 USING trackmod Yes
@ECHO off
IF NOT EXIST D:\TEST\datei.ixf goto :NICHTDA
@ECHO Alles paletti
DB2 IMPORT from D:\TEST\datei.ixf of ixf ....
goto :ENDE
:NICHTDA
@ECHO war wohl nix
:ENDE
Verarbeitung wenn ein Satz in einer Tabelle
gefunden wurde !
DB2 Connect to <Datenbank> user ... using ...
DB2 "SELECT NAME FROM SYSIBM.SYSTABLES WHERE NAME LIKE 'TEST%' FETCH
FIRST 1 ROWS ONLY"
IF %errorlevel% == 0 GOTO TABELLE_Gefunden
GOTO NIGEFU
:TABELLE_Gefunden
Rem Die Tabelle wurde gefunden und kann verarbeitet werden !
db2 "Import from ..... "
GOTO ENDE
:NIGEFU
REM Tabelle nicht gefunden dann Fehlermeldung ausgeben
REM oder ARLARM schlagen
GOTO ENDE
:ENDE
db2 connect reset
Binden
db2 force applications all
db2 connect to <datenbank>
db2 bind @db2ubind.lst blocking all grant public
db2 bind @db2cli.lst blocking all grant public
db2 connect reset
Event Monitor
set current schema db2admin ;
DROP TABLE CONNHEADER_EVM_STMT;
DROP TABLE CONTROL_EVM_STMT;
DROP TABLE XACT_EVM_STMT;
DROP TABLE STMT_EVM_STMT;
drop event monitor EVM_STMT
;
-- BEIM ERSTEN MAL AB HIER LAUFEN LASSEN
create event monitor EVM_STMT for
statements ,
TRANSACTIONS
write to TABLE
;
-- AKTIVATE
set event monitor EVM_STMT STATE 1 ;
-- Dein SQL Statement
Select * from sysibm.systables ;
Commit ;
-- DEACTIVATE
set event monitor EVM_STMT STATE 0 ;
Commit ;
-- Da stehen die Werte drinnen
select * from CONTROL_EVM_STMT;
select * from STMT_EVM_STMT;
Tabellen Ändern mit SYSPROC.ALTOBJ
CALL SYSPROC.ALTOBJ ( 'APPLY_CONTINUE_ON_ERROR',
'CREATE TABLE XXX.XXX (
TEST CHARACTER (1) ,
TEST99 CHARACTER (1)
, TEST2 BIGINT
, TEST3 CHARACTER (1)
, TEST5 BIGINT NOT NULL
, TEST4 BIGINT NOT NULL
) IN USERSPACE1
COMPRESS YES '
, -1, ? );
SQL Ohne LOGGING ausführen
Aufpassen keine LOGGS heißt kein recover
ALTER TABLE Creator.Name ACTIVATE NOT LOGGED INITIALLY;
Update ...
Insert ...
Commit ;
SELECT 'CONNECT TO ' CONCAT CURRENT SERVER CONCAT ' ;'
FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT 'PRUNE LOGFILE PRIOR TO '
CONCAT CHAR(FIRSTLOG,15)
CONCAT ' ;'
FROM ( SELECT FIRSTLOG, START_TIME
FROM SYSIBMADM.DB_HISTORY
WHERE
OPERATION = 'B'
AND
OPERATIONTYPE IN ('F', 'N')
ORDER BY START_TIME
FETCH FIRST 1 ROWS ONLY
) T1
UNION ALL
SELECT 'CONNECT RESET ; ' FROM SYSIBM.SYSDUMMY1
FOR FETCH ONLY WITH UR
Aufruf :
sqlgen sample PruneLogFiles
Create Database (So mache ich es als batch)
db2 create database %1 AUTOMATIC STORAGE YES ON d:\Databases\%1 DBPATH
ON d:\Databases\%1
db2 SET LOCK TIMEOUT=WAIT 900
db2 drop table xxx.xxx
Session 3 Prüfen Lockwaits + Lockholder :
db2 select * from FROM SYSIBMADM.MON_LOCKWAITS for fetch only
with ur
TABLESAMPLE :
Select name from sysibm.systables tb tablesample BERNOULLI
(10)
;
RUNSTATS ON TABLE SYSIBM.SYSTABOPTIONS ON ALL COLUMNS
WITH DISTRIBUTION ON ALL COLUMNS AND DETAILED INDEX ALL
ALLOW WRITE ACCESS
TABLESAMPLE BERNOULLI (10)
;
RUNSTATS ON TABLE SYSIBM.SYSTABOPTIONS ON ALL COLUMNS
WITH DISTRIBUTION ON ALL COLUMNS AND DETAILED INDEX ALL
ALLOW WRITE ACCESS
TABLESAMPLE SYSTEM (10)
;
ELECT ' CONNECT TO ' CONCAT CURRENT SERVER CONCAT ' ;'
FROM SYSIBM.SYSDUMMY1 ;
WITH LISTE(JAHR, MONAT, TAG) AS (
SELECT YEAR(DATUM) AS JAHR
, MONTH(DATUM) AS MONAT
, DAY(DATUM) AS TAG
FROM
(SELECT (CURRENT DATE - 3 DAYS) AS DATUM
FROM SYSIBM.SYSDUMMY1) AS TEMP
)
SELECT 'PRUNE HISTORY ' CONCAT TRIM(CHAR(JAHR)) CONCAT
SUBSTR(DIGITS(MONAT), 9, 2)
CONCAT SUBSTR(DIGITS(TAG),9, 2)
CONCAT ' WITH FORCE OPTION AND DELETE ;'
FROM LISTE
;
SELECT ' CONNECT RESET ; ' FROM SYSIBM.SYSDUMMY1 ;