oracle数据库的配置管理与自动发布实现

需求:通过对sql提交到svn库的规范来实现数据库的自动部署。


用于指明数据库变更的sql脚本--约定规则

① 数据库变更的脚本应尽量保证原子性;也就是一个脚本中应尽量仅包含一条不可拆分的DDL(CREATE,ALTER etc)命令(避免出错时处理比较复杂,需要回滚之前很多步骤);当然对于DML语言(UPDATE,INSERT etc)可多包含多条,因为它们都是以事务的方式运行。

② 必须保证每次对数据库的修改都保存为sql脚本;

sql脚本的命名规范,必须是以数字开头以指明此sql脚本在所有脚本中的执行顺序;如001_create_table.sql,002_insert_data.sql,003_insert_data.sql;

注意:sql脚本的命名要尽量能表达此脚本执行内容的含义,例如:

004_add_index_on_custId_column_of_table_cust_index.sql.

④ 可以在sql脚本中加入回滚部分,出错时自动执行回滚语句;

         如001_create_table.sql

            CREATE TABLE FOO (

FOO_ID INTEGER NOT NULL

,FOO_VALUE VARCHAR(30)

);

ALTER TABLE FOO ADD CONSTRAINT PK_FOO PRIMARY KEY (FOO_ID);

--//@UNDOUND

DROP TABLE FOO;

⑤ 在CI中,应将数据库脚本也作为源码看待,同样做版本控制;遵循test before checkin的规则;

⑥ 假如发现提交的脚本没有起作用或者出现bug,不要试图修改原脚本,而应该重新写新脚本fix。

⑦ 不要将事务处理放到变更脚本中;


脚本:

前提需要配置好本地的

tnsnames.ora示例如下:

ORCL =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.208.120)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

 

test.sh脚本如下:

ls -l *.sql|awk  -F ' ' '{print $9}'|while read line

do

#Oracle Connection

sqlplus -sapp_pas/[email protected]/PASDEVdb0<

@$line

EOF

done


参考:

sqlplus -s 用户名/密码@ip:端口/数据库实例< 遍历该文件夹下文件,并根据文件名中的时间进行排序
方法一:ls -l *.sql|awk  -F ' '  '{print $9}'
方法二:ls *.sql| awk -F_ '{x[$1]=$0;a[NR]=$1}END{l=asort(a,b);for(i=1;i<=l;i++){print x[b[i]]}}'



你可能感兴趣的:(持续集成,服务器运维,数据库自动部署)