日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

基于DB2及PHP的應用系統跨平臺遷移詳細步驟(一)

瀏覽:35日期:2024-02-22 16:15:54

本文主要介紹如何完成基于 DB2 的 PHP 應用系統從 AIX 平臺到 Linux 平臺的移植過程。文中包含了底層的 DB2 數據庫移植、上層的 PHP 應用系統移植的詳細步驟以及移植過程中可能遇到的問題和解決方法。

任務概述

系統遷移的工作主要分為以下幾個方面:

1.DB2 數據庫系統的跨平臺遷移

2.Apache 服務器與 php 應用系統的安裝和配置

下面我們就分 2 個方面分別介紹遷移和配置的具體步驟。

DB2 數據庫系統的跨平臺遷移

數據庫環境

源環境:AIX+DB2 v8.1

目標環境:Linux+DB2 v8.1

其中源數據庫中包含了 2 個數據庫 Instance:SRCDB1 與 SRCDB2。在 SRCDB1/SRCDB2 數據庫中,均包含了上百張數據庫表,并有很多的索引、外鍵約束、觸發器、存儲過程以及一些含有自增字段的表(含有 GENERATED ALWAYS AS IDENTITY 定義字段的表)。更為困難的是,我們并沒有關于這些數據庫對象的準確創建腳本。

遷移方案的選擇

如果遷移的源系統與目的系統屬于同一類型操作系統,例如 Linux 之間的遷移,或者 AIX 系統之間的遷移,則情況相對簡單,DB2 本身已經提供相關的實用工具來實現這種同類型平臺之間的數據庫移植,如: BACKUP 和 RESTORE 命令。當然,根據不同的情況還需要對實用工具所提供的參數有比較清楚的了解,譬如源系統與目標系統使用不同的表空間,就會涉及到表空間重定向的問題。由于本文的重點在于跨平臺的移植,這種方案顯然無法滿足需求,在此不再熬述。

那么,如何處理跨平臺的數據庫遷移問題?是不是可以使用實用工具 db2move 呢? db2move 只能遷移表中的數據,而無法對索引、外鍵約束、觸發器和存儲過程等數據庫對象也實現遷移操作,而且對于包含自增字段數據的表來說,db2move 也有一定的限制。并且 db2move 只能把數據導入到已存在的數據庫的表中,無法顯示指定表空間的位置。由于在數據庫的系統遷移過程中,不僅需要遷移表中的數據,還有索引、外鍵約束、觸發器和存儲過程等數據庫對象,與本文所選方案相比,還是后者更具優勢。可以將 db2move 僅作為遷移表數據的一種備用方案。

而對于 export 和 import 來說,一次只能針對一張表進行導出導入操作,并且需要手動輸入 export 和 import 的命令以及需要導入導出的數據表名,在數據庫表的數量不多的情況下,這種方案也許還可以考慮,但也不并是最佳的方案。而在數據庫中表數量眾多的情況下,這種做法則是基本不現實的,而且 import 命令并不能保證自增字段的數據與原來的表數據保持一致。

本文根據 DB2 對數據庫對象的處理機制,采用將 db2look 與 DDL、DML 腳本相結合的方式,并針對原數據庫中的觸發器、存儲過程以及外鍵約束等分別處理,給出了一種跨平臺 DB2 數據庫系統移植的可行方案。

下面我們以 SRCDB1 為例介紹一下這種情況下的數據庫整體遷移過程。SRCDB1 數據庫中有 SRCDB1、ASN、DB2DBG 和 SQLDBA 這四個數據庫模式。假設 SRCDB1 數據庫的用戶名為 user_srcdb1,密碼:pw_srcdb1。

在源系統 (AIX) 上的相關操作

1.使用 db2look 命令抽取生成數據庫對象的 DDL 腳本

清單 1. db2look 命令及參數

# db2look -d SRCDB1 -e -o srcdb1.ddl -a -i user_srcdb1 -w pw_srcdb1

db2look :生成 DDL 以便重新創建在數據庫中定義的對象

語法: db2look -d DBname [-e] [-u Creator] [-z Schema]

[-t Tname1 Tname2...TnameN] [-tw Tname] [-h] [-o Fname] [-a]

[-m] [-c] [-r] [-l] [-x] [-xd] [-f] [-fd] [-td x]

[-noview] [-i userID] [-w password]

[-v Vname1 Vname2 ... VnameN] [-wrapper WrapperName]

[-server ServerName] [-nofed]

-d : 數據庫名稱,必選參數

-e : 抽取復制數據庫所需要的 DDL 文件,此選項將生成包含 DDL 語句的腳本

-o : 將輸出重定向到給定的文件名,如果未指定 -o 選項,則輸出默認轉到 stdout

-a : 為所有創建程序生成統計信息,如果指定了此選項,則將忽略 -u 選項

-i : 指定登錄到數據庫所在服務器時所使用的用戶標識

-w : 指定登錄到數據庫所在服務器時所使用的密碼

2.根據不同類型對象,分化數據庫對象 DDL 腳本

由于源數據庫中的各個表數據已經是經過觸發器、存儲過程等數據庫對象處理過的數據,為保證數據庫中數據的一致性和完整性,這些數據庫對象應該在導入數據后再創建,以防止在導入表數據時重復執行觸發器和存儲過程等數據庫對象生成錯誤數據。使用文本編輯器編輯由 db2look 生成的 srcdb1.ddl,將創建表及索引的 DDL 語句,創建外鍵約束的 DDL 語句以及創建觸發器和創建存儲過程的語句分為四組,分別保存為下面四個 DDL 腳本:

srcdb1_tables.ddl srcdb1_foriegnkeys.ddl

srcdb1_triggers.ddl srcdb1_procedures.ddl

srcdb1_tables.ddl :包含創建 SEQUENCE,UDF,TABLE,VIEW 等數據庫對象的 ddl 語句。

清單2. srcdb1_tables.ddl 語句

CREATE SEQUENCE 'SRCDB1'.'SAMPLE_SEQ_1' AS INTEGER

MINVALUE 1 MAXVALUE 9999999999

START WITH 1 INCREMENT BY 1;

CREATE FUNCTION ' SRCDB1'.' SAMPLE _FUNC_1' (

VARCHAR(254),

VARCHAR(254),

VARCHAR(254)

) RETURNS VARCHAR(254)

SPECIFIC SAMPLE _FUNC_1 ……;

CREATE TABLE ' SRCDB1'.' SAMPLE _TAB_1' (

'TAB_COL1' CHAR(20) NOT NULL ,

'TAB_COL2' VARCHAR(70) NOT NULL ) ;

CREATE TABLE ' SRCDB1'.' SAMPLE _TAB_2' (……);

……

CREATE TABLE ' SRCDB1'.' SAMPLE _TAB_N' (……);

CREATE VIEW SRCDB1.SAMPLE_VIEW_1 (VIEW_COL1,VIEW_COL2) AS SELECT distinct

COL1 , COL2 FROM SAMPLE_TAB WHERE ……;

CREATE VIEW SRCDB1.SAMPLE_VIEW_2 ……;

……

CREATE VIEW SRCDB1.SAMPLE_VIEW_N ……;

srcdb1_foriegnkeys.ddl :包含創建外鍵約束的 ddl 語句。

清單3. srcdb1_foriegnkeys.ddl 語句

ALTER TABLE ' SRCDB1'.'SAMPLE_FK_1'

ADD CONSTRAINT 'SQL030903143850120' FOREIGN KEY

('FK_COL1')

REFERENCES ' SRCDB1'.'SAMPLE_TABLE'

('COL1');

ALTER TABLE ' SRCDB1'.'SAMPLE_FK_2' ADD ……;

……

ALTER TABLE ' SRCDB1'.'SAMPLE_FK_N' ADD ……;

srcdb1_triggers.ddl :包含創建觸發器的 ddl 語句。

清單 4. srcdb1_triggers.ddl 語句

CREATE TRIGGER SRCDB1.SAMPLE_TRIG_1 AFTER UPDATE OF col1 ON SRCDB1.SAMPLE_TAB

REFERENCING NEW AS n FOR EACH ROW MODE DB2SQL WHEN ( n.col1 > 3)

BEGIN ATOMIC

update SAMPLE_TAB

set(col2) = 'anotherValue' where col1 = n.col1 ;--

END;

CREATE TRIGGER SRCDB1. SAMPLE_TRIG_2 ……;

……

CREATE TRIGGER SRCDB1. SAMPLE_TRIG_N ……;

srcdb1_procedures.ddl :包含創建 SQL 存儲過程以及 java 存儲過程的 ddl 語句。

清單 5. srcdb1_procedures.ddl語句

CREATE PROCEDURE ' SRCDB1'.' JAVA_PROCEDURE_1' (

OUT SQLSTATE CHARACTER(5),

OUT ROWS_SUBMITED INTEGER,

IN BATCH_ID INTEGER,

IN LEVEL VARCHAR(4000)

)

DYNAMIC RESULT SETS 0

SPECIFIC SUBMIT_BATCH

EXTERNAL NAME 'Submit_batch!submit_batch'

LANGUAGE JAVA

PARAMETER STYLE JAVA

NOT DETERMINISTIC

FENCED THREADSAFE

MODIFIES SQL DATA

NO DBINFO;

CREATE PROCEDURE ' SRCDB1'.'JAVA_PROCEDURE_2' ……;

……

CREATE PROCEDURE ' SRCDB1'.'JAVA_PROCEDURE_N' ……;

SET CURRENT SCHEMA = ' SRCDB1';

SET CURRENT PATH = 'SYSIBM','SYSFUN',' SRCDB1';

CREATE PROCEDURE SRCDB1.SQL_PROCEDURE_1 (

IN hostname varchar(4000),

IN username varchar(4000),

OUT SQLCODE_OUT int )

SPECIFIC SRCDB1.SQL_PROCEDURE_1

LANGUAGE SQL

-------------------------------------------------

-- SQL Stored Procedure

-------------------------------------------------

P1: BEGIN

……

END P1 ;

CREATE PROCEDURE SRCDB1.SQL_PROCEDURE_2 ……;

……

CREATE PROCEDURE SRCDB1.SQL_PROCEDURE_N ……;

需要注意的是,db2 v6 版本的 db2look 尚未實現抽取如 UDF,TRIGGER,UserSpace,NodeGroup,BufferPool 等數據庫對象的 ddl 語句。從 db2 v7 開始,db2look 可以抽取上述對象的 DDL,但是依然無法抽取創建存儲過程對象的 ddl 語句。從 db2 v8.2 開始,完善了對 db2look 功能的支持,實現了存儲過程 ddl 語句的抽取功能。由于本文所涉及的源數據庫系統的版本較低(DB2 v8.1),因此需要采取上述方案獲取所有數據庫對象的 DDL 信息:

1). 從某個 DB2 v8.2 系統對 SRCDB1(DB2 v8.1 版本)執行 CATALOG 操作:

db2 catalog db SRCDB1 as SRCDB1;

2). 從 DB2 v8.2 系統對 SRCDB1 進行 db2look 抽取過程:

db2look -d SRCDB1 -e -o srcdb1.ddl -a -i user_srcdb1 -w pw_srcdb1;

這樣就可以獲取完整的數據庫對象 DDL 信息。

3.生成數據導出export腳本

使用 shell 腳本生成并導出所有數據的 DML 腳本,并將其重定向到 srcdb1_export.sql 文件中。對于熟悉 DB2 的用戶來說,應該知道數據庫中創建的每個表、視圖、別名均對應 SYSCAT.TABLES 中一行記錄。因此可以通過相應的數據庫 select 語句就可以獲取所有需要的數據庫表信息。根據需要,下述 shell 腳本將從系統表 SYSCAT.TABLES 中根據 tabname 字段選出 SRCDB1 中所有 tabschema 表模式是 SRCDB1,ASN,SQLDBA,DB2DBG 的表名字,并根據它們的名字生成相應的 export 導出語句,到達批量導出的目的。rtrim 函數用于去除 tabname 字段數據的右邊的空格。

清單6. 生成export腳本

# db2 'select 'export to ' rtrim(tabname) '.ixf of ixf select * from '

rtrim(tabname) ';' from syscat.tables

where tabschema in('SRCDB1', 'ASN', 'SQLDBA', 'DB2DBG')' > srcdb1_export.sql ;

編輯生成的 srcdb1_export.sql,刪除頭部和尾部所顯示的統計信息,只保留必要的 export 語句。通過修改上述腳本中所包含的 tabschema 信息,可以指定需要導出的表的范圍,也即遷移過程中需要的所有表名。所生成的 export 導出語句具有如下的命令形式:

db2 export to tablename.ixf of ixf select * from tablename;

4.生成數據導入 load 腳本

使用 shell 腳本生成 load 腳本用于將數據導入目標系統:srcdb1_load.sql

清單7. 生成 load 腳本

# db2 'select 'load from ' rtrim(tabname) '.ixf of ixf insert into '

rtrim(tabname) ';' from syscat.tables

where tabschema in ('SRCDB1', 'ASN', 'SQLDBA', 'DB2DBG')' > srcdb1_load.sql;

編輯生成的 srcdb1_load.sql,刪除頭部和尾部的統計信息,只保留必要的 load 語句。與 export 導出語句類似,上述 shell 腳本從系統表中選出 SRCDB1 中所有表的名字,并根據它們的名字生成相應的 import 導入語句,到達批量導入的目的。所生成的 import 導入語句命令形式如下:

db2 load from tablename.ixf of ixf insert into tablename;

標簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
麻豆精品在线播放| 老色鬼久久亚洲一区二区| 免费在线欧美视频| 亚洲一区日韩| 免费观看久久久4p| 日韩一区欧美二区| 热久久国产精品| 中文字幕av一区二区三区人| 蜜臀va亚洲va欧美va天堂 | 欧美日韩18| 欧美一区二区三区免费看| 丝袜a∨在线一区二区三区不卡| 在线成人直播| 视频一区二区三区入口| 蜜桃久久久久久| 视频精品一区| 欧美亚洲tv| 免费一级欧美在线观看视频| 精品一区视频| 日韩高清中文字幕一区二区| 欧美综合另类| 爽好多水快深点欧美视频| 亚洲久久一区| 国产精品tv| av资源亚洲| 伊人久久成人| 最新国产精品视频| 国产日韩精品视频一区二区三区| 美女视频一区在线观看| 日本不良网站在线观看| 欧美搞黄网站| 综合在线一区| 久久不卡日韩美女| 久久久水蜜桃av免费网站| 夜夜嗨一区二区| 97久久超碰| 都市激情国产精品| 在线亚洲自拍| 欧美日韩一区二区三区不卡视频 | 日韩一区亚洲二区| 夜久久久久久| 国产精品亚洲综合在线观看| 国产成人精品三级高清久久91| 婷婷综合六月| 亚洲精品无播放器在线播放| 国产精品白丝一区二区三区| 欧美一区久久久| 快she精品国产999| 久久这里只有精品一区二区| 欧美一区三区| 国产三级一区| 久久激情网站| 日本a口亚洲| 中文字幕在线高清| 亚洲1区在线| 日韩在线视频精品| 日本不卡的三区四区五区| 天堂√8在线中文| 涩涩涩久久久成人精品| 亚洲综合电影| 日韩一区二区三区免费视频| 91av亚洲| 欧美视频久久| 中文亚洲欧美| 国产精品1区| 亚洲少妇自拍| 国产一区二区三区四区五区传媒| 黄色成人91| 美女视频黄久久| 视频精品一区二区| 久久精品主播| 久久一区视频| 日本强好片久久久久久aaa| 欧美午夜精品一区二区三区电影| 国产欧美大片| 久久夜色精品| 亚洲1234区| 国产精品qvod| 午夜电影一区| 国产精品外国| 久久天堂精品| 精品久久福利| 天堂俺去俺来也www久久婷婷| 久久国产免费| 日韩av免费大片| 国产精品成人3p一区二区三区| 伊人精品久久| 国产在线不卡| av高清不卡| 精品72久久久久中文字幕| 日韩精品免费观看视频| 亚洲综合另类| 91国语精品自产拍| 少妇精品导航| 欧美国产偷国产精品三区| 久久国产精品色av免费看| 蜜臀av亚洲一区中文字幕| 亚洲二区视频| 日韩在线高清| 欧美久久天堂| 日本一区二区高清不卡| 久久免费福利| 欧美1区2区3| 国产精品一区二区美女视频免费看 | 国产在线观看91一区二区三区 | 久久av导航| 日本成人一区二区| 一本综合精品| 视频在线观看91| 国产亚洲精品久久久久婷婷瑜伽| 国产在线|日韩| 激情黄产视频在线免费观看| 激情不卡一区二区三区视频在线| 国产福利亚洲| 久久av国产紧身裤| 免费在线日韩av| 免费一级欧美片在线观看网站| 久久国产三级精品| 国产剧情在线观看一区| 欧美一区自拍| 亚洲aa在线| 日韩精品视频网| 日韩av不卡一区二区| 91精品国产自产观看在线| 日韩手机在线| 97久久中文字幕| 欧美精品导航| 福利视频一区| 日韩高清不卡| 午夜日本精品| 免费精品视频在线| 亚洲日产国产精品| 欧美另类中文字幕 | 在线精品一区二区| 蜜臀久久久99精品久久久久久| 国产精品女主播一区二区三区| 丝袜美腿亚洲一区| 日韩久久99| 久久免费福利| 日韩不卡视频在线观看| 成人av二区| 亚洲一二三区视频| 国产精选久久| 日韩一区电影| 免费久久99精品国产自在现线| 亚洲精品乱码日韩| 国产精品白丝av嫩草影院| 日韩欧美另类一区二区| 激情综合自拍| 在线国产精品一区| 国产伦精品一区二区三区在线播放| 国产精品地址| 日韩高清不卡| 美女被久久久| 欧美色综合网| 97精品国产福利一区二区三区| 久久久久久免费视频| 欧美在线亚洲| 日韩精彩视频在线观看| 精品一区二区三区在线观看视频| 成人羞羞视频播放网站| 亚洲精选成人| 精品视频自拍| 亚洲精品网址| 欧美日韩亚洲一区在线观看| 高清一区二区| 亚洲视频播放| 国产精品久久久久毛片大屁完整版| 激情黄产视频在线免费观看| 先锋影音国产一区| 国产精品一区亚洲| 欧美日韩国产传媒| 国产精品综合色区在线观看| 日本精品不卡| 日韩福利视频网| av高清不卡| 日本91福利区| 久久高清免费| 日韩av电影一区| 久久国产影院| 国产精品一区二区三区av| 蜜桃视频欧美| 国产精品xxx在线观看| 国产在线日韩| 久久99国产精品视频| 国产精品人人爽人人做我的可爱| 国产福利一区二区三区在线播放| 午夜国产一区二区| 久久不卡国产精品一区二区| 99国产精品| 国产一区二区三区久久久久久久久| 免费国产自线拍一欧美视频| 国产成人免费av一区二区午夜| 亚洲香蕉视频| 伊人久久av| 国产精品.xx视频.xxtv| 蜜桃视频一区二区三区在线观看| 成人福利视频| 国产精品视频3p| 男人操女人的视频在线观看欧美|