0

レポートをサポートするために、テーブル、関数、ビュー、およびプロシージャ スクリプトを多数作成しました。環境が複雑なため、スクリプトの移行 (開発 -> テスト) は面倒な場合があります。

DBA は、開発者がプライマリ テーブルスペース ('VENDOR') もメイン スキーマ ('UTIL'、'REPORTING') も使用することを許可しません。UTIL スキーマは、関数とプロシージャを対象としています。REPORTING はテーブルとビュー用です。

開発サーバーは他の目的で再委託されることが多いため、開発テーブルスペース (「DEVL」) と各開発者のスキーマ (「CRAIG」など) を使用して、テスト サーバーで開発が行われます。

その結果、テーブルのスクリプトは次のものから変換する必要があります。

DROP TABLE CRAIG.X_TABLE;
CREATE TABLE CRAIG.X_TABLE;
...
TABLESPACE "DEVL";

に:

DROP TABLE REPORTING.X_TABLE;
CREATE TABLE REPORTING.X_TABLE;
...
TABLESPACE "VENDOR";

ビューのスクリプトを次から変更する必要があります。

CREATE OR REPLACE VIEW CRAIG.X_VIEW
...
;

に:

CREATE OR REPLACE VIEW REPORTING.X_VIEW
...
;

プロシージャのスクリプトを次から変更する必要があります。

CREATE OR REPLACE PROCEDURE CRAIG.X_PROCEDURE
...
INSERT INTO CRAIG.X_PROCEDURE
SELECT ...
-- reference a table in REPORTING schema
FROM   REPORTING.ANOTHER_TABLE
;

に:

CREATE OR REPLACE PROCEDURE UTIL.X_PROCEDURE
...
INSERT INTO REPORTING.X_PROCEDURE
SELECT ...
FROM   REPORTING.ANOTHER_TABLE
;

ご覧のとおり、テーブル スクリプトとプロシージャ スクリプトには、最も介入が必要です。

違いがあれば、コーディングには SQL Developer、TextMate、Sublime Text 2 を使用し、組織の Subversion (SVN) リポジトリとのやり取りには Cornerstone を使用します。

ロジックを開発環境からテスト環境に移行するときに、各タイプのスクリプトに必要な変更を簡素化 (自動化) する方法はありますか?

4

1 に答える 1

1

私はスキーマの所有者として接続します。あるユーザーとして接続し、別のスキーマでオブジェクトを構築していることを意味するかどうかわかりませんか? つまり、テーブル名などをまったく修飾しないでください。また、そのユーザーに適したデフォルトのテーブルスペースを用意してください。その場合、スクリプトはどちらも指定する必要はありません。多分私は何かを逃していますか?

本当に指定したい場合は、スクリプトの開始時に値を要求して受け入れ、置換変数を使用できます。

accept schma char prompt 'Enter schema: '
accept tbspc char prompt 'Enter tablespace: '

create table &&schma..my_table (...) tablespace &&tbspc;

シナリオの数が限られている場合は、異なる環境が異なるインスタンスにあると仮定して、データベース名に基づいて値を自動的に設定できます。

column q_schma new_value schma
column q_tbspc new_value tbspc

select case name when 'TEST_NAME' then 'CBUCH' else 'PROD_USER' end as q_schma,
    case name when 'TEST_NAME' then 'TBSP_DEV' else 'PROD_SCHEMA' end as q_tbspc
from v$database;

create table &&schma..my_table (...) tablespace &&tbspc;

プレフィックスを避けるために、デフォルトのスキーマを変更することもできます。

alter session set current_schema = &schma
create table my_table (...) tablespace &&tbspc;

もう 1 つのアプローチは、チェックインされたコードでプレースホルダーを使用し、コードを実行するsedか、同様の方法で実際の値を挿入することです。

于 2013-02-05T21:42:26.377 に答える