考虑到最新版本的数据库更新,您如何创建针对多个模式运行的安装设置?理想情况下:使用新版本号更新单个文件,然后向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
有几种模式,并非所有模式每次都需要更新。那些不需要更新的人不会创建目录。
我想要做的是创建两个文件:
install.sql 将使用这两个(手工制作的)文件来确定要运行的脚本版本。
例如:
version.txt
1.3.4.0
schemas.txt
SCHEMA_01
SCHEMA_02
我真正想知道的是如何从 install.sql 中读取这些文本文件以运行相应的安装脚本? (没有PL / SQL;其他特定于Oracle的约定是可以接受的。)
欢迎所有想法;非常感谢提前。
答案 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>