2009-07-21 4 views
1

Wie würden Sie ein Installationssetup erstellen, das unter Berücksichtigung der neuesten Version der Datenbankaktualisierungen gegen mehrere Schemas ausgeführt wird? Idealerweise: Aktualisieren Sie eine einzelne Datei mit einer neuen Versionsnummer und senden Sie den DBAs dann ein Archiv, das alles enthält, was zur Durchführung der Datenbankaktualisierung benötigt wird. HierVersionskonfiguration von SQL

ist die Verzeichnisstruktur:

| install.sql 
| install.bat 
| 
\---DATABASE_1.3.4.0 
    | README.txt 
    | 
    \---SCHEMA_01 
    |  install.sql 
    |  SCM1_VIEW_NAME_01_VW.vw 
    |  SCM1_VIEW_NAME_02_VW.vw 
    |  SCM1_PACKAGE_01_PKG.pkb 
    |  SCM1_PACKAGE_01_PKG.pks 
    | 
    \---SCHEMA_02 
      install.sql 
      SCM2_VIEW_NAME_01_VW.vw 
      SCM2_VIEW_NAME_02_VW.vw 
      SCM2_PACKAGE_01_PKG.pkb 
      SCM2_PACKAGE_01_PKG.pks 

Der folgende Code (hygienisiert und zugeschnitten Kürze und Sicherheit) ist in install.sql:

ACCEPT tns 
ACCEPT schemaUsername 
ACCEPT schemaPassword 

CONNECT &&schemaUsername/&&[email protected]&&tns 

@@install.sql 
/

Der folgende Code ist in install.bat:

@echo off 
sqlplus /nolog @install.sql 
pause 

Es gibt mehrere Schemas, die nicht jedes Mal aktualisiert werden müssen. Für diejenigen, die keine Updates benötigen, werden keine Verzeichnisse erstellt.

Was würde ich tun möchte, ist zwei Dateien erstellen:

  • version.txt
  • schemas.txt

Diese beiden (handgefertigt) Dateien, die von verwendet werden würde installieren .sql um festzustellen, welche Version von Skripts ausgeführt werden soll.

Zum Beispiel:

version.txt

1.3.4.0 

schemas.txt

SCHEMA_01 
SCHEMA_02 

Was ich wirklich möchte wissen, ist, wie würden Sie diese Textdateien lesen von install.sql, um die entsprechenden in Stall Skripte? (Ohne PL/SQL; andere Oracle-spezifische Konventionen sind akzeptabel.)

Alle Ideen willkommen; Vielen Dank im Voraus.

+1

Ich mache dies als Kommentar, weil es nicht direkt Ihre Frage beantwortet, aber wenn Sie ein Deployment-Tool wie Ant in Verbindung mit einem Quellcodeverwaltungssystem verwenden, können Sie so etwas ganz einfach von der Quellcodeverwaltung – dpbradley

+0

steuern Ant ist ziemlich schwer für unsere Bedürfnisse im Moment. Ich dachte, es könnte einen One-Liner geben, der @@ install.sql in @@ DATABASE _ && version \ install.sql ändert. Wir machen auch viel manuelle Arbeit, bis der Prozess optimiert ist. Dies ist ein Schritt in Richtung einer vollautomatischen Lösung. –

Antwort

1

Hier ist eine Lösung.

install.bat

@echo off 
REM ************************************************************************* 
REM 
REM This script performs a database upgrade for the application suite. 
REM 
REM ************************************************************************* 

setLocal EnableDelayedExpansion 

REM ************************************************************************* 
REM 
REM Read the version from the file. 
REM 
REM ************************************************************************* 
set /p VERSION=<version.txt 

set DB=DB_%VERSION% 
set SCHEMAS=%DB%\schema-order.txt 

REM ************************************************************************* 
REM 
REM Each line in the schema-order.txt file contains the name of a schema. 
REM Blank lines are ignored. 
REM 
REM ************************************************************************* 
for /f "tokens=* delims= " %%a in (%SCHEMAS%) do (
    if not "%%a" == "" sqlplus /nolog @install.sql %VERSION% %%a 
) 

Primary install.sql

ACCEPT schemaUsername  CHAR DEFAULT &2   PROMPT 'Schema Owner [&2]: ' 
ACCEPT schemaPassword  CHAR PROMPT 'Password: ' HIDE 

PROMPT Verifying Database Connection 
CONNECT &&schemaUsername/&&[email protected]&&tns 

DEFINE INSTALL_PATH = DB_&1&&ds^&2&&ds 

@@&&INSTALL_PATH^install.sql 

Diese eine Batch-Datei verwendet, um die Dateien zu analysieren, übergibt die Parameter an den SQL-Skript auf dem Befehl -Linie.

Sekundäre Installation.sql

Jede Zeile in der Datei, die vom ersten Installationsskript ausgeführt wird, kann dann die Variable INSTALL_PATH verwenden, um auf eine Datei zu verweisen, die aktuelles SQL enthält. Dieses sekundäre Skript ist verantwortlich für die Ausführung der einzelnen SQL-Dateien, die tatsächlich eine Änderung in der Datenbank bewirken.

@@&&INSTALL_PATH^DIR&&ds^SCM1_VIEW_OBJECT_VW.vw 

könnte diese Lösung automatisch geändert werden, um alle Dateien in einer bestimmten Reihenfolge durch geschickte Nutzung der Sortierung und Benennung der Verzeichnisse läuft (dh die SQL-Dateien in einem Tabellenverzeichnis laufen, bevor die SQL-Dateien in einer Ansicht Verzeichnis aufgeführt).