db-deploy

環(huán)境搭建

1.基本環(huán)境

Java肆良、Maven數(shù)據(jù)庫

2.初始化控制表

創(chuàng)建CHANGELOG表

create table CHANGELOG
(
  CHANGE_NUMBER NUMBER(22) not null,
  COMPLETE_DT   TIMESTAMP(6) not null,
  APPLIED_BY    VARCHAR2(100) not null,
  DESCRIPTION   VARCHAR2(500) not null
)
/

alter table CHANGELOG add constraint PK_CHANGELOG primary key (CHANGE_NUMBER) 
/

3.sql文件創(chuàng)建腳本(與src平級)

dbdeploy1.png

createNewDDLChangeFile.bat

mvn dbdeploy:change-script -Ddbchangefile.name=DDL

createNewDMLChangeFile.bat

mvn dbdeploy:change-script -Ddbchangefile.name=DML

生成的文件在sql目錄中


dbdeploy2.png

4.執(zhí)行腳本 update.bat (與src平級)

mvn dbdeploy:update -Ddb.url=jdbc:oracle:thin:@ip:port:dis -Ddb.usr=xxx -Ddb.pwd=xxx > dblog.log

5. pom文件

<?xml version="1.0" encoding="GBK"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
    <groupId>xxx</groupId>
    <artifactId>yyyy</artifactId>
    <version>x.y.z</version>
  </parent>
  <groupId>xxx.db</groupId>
  <artifactId>db</artifactId>

    <properties>
        <db.url>jdbc:oracle:thin:@127.0.0.1:TEST</db.url>
        <db.usr>${env.DBDEPLOY_USR}</db.usr>
        <db.pwd>${env.DBDEPLOY_PWD}</db.pwd>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>com.dbdeploy</groupId>
                <artifactId>maven-dbdeploy-plugin</artifactId>
                <version>3.0M3</version>
                <configuration>
                    <scriptdirectory>./src/main/sql</scriptdirectory>
                    <name>${dbchangefile.name}</name>
                    <encoding>GBK</encoding>
                    <lineEnding>lf</lineEnding>
                    <outputfile>./target/apply.sql</outputfile>
                    <undoOutputfile>./target/undo.sql</undoOutputfile>
                    <driver>oracle.jdbc.OracleDriver</driver>
                    <url>${db.url}</url>
                    <userid>${db.usr}</userid>
                    <password>${db.pwd}</password>
                    <dbms>ora</dbms>
                    <delimiter>/</delimiter>
                    <delimiterType>row</delimiterType>
                </configuration>
                <dependencies>
                    <!-- 根據(jù)需要進(jìn)行依賴修改 -->
                    <dependency>
                      <groupId>com.oracle</groupId>
                      <artifactId>ojdbc6</artifactId>
                      <version>11.2.0.1.0</version>
                    </dependency>
                    <dependency>
                      <groupId>com.oracle</groupId>
                      <artifactId>orai18n</artifactId>
                      <version>11.2.0.1.0</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>update-db</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>update</goal>
                        </goals>
                        <configuration>
                            <scriptdirectory>${basedir}/target/sql-all</scriptdirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.5</version>
                <executions>
                    <execution>
                        <id>copy-sql-to-source-dir</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${basedir}/target/sql-all</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>src/main/sql</directory>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>script</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.dbdeploy</groupId>
                        <artifactId>maven-dbdeploy-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create-script-file</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>db-scripts</goal>
                                </goals>
                                <configuration>
                                    <scriptdirectory>${basedir}/target/sql-all</scriptdirectory>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

腳本規(guī)范

1.創(chuàng)建腳本文件

執(zhí)行createNewDDLChangeFile.bat創(chuàng)建DDL(數(shù)據(jù)定義語言雁社,用來維護(hù)數(shù)據(jù)庫對象)腳本文件,
在src/main/sql目錄下會創(chuàng)建對應(yīng)的DDL的sql文件命锄,每個DDL語句一個腳本文件囱桨。

執(zhí)行createNewDMLChangeFile.bat創(chuàng)建DML(用于增刪改表中數(shù)據(jù)十办,DML是伴隨事務(wù)控制的)腳本文件秀撇,
在src/main/sql目錄下會創(chuàng)建對應(yīng)的DML的sql文件

2.編寫腳本

用正斜杠/分割DML語句超棺,形如:

insert into fw_permission (PERMISSION_ID, NAME, DESCRIPTION)
values ('function_financeManagement_liqsettle', '扣款明細(xì)導(dǎo)出', '')
/
insert into fw_permission_management (NODE_ID, PARENT_NODE_ID, PERMISSION_ID, NODE_NAME, DISPLAY_ORDER, NOTES)
values ('110062', '100004', 'function_financeManagement_liqsettle', '扣款明細(xì)導(dǎo)出', 350, '')
/

用正斜杠/分割DDL語句向族,形如:

create table CO_SEND
(
SEND_ID VARCHAR2(20) not null,
MOBILE VARCHAR2(24)
)
/
comment on column CO_SEND.SEND_ID
is '發(fā)送ID'
/
comment on column CO_SEND.MOBILE
is '手機(jī)號碼'
/

替換;為/的方法:查找正則表達(dá)式;\r\n,替換為\r\n/\r\n

3.UNDO語句

UNDO語句編寫方法如下:

CREATE TABLE FOO (
FOO_ID INTEGER NOT NULL
,FOO_VALUE VARCHAR(30)
)
/
ALTER TABLE FOO ADD CONSTRAINT PK_FOO PRIMARY KEY (FOO_ID)
/
--//@UNDO
DROP TABLE FOO
/

4.創(chuàng)建方法

創(chuàng)建方法腳本時棠绘,語句中的分號保留件相,在語句結(jié)尾的下一行增加/

create or replace function F_DICT(DICTIONARY_ID_IN in VARCHAR2,ITEM_ID_IN in VARCHAR2)
  return VARCHAR2 DETERMINISTIC is ITEM_NAME VARCHAR2(50);
i NUMBER;
BEGIN
  select
    COUNT(1) INTO i
  from CO_DICTIONARY_ITEM t
  where t.DICTIONARY_ID = DICTIONARY_ID_IN
    and t.ITEM_ID = ITEM_ID_IN;
  CASE
    WHEN i = 0
      THEN ITEM_NAME:=ITEM_ID_IN;
    ELSE
      SELECT t.ITEM_NAME INTO ITEM_NAME
      FROM CO_DICTIONARY_ITEM t
      WHERE t.DICTIONARY_ID = DICTIONARY_ID_IN
        AND t.ITEM_ID = ITEM_ID_IN;
    END CASE;
  return(ITEM_NAME);
END F_DICT;
/

執(zhí)行

修改update.bat中的相關(guān)參數(shù)為自己需要的數(shù)據(jù),執(zhí)行update.bat氧苍,執(zhí)行之后變會執(zhí)行src/sql下未執(zhí)行過的sql夜矗,同時改變changelog表,輸入執(zhí)行日志在指定文件中

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末让虐,一起剝皮案震驚了整個濱河市紊撕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赡突,老刑警劉巖对扶,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惭缰,居然都是意外死亡浪南,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門漱受,熙熙樓的掌柜王于貴愁眉苦臉地迎上來络凿,“玉大人,你說我怎么就攤上這事⌒跫牵” “怎么了摔踱?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長怨愤。 經(jīng)常有香客問我昌渤,道長,這世上最難降的妖魔是什么憔四? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任膀息,我火速辦了婚禮,結(jié)果婚禮上了赵,老公的妹妹穿的比我還像新娘潜支。我一直安慰自己,他們只是感情好柿汛,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布冗酿。 她就那樣靜靜地躺著,像睡著了一般络断。 火紅的嫁衣襯著肌膚如雪裁替。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天貌笨,我揣著相機(jī)與錄音弱判,去河邊找鬼。 笑死锥惋,一個胖子當(dāng)著我的面吹牛昌腰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膀跌,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼遭商,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捅伤?” 一聲冷哼從身側(cè)響起劫流,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丛忆,沒想到半個月后祠汇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蘸际,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年座哩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粮彤。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡根穷,死狀恐怖姜骡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情屿良,我是刑警寧澤圈澈,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站尘惧,受9級特大地震影響康栈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喷橙,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一啥么、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贰逾,春花似錦悬荣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至言缤,卻和暖如春嚼蚀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背管挟。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工轿曙, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哮独。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓拳芙,卻偏偏與公主長得像察藐,于是被迫代替她去往敵國和親皮璧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355