2009-07-21 39 views
1

您將如何創建針對多個模式運行的安裝設置,同時考慮數據庫更新的最新版本?理想情況下:使用新的版本號更新單個文件,然後向DBA發送包含執行數據庫更新所需的所有內容的檔案。來自SQL的版本配置

這裏是目錄結構:

| 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/&&[email protected]&&tns 

@@install.sql 
/

下面的代碼是在install.bat

@echo off 
sqlplus /nolog @install.sql 
pause 

有幾種模式,並不是每次都需要更新。那些不需要更新的人不會創建目錄。

我想什麼做的是創建兩個文件:

  • version.txt
  • schemas.txt

這兩個(手工製作)的文件會被使用安裝.sql來確定要運行的腳本的版本。

例如:

version.txt

1.3.4.0 

schemas.txt

SCHEMA_01 
SCHEMA_02 

我真的想知道的是你會如何閱讀這些文本文件從install.sql運行相應的in失速腳本? (沒有PL/SQL;其他特定於Oracle的約定是可以接受的。)

歡迎任何想法;提前謝謝了。

+1

我將它作爲評論,因爲它不直接回答你的問題,但是如果你使用像Ant這樣的部署工具與源代碼控制系統結合使用,你可以很容易地從源代碼控制標記 – dpbradley 2009-07-21 19:14:24

回答

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/&&[email protected]&&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文件)。