SQL的版本配置

时间:2009-07-21 19:06:19

标签: sql oracle configuration scripting versioning

考虑到最新版本的数据库更新,您如何创建针对多个模式运行的安装设置?理想情况下:使用新版本号更新单个文件,然后向DBA发送包含执行数据库更新所需的所有内容的存档。

这是目录结构:

|   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 个答案:

答案 0 :(得分:1)

这是一个解决方案。

<强> 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
)

主要install.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脚本。

辅助install.sql

然后,第一个安装脚本执行的文件中的每一行都可以使用INSTALL_PATH变量来引用包含要运行的实际SQL的文件。此辅助脚本负责运行实际确定数据库更改的单个SQL文件。

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

可以通过巧妙地使用目录的排序和命名(即,在视图目录中的SQL文件之前运行的表目录中列出的SQL文件)来修改此解决方案以按特定顺序自动运行所有文件。 p>