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 进行编码,并使用 Cornerstone 与我们组织的 Subversion (SVN) 存储库进行交互。

当我将逻辑从开发环境迁移到测试环境时,有没有办法简化(即自动化)我需要对每种类型的脚本进行的更改?

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;

另一种方法可能是在签入代码中使用占位符,并通过sed或类似方式运行代码以放入实际值。

于 2013-02-05T21:42:26.377 回答