免费在线a视频-免费在线观看a视频-免费在线观看大片影视大全-免费在线观看的视频-色播丁香-色播基地

遷移 Oracle 到 PostgreSQL 最好用的工具,沒(méi)有之一!

:2024年09月02日 紅石PG
分享到:

ora_migrator是一款用于Oracle到PostgreSQL的遷移工具,支持max_long參數(shù)設(shè)置和復(fù)制功能。適用于Oracle 9.5或更高版本,需要安裝oracle_fdw和db_migrator擴(kuò)展,并創(chuàng)建外部服務(wù)器用...

將 Oracle 數(shù)據(jù)庫(kù)遷移到 PostgreSQL 時(shí),過(guò)程很難會(huì)一帆風(fēng)順。這種情況下,選擇一款好用的遷移工具,就顯得尤為重要了。

介紹

ora_migrator是一個(gè)用于db_migrator的插件,它使用oracle_fdw將 Oracle 數(shù)據(jù)庫(kù)遷移到 PostgreSQL。

請(qǐng)閱讀db_migrator文檔以獲取使用說(shuō)明;本文僅涵蓋插件的設(shè)置以及一般文檔中未涵蓋的其他功能。

除此之外,ora_migrator還提供從 Oracle 到 PostgreSQL 的復(fù)制功能,可用于從 Oracle 進(jìn)行幾乎零停機(jī)時(shí)間的遷移。有關(guān)詳細(xì)信息,請(qǐng)參閱復(fù)制。

請(qǐng)注意,由于 Oracle 中的模式名稱通常為大寫(xiě),因此,您需要為db_migrator函數(shù)的only_schemas參數(shù),使用大寫(xiě)的模式名稱。

選項(xiàng)

以下選項(xiàng)可用于db_migrate_prepare、db_migrate_mkforeign和db_migrate:

  • ? max_long(整型,默認(rèn)值 32767):將用于在外表上設(shè)置max_long選項(xiàng)。這決定了 LONG、LONG RAW 和 XMLTYPE 列的最大長(zhǎng)度。

前提條件

  • ? 您需要 PostgreSQL 9.5 或更高版本。

  • ? 必須安裝oracle_fdw和db_migrator擴(kuò)展。

  • ? 必須為訪問(wèn)的 Oracle 數(shù)據(jù)庫(kù)定義好外部服務(wù)器。

  • ? 調(diào)用create_oraviews函數(shù)以創(chuàng)建外部表的用戶,必須具有外部服務(wù)器的USAGE權(quán)限。

  • ? 調(diào)用create_oraviews函數(shù)的用戶必須存在用戶映射。

  • ? 用戶映射中使用的 Oracle 用戶,必須具有讀取以下 Oracle 系統(tǒng)視圖的權(quán)限:您可以選擇改為授予用戶SELECT ANY DICTIONARY系統(tǒng)權(quán)限,它包括了上述所有權(quán)限。

  • ? DBA_COL_PRIVS

  • ? DBA_CONS_COLUMNS

  • ? DBA_CONSTRAINTS

  • ? DBA_IND_COLUMNS

  • ? DBA_IND_EXPRESSIONS

  • ? DBA_INDEXES

  • ? DBA_MVIEWS

  • ? DBA_MVIEW_LOGS

  • ? DBA_PROCEDURES

  • ? DBA_SEGMENTS

  • ? DBA_SEQUENCES

  • ? DBA_SOURCE

  • ? DBA_TAB_COLUMNS

  • ? DBA_TAB_PRIVS

  • ? DBA_TABLES

  • ? DBA_TRIGGERS

  • ? DBA_USERS

  • ? DBA_VIEWS

  • ? 要使用復(fù)制,用戶必須具有CREATE TABLE和CREATE TRIGGER權(quán)限。若要對(duì)不屬于指定 Oracle 用戶的表使用復(fù)制,該用戶必須具有CREATE ANY TABLE、CREATE ANY INDEX、CREATE ANY TRIGGER、DROP ANY TABLE、DROP ANY TRIGGER和SELECT ANY TABLE權(quán)限(這是創(chuàng)建、刪除日志記錄表和觸發(fā)器所必需的)。

擴(kuò)展創(chuàng)建的對(duì)象

遷移函數(shù)

db_migrator回調(diào)函數(shù)db_migrator_callback(),返回?cái)U(kuò)展提供的遷移函數(shù)。有關(guān)詳細(xì)信息,請(qǐng)參閱db_migrator文檔。

“元數(shù)據(jù)視圖創(chuàng)建函數(shù)”create_oraviews,會(huì)在 FDW 階段創(chuàng)建一些附加對(duì)象,這些對(duì)象提供了對(duì) Oracle 遷移有幫助的信息:

包定義

packages (

   schema       text    NOT NULL,

   package_name text    NOT NULL,

   is_body      boolean NOT NULL,

   source       text    NOT NULL

)

  • ? is_body,對(duì)于包規(guī)范定義是FALSE,對(duì)于包體定義是TRUE

此視圖可用于簡(jiǎn)化包對(duì)象的轉(zhuǎn)換。

segments (

   schema       text   NOT NULL,

   segment_name text   NOT NULL,

   segment_type text   NOT NULL,

   bytes        bigint NOT NULL

)

該外表對(duì)于評(píng)估 Oracle 中表和索引的大小最有用。

遷移成本估算

migration_cost_estimate (

   schema          text    NOT NULL,

   task_type       text    NOT NULL,

   task_content    bigint  NOT NULL,

   task_unit       text    NOT NULL,

   migration_hours integer NOT NULL

)

  • ? task_type可以是tables、data_migration、functions、triggers、packages和views之一。

  • ? task_content是該類(lèi)型的任務(wù)數(shù)量

  • ? task_unit是task_content的單位

  • ? migration_hours是對(duì)完成此任務(wù)可能需要的小時(shí)數(shù)的一個(gè)粗略估計(jì)

該視圖有助于評(píng)估一個(gè) Oracle 數(shù)據(jù)庫(kù)的遷移成本。

其他對(duì)象

表函數(shù) oracle_test_table

此函數(shù)測(cè)試一個(gè) Oracle 表是否存在潛在的遷移問(wèn)題。您必須在db_migrate_prepare之后運(yùn)行它。

參數(shù)為:

  • ? server:Oracle 外部服務(wù)器的名稱

  • ? schema:模式名稱

  • ? table_name:表名

  • ? pgstage_schema(默認(rèn)是pgsql_stage):由db_migrate_prepare創(chuàng)建的 PostgreSQL 階段的名稱。

schema和table_name必須是 PostgreSQL 階段中與tables表同名的列中的值。

這是一個(gè)表函數(shù),返回有問(wèn)題的行在 Oracle 中的 ROWID,以及一條描述問(wèn)題的消息。

目前測(cè)試發(fā)現(xiàn)有兩個(gè)問(wèn)題:

  • ? 字符串列中的零字節(jié)chr(0)

  • ? 不在數(shù)據(jù)庫(kù)編碼中的字符串列中的值

函數(shù) oracle_migrate_test_data

此函數(shù)對(duì) PostgreSQL 暫存模式中的所有表調(diào)用oracle_test_table,并將結(jié)果記錄在 FDW 階段的test_error表中(在清空表后)。

此外,在 FDW 階段,會(huì)有一份錯(cuò)誤摘要添加到表test_error_stats中。在清理 Oracle 中的臟數(shù)據(jù)時(shí),這對(duì)于衡量隨時(shí)間推移的進(jìn)度非常有用。

該函數(shù)會(huì)返回遇到的錯(cuò)誤總數(shù)。

函數(shù)參數(shù)為:

  • ? server:Oracle 外部服務(wù)器的名稱

  • ? staging_schema(默認(rèn)是fdw_stage):遠(yuǎn)程暫存模式的名稱

  • ? pgstage_schema(默認(rèn)是pgsql_stage):由oracle_migrate_prepare創(chuàng)建的 PostgreSQL 階段的名稱。

  • ? only_schemas(默認(rèn)是NULL):應(yīng)遷移到 PostgreSQL 的 Oracle 模式名稱數(shù)組。如果為 NULL,則會(huì)處理除 Oracle 系統(tǒng)模式之外的所有模式。名稱必須與它們出現(xiàn)在 Oracle 中的名稱相同,通常為大寫(xiě)。

表 oracle_test_table 和 test_error_stats

這些表包含運(yùn)行oracle_migrate_test_data生成的單個(gè)結(jié)果和匯總結(jié)果。

復(fù)制函數(shù)

函數(shù) oracle_replication_start

此函數(shù)在 Oracle 和 PostgreSQL 數(shù)據(jù)庫(kù)中創(chuàng)建復(fù)制所需的所有對(duì)象。PostgreSQL 對(duì)象將創(chuàng)建在 Postgres 暫存模式中,Oracle 對(duì)象與復(fù)制的表位于同一模式中。

此函數(shù)應(yīng)在db_migrate_tables之前調(diào)用,并且在啟動(dòng)oracle_replication_start和調(diào)用db_migrate_tables之間,不應(yīng)在 Oracle 上發(fā)生任何數(shù)據(jù)修改活動(dòng)。

函數(shù)參數(shù)為:

  • ? server:Oracle 外部服務(wù)器的名稱

  • ? pgstage_schema(默認(rèn)是pgsql_stage):由oracle_migrate_prepare創(chuàng)建的 PostgreSQL 階段的名稱

該函數(shù)創(chuàng)建的對(duì)象包括:

  • ? 一個(gè) PostgreSQL 外表__ReplicationEnd,該表會(huì)顯示一個(gè)時(shí)間戳,保證能早于 Oracle 上最老的活躍事務(wù)

  • ? 一個(gè) PostgreSQL 表__ReplicationStart,用于存儲(chǔ)下一次復(fù)制追趕的起點(diǎn)

對(duì)于 Postgres 階段的tables表中設(shè)置migrate為T(mén)RUE的每個(gè)表,將創(chuàng)建以下對(duì)象:

  • ? 一個(gè) Oracle 表__Log_<tablename>,用于收集對(duì)<tablename>的更改

  • ? 一個(gè)在<tablename>上面的 Oracle 觸發(fā)器__Log_<tablename>_TRIG

  • ? Oracle 記錄更改的日志表,在 PostgreSQL 上的外表__Log_<schema>/<tablename>

函數(shù) oracle_catchup_table

將特定時(shí)間間隔內(nèi)更改的數(shù)據(jù),從 Oracle 表復(fù)制到 PostgreSQL。

這要求oracle_replication_start已創(chuàng)建所需的對(duì)象,并且數(shù)據(jù)遷移已完成。

參數(shù):

  • ? schema:遷移表的模式

  • ? table_name:遷移表的名稱

  • ? from_ts:復(fù)制該時(shí)間點(diǎn)以后的更改

  • ? to_ts:復(fù)制該時(shí)間點(diǎn)以前(包括該時(shí)間點(diǎn))的更改

這是一個(gè)“底層”函數(shù),由oracle_replication_catchup調(diào)用;如果要通過(guò)為不同的表并發(fā)運(yùn)行它,來(lái)并行化追趕任務(wù),則可以使用它。

函數(shù) oracle_catchup_sequence

參數(shù):

  • ? schema:遷移序列的模式

  • ? sequence_name:遷移序列的名稱

  • ? staging_schema(默認(rèn)是fdw_stage):遠(yuǎn)程暫存模式的名稱

在遠(yuǎn)程端查詢 Oracle 序列的當(dāng)前值,并將遷移的序列設(shè)置為該值。

函數(shù) oracle_replication_catchup

復(fù)制自上次同步到 PostgreSQL 以后所有 Oracle 表和序列中的所有更改。

開(kāi)始時(shí)間戳取自__ReplicationStart,結(jié)束時(shí)間戳取自__ReplicationEnd(包含最近的安全時(shí)間戳)。成功完成后,復(fù)制結(jié)束時(shí)間將保存到__ReplicationStart,以便下次使用。

參數(shù):

  • ? staging_schema(默認(rèn)是fdw_stage):遠(yuǎn)程暫存模式的名稱

  • ? pgstage_schema(默認(rèn)是pgsql_stage):由oracle_migrate_prepare創(chuàng)建的 PostgreSQL 階段的名稱

您可以在oracle_replication_start完成后隨時(shí)調(diào)用此函數(shù)。

除非數(shù)據(jù)庫(kù)中沒(méi)有觸發(fā)器或外鍵約束,否則應(yīng)在調(diào)用此函數(shù)時(shí),將配置參數(shù)session_replication_role設(shè)置為replica。這樣就不會(huì)觸發(fā)觸發(fā)器,并且不會(huì)檢查外鍵約束。

oracle_replication_catchup在 Oracle 上使用SERIALIZABLE隔離級(jí)別,因此它可以看到 Oracle 數(shù)據(jù)庫(kù)的固定快照,并且數(shù)據(jù)在 PostgreSQL 端是一致的,即使 Oracle 數(shù)據(jù)庫(kù)被其他并發(fā)的會(huì)話修改。

如果要使用復(fù)制進(jìn)行接近零停機(jī)時(shí)間的遷移,請(qǐng)?jiān)诙虝r(shí)間內(nèi)連續(xù)調(diào)用兩次,并確保在第二次調(diào)用期間 Oracle 上沒(méi)有數(shù)據(jù)修改活動(dòng)。第二次追趕完成后,您可以立即將應(yīng)用程序切換到 PostgreSQL。

函數(shù) oracle_replication_finish

刪除 PostgreSQL 和 Oracle 中由oracle_replication_start創(chuàng)建的所有對(duì)象。

這可用于在完成從 Oracle 的遷移后進(jìn)行清理。

  • ? server:Oracle 外部服務(wù)器的名稱

  • ? pgstage_schema(默認(rèn)是pgsql_stage):由oracle_migrate_prepare創(chuàng)建的 PostgreSQL 階段的名稱

限制

并非所有 Oracle 分區(qū)選項(xiàng)都受ora_migrator支持。PostgreSQL 僅支持列表、哈希和范圍分區(qū),不支持其他分區(qū)策略。此外,不支持使用兩列或更多列的分區(qū)鍵進(jìn)行列表和范圍分區(qū)。當(dāng)ora_migrator遇到一個(gè)無(wú)法遷移的分區(qū)模式時(shí),會(huì)將該表遷移到一個(gè)非分區(qū)表。

復(fù)制

ora_migrator提供了一個(gè)從 Oracle 到 PostgreSQL 的簡(jiǎn)單的基于觸發(fā)器的復(fù)制功能。

這可用于將數(shù)據(jù)庫(kù)從 Oracle 遷移到 PostgreSQL,幾乎沒(méi)有停機(jī)時(shí)間。

操作步驟如下:

  • ? 按照db_migrator文檔中所述,通過(guò)調(diào)用db_migrate_prepare和db_migrate_mkforeign來(lái)準(zhǔn)備遷移。

  • ? 暫停 Oracle 數(shù)據(jù)庫(kù)上的所有數(shù)據(jù)修改活動(dòng)。這是需要的,因?yàn)?Oracle 不支持事務(wù)性 DDL。

  • ? 然后調(diào)用oracle_replication_start以設(shè)置所有必需的對(duì)象。這將在 Oracle 數(shù)據(jù)庫(kù)中創(chuàng)建日志表和觸發(fā)器。

  • ? 然后像往常一樣使用db_migrate_tables開(kāi)始數(shù)據(jù)遷移。一旦db_migrate_tables啟動(dòng),Oracle 數(shù)據(jù)庫(kù)上的數(shù)據(jù)修改活動(dòng)就可以恢復(fù)。遷移將使用SERIALIZABLE事務(wù)隔離級(jí)別運(yùn)行,因此遷移的數(shù)據(jù)將是一致的。請(qǐng)確保 Oracle 上有足夠的 UNDO 存儲(chǔ)空間,否則數(shù)據(jù)遷移可能會(huì)失敗。

  • ? 使用db_migrate_constraints遷移約束和索引;按照db_migrator文檔中所述,遷移其他對(duì)象。

  • ? 您可以隨時(shí)調(diào)用oracle_replication_catchup,以將更改的數(shù)據(jù)從 Oracle 傳輸?shù)?PostgreSQL。這需要為所有受影響的表調(diào)用oracle_catchup_table,因此要并行化操作,您可以直接為所有受影響的表調(diào)用下層的函數(shù)。請(qǐng)注意,追趕時(shí)不會(huì)清理 Oracle 上的日志表。為避免 PostgreSQL 中的外鍵約束問(wèn)題,請(qǐng)?jiān)谶\(yùn)行oracle_catchup_table時(shí),確保將配置參數(shù)session_replication_role設(shè)置為replica。對(duì)于接近零停機(jī)時(shí)間的遷移,在 Oracle 數(shù)據(jù)庫(kù)上沒(méi)有數(shù)據(jù)修改活動(dòng)時(shí),還必須執(zhí)行最后一次oracle_replication_catchup調(diào)用。調(diào)用后,將應(yīng)用程序切換到 PostgreSQL。

  • ? 要結(jié)束復(fù)制,請(qǐng)調(diào)用oracle_replication_finish。這將會(huì)刪除為復(fù)制創(chuàng)建的所有對(duì)象。

  • ? 最后,調(diào)用db_migrate_finish,以刪除所有輔助對(duì)象。

歡迎添加下面的微信,拉你進(jìn)微信群交流 PostgreSQL 技術(shù)。

需要復(fù)制文章中的源碼,或者訪問(wèn)引用的網(wǎng)頁(yè)鏈接,請(qǐng)點(diǎn)擊左下角閱讀原文。對(duì)文章中的內(nèi)容有疑問(wèn)或者改進(jìn)建議,歡迎您在下方留言。

原文來(lái)源:https://mp.weixin.qq.com/s/eFzRkQwp8mOE-2qhNwz0pA

[我要糾錯(cuò)]
[ 編輯:宋聰喬 &發(fā)表于江蘇 ]
關(guān)鍵詞: Oracle 數(shù)據(jù)庫(kù) 移到 PostgreSQL 過(guò)程

來(lái)源:本文內(nèi)容搜集或轉(zhuǎn)自各大網(wǎng)絡(luò)平臺(tái),并已注明來(lái)源、出處,如果轉(zhuǎn)載侵犯您的版權(quán)或非授權(quán)發(fā)布,請(qǐng)聯(lián)系小編,我們會(huì)及時(shí)審核處理。
聲明:江蘇教育黃頁(yè)對(duì)文中觀點(diǎn)保持中立,對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或者完整性不提供任何明示或暗示的保證,不對(duì)文章觀點(diǎn)負(fù)責(zé),僅作分享之用,文章版權(quán)及插圖屬于原作者。

點(diǎn)個(gè)贊
0
踩一腳
0

您在閱讀:遷移 Oracle 到 PostgreSQL 最好用的工具,沒(méi)有之一!

Copyright©2013-2025 ?JSedu114 All Rights Reserved. 江蘇教育信息綜合發(fā)布查詢平臺(tái)保留所有權(quán)利

蘇公網(wǎng)安備32010402000125 蘇ICP備14051488號(hào)-3技術(shù)支持:南京博盛藍(lán)睿網(wǎng)絡(luò)科技有限公司

南京思必達(dá)教育科技有限公司版權(quán)所有   百度統(tǒng)計(jì)

主站蜘蛛池模板: 午夜视频在线 | 日本免费新一区二区三区 | 色在线播放 | 国产欧美精品国产国产专区 | 欧美1区| 九九伦理影院手机观看 | 天天操比| 无遮挡无删动漫肉在线观看 | 蜜桃社尤物馆美女图片 | 91精品国产乱码在线观看 | vr欧美乱强伦xxxxx | 天天躁狠狠躁夜夜躁 | 草草精品视频 | 成人免费在线视频 | 日本中文视频 | 国产99在线a视频 | 狠狠骚| 在线中文字幕观看 | 站长工具天天爽视频 | 欧美在线视 | 日韩欧美一区黑人vs日本人 | 国产成人精品免费大全 | 亚洲国产七七久久桃花 | 男人女人真曰批的视频动态 | 久久伊人中文字幕有码 | 青青草国产一区二区三区 | 日本精品中文字幕在线播放 | 日韩视频免费在线观看 | 曰批免费视频播放在线看片二 | 免费成人黄色网址 | 一级一级人与动毛片 | a级片视频在线观看 | 欧美人人做人人爽人人喊 | 日韩网站免费 | 亚洲人成网站在线观看播放 | 亚洲狼人香蕉香蕉在线28 | 欧美成人福利视频 | 日韩中文字幕精品免费一区 | 中文字幕日韩有码 | 中文字幕免费视频精品一 | www.久久精品视频 |
最熱文章
最新文章
  • 阿里云上云鉅惠,云產(chǎn)品享最低成本,有需要聯(lián)系,
  • 卡爾蔡司鏡片優(yōu)惠店,鏡片價(jià)格低
  • 蘋(píng)果原裝手機(jī)殼