點擊上方“IT那活兒”公眾號,關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了!??!
TimesTen既可以作為獨立的關(guān)系型內(nèi)存數(shù)據(jù)庫,也可以作為Oracle數(shù)據(jù)庫的內(nèi)存緩存。無論是哪一種使用場景,大多數(shù)情況下都需要考慮如何將Oracle數(shù)據(jù)庫中的數(shù)據(jù)遷移到TimesTen,TimesTen提供一系列數(shù)據(jù)遷移工具,包括ttIsql命令、實用程序和內(nèi)置過程等,通過這些工具可以快速實現(xiàn)Oracle數(shù)據(jù)庫到TimesTen的數(shù)據(jù)遷移。
本文主要分享通過手工Oracle端導(dǎo)出TimesTen端導(dǎo)入和執(zhí)行ttIsql內(nèi)置過程ttLoadFromOracle實現(xiàn)Oracle數(shù)據(jù)庫到TimesTen的數(shù)據(jù)遷移,對比兩種方法的實現(xiàn)步驟及遷移效率,在實際維護(hù)工作中根據(jù)操作場景靈活選擇適合的方法。
以下操作在測試環(huán)境中將Oracle數(shù)據(jù)庫中shsnc.data_ora2tt表數(shù)據(jù)遷移到TimesTen數(shù)據(jù)庫中,Oracle數(shù)據(jù)庫中shsnc.data_ora2tt表結(jié)構(gòu)如下:
-- Create table
create table SHSNC.DATA_ORA2TT
(
col_date DATE,
col_char CHAR(1),
col_varchar VARCHAR2(10),
col_int INTEGER,
col_number NUMBER(4,2)
)
該操作使用Oracle的spool實現(xiàn),導(dǎo)出成文本文件shsnc.data_ora2tt.txt;
set line 1000
set pagesize 0
set feedback off
set heading off
set trimspool on
set trims on
set echo off;
set colsep |
set termout off
alter session set nls_date_format=yyyy-mm-dd hh24:mi:ss; -- 否則TimesTen導(dǎo)入報錯【Invalid date value -- date values must be in YYYY-MM-DD format.】
spool shsnc.data_ora2tt.txt
SELECT col_date,col_char,col_varchar,col_int,col_number FROM shsnc.data_ora2tt;
spool off
同Oracle數(shù)據(jù)庫建表語句:
-- Create table
create table SHSNC.DATA_ORA2TT
(
col_date DATE,
col_char CHAR(1),
col_varchar VARCHAR2(10),
col_int INTEGER,
col_number NUMBER(4,2)
)
- 刪除文本文件中SQL命令;
- 字符串字段前后增加雙引號;
- 時間列格式調(diào)整為yyyy-mm-dd hh24:mi:ss;
- 首行需要是指定格式內(nèi)容(可以從TimesTen內(nèi)存庫ttbulkcp導(dǎo)出個表查看內(nèi)容)。
-- 刪除文本文件中SQL命令行
sed -i /^SQL> /d shsnc.data_ora2tt.txt
-- 首行增加TimesTen導(dǎo)入文本格式說明內(nèi)容,指定列前后增加雙引號
awk -F"|" BEGIN{print
"##ttBulkCp:FSEP=|:CHARACTERSET=ZHS16GBK:DATEMODE=TIMESTAMP"
}{for(i=1;i<=NF;i++){if (i==2 || i==3) printf
"""$i""|";else if (i print $i }} shsnc.data_ora2tt.txt > shsnc.data_ora2tt.unl
執(zhí)行TimesTen導(dǎo)入工具ttbulkcp,成功將文本文件shsnc.data_ora2tt.unl導(dǎo)入TimesTen內(nèi)存庫:
ttbulkcp -i acct shsnc.data_ora2tt shsnc.data_ora2tt.unl
- 不需對TimesTen內(nèi)存庫做任務(wù)配置變更;
在TimesTen連接屬性中,OracleNetServiceName指定了后端Oracle數(shù)據(jù)庫的服務(wù)名,而實際的服務(wù)定義在文件tnsnames.ora中,格式與Oracle數(shù)據(jù)庫服務(wù)定義完全兼容。tnsnames.ora文件的位置由環(huán)境變量$TNS_ADMIN指定,此環(huán)境變量可以在安裝TimesTen實例時指定,也可以后續(xù)通過ttModInstall實用程序定義和修改。
在目錄$TT_HOME/network/admin/samples下有示例的tnsnames.ora文件。一般Oracle數(shù)據(jù)庫和TimesTen實例位于不同主機(jī)上。TimesTen主機(jī)上tnsnames.ora路徑及定義示例如下:
vi $TT_HOME/network/admin/tnsnames.ora
shsnc =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = xxx)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = shsnc)))
此時,TimesTen內(nèi)存庫還未配置環(huán)境變量$TNS_ADMIN,因此TimesTen主機(jī)上連Oracle報錯。
執(zhí)行$TT_HOME/bin/ttmodinstall進(jìn)行配置(需要重啟TimesTen實例)。
> $TT_HOME/bin/ttmodinstall
The daemon for instance Billmdb_cbe is currently configured to use port 53396.
Would you like to change this port? [ no ] no
The server for instance Billmdb_cbe is currently configured to use port 53397.
Would you like to change this port? [ no ] no
TNS_ADMIN for the instance Billmdb_cbe is currently not set.
Would you like to change TNS_ADMIN for this instance? [ yes ] yes
Please enter a value for TNS_ADMIN (q=quit)? [ ] /ttadm/TimesTen/Billmdb_cbe/network/admin
Do you want to restart the daemon using the new configuration? [ yes ] yes
Restarting the daemon ...
TimesTen Daemon stopped.
TimesTen Daemon startup OK.
Instance Billmdb_cbe is now configured with TNS_ADMIN=/ttadm/TimesTen/Billmdb_cbe/network/admin
Would you like to configure TimesTen Replication with Oracle Clusterware? [ no ] no
Done ...
## 實例重啟后加載內(nèi)存庫
ttadmin -ramload acct
由于在TimesTen安裝中包含了Oracle client($TT_HOME/ttoracle_home/instantclient_11_2),因此可以用標(biāo)準(zhǔn)的sqlplus程序測試與Oracle數(shù)據(jù)庫的連通性。
經(jīng)測試,此時,TimesTen內(nèi)存庫主機(jī)上連接Oracle正常:
$TT_HOME/ttoracle_home/instantclient_11_2/sqlplus xxx/xxx@shsnc
利用TimesTen中特有的透傳(PassThrough)模式,也可以測試與Oracle數(shù)據(jù)庫的連通性。使用這種方式需要在TimesTen中和Oracle數(shù)據(jù)庫中存在相同的用戶,并且兩個數(shù)據(jù)庫字符集相同。
通過TimesTen客戶端ttisql連接正常:
$TT_HOME/bin/ttisql
"DSN=acct;uid=shsnc;pwd=shsnc;OraclePwd=shsnc;OracleNetServiceName=shsnc"
該操作要求在TimesTen中的表存在,如果不存在,可以借助于TimesTen內(nèi)置過程ttTableSchemaFromOraQueryGet獲得建表DDL,執(zhí)行后完成在TimesTen建表;
$TT_HOME/bin/ttisql "DSN=acct;uid=shsnc;pwd=shsnc;OraclePwd=shsnc;OracleNetServiceName=shsnc"
Command> call ttTableSchemaFromOraQueryGet(shsnc,data_ora2tt,select * from shsnc.data_ora2tt);
< CREATE TABLE "SHSNC"."DATA_ORA2TT" (
"COL_DATE" date,
"COL_CHAR" char(1 byte),
"COL_VARCHAR" varchar2(10 byte),
"COL_INT" number(38,0),
"COL_NUMBER" number(4,2)
) >
1 row found.
Command> CREATE TABLE "SHSNC"."DATA_ORA2TT" (
> "COL_DATE" date,
> "COL_CHAR" char(1 byte),
> "COL_VARCHAR" varchar2(10 byte),
> "COL_INT" number(38,0),
> "COL_NUMBER" number(4,2)
> );
Command>
ttLoadFromOracle命令的格式為:
ttLoadFromOracle([tblOwner], tblName, Query [,numThreads])
tblOwner,TT_CHAR (30),表用戶名(可選,默認(rèn)當(dāng)前連接用戶);
tblName,TT_CHAR (30) NOT NULL,表名;
Query,TT_VARCHAR (409600) NOT NULL,Oracle數(shù)據(jù)庫中執(zhí)行的SQL查詢語句;
numThreads,TT_INTEGER,并發(fā)線程數(shù)(默認(rèn)4個線程);
執(zhí)行如下,成功將Oracle數(shù)據(jù)庫shsnc.data_ora2tt表直接導(dǎo)入TimesTen內(nèi)存庫:
$TT_HOME/bin/ttisql "DSN=acct;uid=shsnc;pwd=shsnc;OraclePwd=shsnc;OracleNetServiceName=shsnc"
Command> call ttLoadFromOracle(shsnc, data_ora2tt, select * from shsnc.data_ora2tt);
< 3 >
1 row found.
Command> select count(*) from shsnc.data_ora2tt;
< 3 >
1 row found.
Command>
通過以上對兩種遷移方法的對比,可以看到:
方法一:手工Oracle端導(dǎo)出TimesTen端導(dǎo)入最大優(yōu)勢是不需調(diào)整現(xiàn)網(wǎng)TimesTen配置、最大劣勢是需要手工對文本文件進(jìn)行格式化效率越低;
方法二:ttLoadFromOracle最大優(yōu)勢是效率高、最大劣勢是對現(xiàn)網(wǎng)TimesTen配置有要求;實際維護(hù)可以結(jié)合這兩種方式各自優(yōu)勢,即在TimesTen測試環(huán)境使用方法二ttLoadFromOracle獲取建表DDL、并且將數(shù)據(jù)先遷移到TimesTen測試環(huán)境;然后再將數(shù)據(jù)從TimesTen測試環(huán)境同構(gòu)遷移到生產(chǎn)環(huán)境,這樣既能避免對生產(chǎn)環(huán)境做過多的配置變更,又能保證遷移效率。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/129153.html
摘要:大勢所趨,云原生數(shù)據(jù)庫的崛起不過,在全球數(shù)據(jù)庫領(lǐng)域,目前恐怕還不止這兩股力量。在年數(shù)據(jù)庫系統(tǒng)的魔力象限中,阿里云數(shù)據(jù)庫被列入遠(yuǎn)見者象限,這是國產(chǎn)數(shù)據(jù)庫首次進(jìn)入魔力象限。從傳統(tǒng)數(shù)據(jù)庫到云原生數(shù)據(jù)庫,這50年來,數(shù)據(jù)庫行業(yè)到底都發(fā)生了怎樣的變化?以O(shè)racle為代表的傳統(tǒng)數(shù)據(jù)庫廠商,不斷邁向云化的過程,從中嘗到了甜頭。不僅可以讓用戶Oracle數(shù)據(jù)庫遷移到Oracle云上,順帶也把用戶業(yè)務(wù)帶上O...
摘要:和聯(lián)合總裁及董事會成員將在下周宣布更多的戰(zhàn)略。曾在去年月的大會上宣布了公共云計劃,其中包含了和的相關(guān)功能,以及云服務(wù)和數(shù)據(jù)庫云服務(wù)。目前已經(jīng)表示將會把和整合進(jìn)自身的公有云之中。但截至到目前,這些組件仍然處在預(yù)覽階段。 在當(dāng)前的云計算時代,PaaS領(lǐng)域已經(jīng)成為各大巨頭必爭之地。PaaS提供應(yīng)用服務(wù)引擎,用戶基于該應(yīng)用服務(wù)引擎可構(gòu)建該類的應(yīng)用,典型的案例有Google App Engine、...
摘要:年月日,遷移服務(wù)解決方案在城市峰會中正式發(fā)布。遷移服務(wù)向分布式架構(gòu)升級的直接路徑基于上述問題和挑戰(zhàn),同時經(jīng)過螞蟻十年數(shù)據(jù)庫架構(gòu)升級的先進(jìn)經(jīng)驗,螞蟻金服為客戶打造了這款一站式數(shù)據(jù)遷移解決方案遷移服務(wù),簡稱。 2019年1月4日,OceanBase遷移服務(wù)解決方案在ATEC城市峰會中正式發(fā)布。螞蟻金服資深技術(shù)專家?guī)熚膮R和技術(shù)專家韓谷悅共同分享了OceanBase遷移服務(wù)的重要特性和業(yè)務(wù)實踐...
摘要:年月日,遷移服務(wù)解決方案在城市峰會中正式發(fā)布。遷移服務(wù)向分布式架構(gòu)升級的直接路徑基于上述問題和挑戰(zhàn),同時經(jīng)過螞蟻十年數(shù)據(jù)庫架構(gòu)升級的先進(jìn)經(jīng)驗,螞蟻金服為客戶打造了這款一站式數(shù)據(jù)遷移解決方案遷移服務(wù),簡稱。 2019年1月4日,OceanBase遷移服務(wù)解決方案在ATEC城市峰會中正式發(fā)布。螞蟻金服資深技術(shù)專家?guī)熚膮R和技術(shù)專家韓谷悅共同分享了OceanBase遷移服務(wù)的重要特性和業(yè)務(wù)實踐...
摘要:客戶可以通過一款移動應(yīng)用監(jiān)控其遷移狀態(tài)。表示,隨著產(chǎn)品在后續(xù)版本中不斷調(diào)整,將轉(zhuǎn)向自主交付。然而認(rèn)為,提供了更加全面的解決方案,包括咨詢和教育服務(wù)?,F(xiàn)在已經(jīng)支持向和遷移的以及客戶。最終將把產(chǎn)品擴(kuò)展到支持向轉(zhuǎn)移的和客戶,以及向轉(zhuǎn)移的客戶。Oracle Soar將一系列自動遷移工具與專業(yè)服務(wù)相結(jié)合,所有這些都由Oracle提供——這是一套完整的內(nèi)部遷移解決方案。這種半自動化的解決方案,也讓Ora...
閱讀 1357·2023-01-11 13:20
閱讀 1707·2023-01-11 13:20
閱讀 1215·2023-01-11 13:20
閱讀 1906·2023-01-11 13:20
閱讀 4165·2023-01-11 13:20
閱讀 2757·2023-01-11 13:20
閱讀 1402·2023-01-11 13:20
閱讀 3672·2023-01-11 13:20