Конфигурация версии из SQL - PullRequest
1 голос
/ 21 июля 2009

Как бы вы создали установку установки, которая работает с несколькими схемами, принимая во внимание последнюю версию обновлений базы данных? В идеале: обновите отдельный файл с новым номером версии, затем отправьте администраторам баз данных архив, содержащий все необходимое для обновления базы данных.

Вот структура каталогов:

|   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

Следующий код (очищенный и обрезанный для краткости и безопасности) находится в install.sql :

ACCEPT tns
ACCEPT schemaUsername
ACCEPT schemaPassword

CONNECT &&schemaUsername/&&schemaPassword@&&tns

@@install.sql
/

Следующий код находится в install.bat :

@echo off
sqlplus /nolog @install.sql
pause

Существует несколько схем, не все из которых требуют обновления каждый раз. Те, кому не нужны обновления, не будут создавать каталоги.

Я хотел бы создать два файла:

  • version.txt
  • schemas.txt

Эти два (созданных вручную) файла будут использоваться install.sql , чтобы определить, какую версию скриптов следует запускать.

Например:

version.txt

1.3.4.0

schemas.txt

SCHEMA_01
SCHEMA_02

Что я действительно хотел бы знать, так это как бы вы прочитали эти текстовые файлы из install.sql для запуска соответствующих скриптов установки? (Без PL / SQL; приемлемы другие соглашения, специфичные для Oracle.)

Все идеи приветствуются; заранее большое спасибо.

1 Ответ

1 голос
/ 22 июля 2009

Вот решение.

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
)

Первичная установка.sql

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

PROMPT Verifying Database Connection
CONNECT &&schemaUsername/&&schemaPassword@&&tns

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

@@&&INSTALL_PATH^install.sql

При этом используется пакетный файл для анализа файлов, а затем параметры передаются в сценарий SQL из командной строки.

Вторичная установка.sql

Каждая строка в файле, выполняемая первым сценарием установки, может затем использовать переменную INSTALL_PATH для ссылки на файл, содержащий фактический SQL для запуска. Этот вторичный скрипт отвечает за запуск отдельных файлов SQL, которые фактически требуют изменения в базе данных.

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

Это решение может быть изменено для автоматического запуска всех файлов в определенном порядке посредством умного использования сортировки и именования каталогов (т. Е. Файлы SQL, перечисленные в табличном каталоге, запускаются раньше, чем файлы SQL в каталоге представления). *

...