Kategorien
Administration Datenbank SQL Windows

Oracle Schema per Script umkopieren

Oftmals kommte es bei Kundeninstallationen vor, dass neben der Echt- auch eine Testumgebung eingerichtet wird.
Das bedarf dann eines regelmäßigen Eingriffs, um die Testdaten wieder auf den aktuellen Stand der Echtumgebung zu bringen, damit auch mit aktuellen Daten und – vor allen Dingen – Einstellungen der Echtumgebung getestet werden kann.
Nachfolgend ein kleines Batchscript, das diese Aufgabe übernimmt und (ungetestet) ggf. auch per Aufgabenplanung regelmäßig ausgeführt werden könnte.

@echo off

:: Dieses Script exportiert das Schema ECHT, und importiert die Daten direkt in die Testumgebung TEST
:: Vorhandene Daten in der Testumgebung werden damit komplett geloescht!!
:: Das Dumpfile des Exports wird im definierten Oracle-Dumpdir abgelegt, im Standard unterhalb des 
:: Oracle-Installationsverzeichnisses im Pfad <INSTALLDIR>admin<SCHEMANAME>dpdump

:: ORACLE-DB
set instanz=bu.SERVERNAME.world
:: Name Quellschema
set quellschema=ECHT 
:: Name Zielschema
set zielschema=TEST
:: Verzeichnis in dem temporaer der Datenbankexport und SQL-Scripte abgelegt werden
set dumpdir=D:DB_Transfer
:: Verzeichnis mit SQLs-Scripten die ggf. zusaetzlich noch ausgefuehrt werden sollen/muessen
set scriptdir=D:DB_Transfersql

cd %dumpdir%
cls

echo ^ 1. DB Export des Schemas %quellschema%
echo.
EXPDP system/manager@%instanz% DUMPFILE='%quellschema%.DMP' SCHEMAS=%quellschema% LOGFILE='%quellschema%_export.log'
echo.
echo ^ Export erfolgt
echo.
pause

echo.
echo ^ 2. DB Import des Exports von %quellschema% zu User %zielschema%
echo ^ 2.1 Vorhandenen User %zielschema% loeschen
echo.
echo drop user %quellschema% cascade;>%dumpdir%sqlplus.sql
echo quit;>>%dumpdir%sqlplus.sql
start /wait cmd.exe /t:4F /k "cd %dumpdir% && cls && echo. && sqlplus system/manager@%instanz% @sqlplus.sql && echo. && echo Alles ok? Dann weiter mit beliebiger Taste... && PAUSE>nul && EXIT"
del %dumpdir%sqlplus.sql
echo.
pause
echo.

echo ^ 2.2 User %zielschema% neu anlegen
echo.
echo @%scriptdir%cr_user.sql %zielschema% erp;>%dumpdir%sqlplus.sql
echo quit;>>%dumpdir%sqlplus.sql
start /wait cmd.exe /t:4F /k "cd %dumpdir% && cls && echo. && sqlplus system/manager@%instanz% @sqlplus.sql && echo. && echo Alles ok? Dann weiter mit beliebiger Taste... && PAUSE>nul && EXIT"
del %dumpdir%sqlplus.sql
echo.
pause
echo.

echo ^ 2.3 Dump-Import %quellschema% zu %zielschema%
echo.
impdp system/manager@%INSTANZ% DUMPFILE='%quellschema%.DMP' REMAP_SCHEMA=%quellschema%:%zielschema%
echo.
echo ^ Import erfolgt
echo.
pause
echo.

:: Hier koennen eigene Scripte eingebunden werden, die ggf. nach dem Import laufen sollten
echo ^ 2.4 Userberechtigungen neu setzen
echo.
echo @%scriptdir%user_rights.sql %zielschema%;>%dumpdir%sqlplus.sql
echo quit;>>%dumpdir%sqlplus.sql
start /wait cmd.exe /t:4F /k "cd %dumpdir% && cls && echo. && sqlplus system/manager@%instanz% @sqlplus.sql && echo. && echo Alles ok? Dann weiter mit beliebiger Taste... && PAUSE>nul && EXIT"
del %dumpdir%sqlplus.sql
echo.
echo Transfer %quellschema% zu %zielschema% abgeschlossen.
echo.

pause

Infos zum Script:

  • Im Script werden temporäre SQL-Scripte erstellt und in einer weiteren DOS-Box ausgeführt und danach wieder gelöscht.
  • Es wird zur Anlage des neuen Schemas ein vorhandenes Script genutzt, mehr zu dessen Inhalt z.B. hier oder hier.
  • Hier gibt es mehr Infos zur Oracle SID und der TNSNAMES.ORA, welche für den Connectionstring wichtig sind.
  • Für einen automatischen Durchlauf, z.B. per Windows Aufgabenplanung (nicht getestet!), müssen sämtliche PAUSE-Einträge aus dem Script entfernt werden.
  • Der erzeugte Dump wird nicht gelöscht (!), das muss auf Wunsch manuell erfolgen oder das Script entsprechend erweitert werden.
    Unter SQLPLUS ermittelt man das DUMP-Verzeichnis mit folgendem Statement:
    SELECT directory_path FROM dba_directories WHERE directory_name = 'DATA_PUMP_DIR';

Damit sollte es dann funktionieren, viel Erfolg.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert