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

遷移 Oracle 到 PostgreSQL 最好用的工具,沒有之一!

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

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

將 Oracle 數據庫遷移到 PostgreSQL 時,過程很難會一帆風順。這種情況下,選擇一款好用的遷移工具,就顯得尤為重要了。

介紹

ora_migrator是一個用于db_migrator的插件,它使用oracle_fdw將 Oracle 數據庫遷移到 PostgreSQL。

請閱讀db_migrator文檔以獲取使用說明;本文僅涵蓋插件的設置以及一般文檔中未涵蓋的其他功能。

除此之外,ora_migrator還提供從 Oracle 到 PostgreSQL 的復制功能,可用于從 Oracle 進行幾乎零停機時間的遷移。有關詳細信息,請參閱復制。

請注意,由于 Oracle 中的模式名稱通常為大寫,因此,您需要為db_migrator函數的only_schemas參數,使用大寫的模式名稱。

選項

以下選項可用于db_migrate_prepare、db_migrate_mkforeign和db_migrate:

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

前提條件

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

  • ? 必須安裝oracle_fdw和db_migrator擴展。

  • ? 必須為訪問的 Oracle 數據庫定義好外部服務器。

  • ? 調用create_oraviews函數以創建外部表的用戶,必須具有外部服務器的USAGE權限。

  • ? 調用create_oraviews函數的用戶必須存在用戶映射。

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

  • ? 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

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

擴展創建的對象

遷移函數

db_migrator回調函數db_migrator_callback(),返回擴展提供的遷移函數。有關詳細信息,請參閱db_migrator文檔。

“元數據視圖創建函數”create_oraviews,會在 FDW 階段創建一些附加對象,這些對象提供了對 Oracle 遷移有幫助的信息:

包定義

packages (

   schema       text    NOT NULL,

   package_name text    NOT NULL,

   is_body      boolean NOT NULL,

   source       text    NOT NULL

)

  • ? is_body,對于包規范定義是FALSE,對于包體定義是TRUE

此視圖可用于簡化包對象的轉換。

segments (

   schema       text   NOT NULL,

   segment_name text   NOT NULL,

   segment_type text   NOT NULL,

   bytes        bigint NOT NULL

)

該外表對于評估 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是該類型的任務數量

  • ? task_unit是task_content的單位

  • ? migration_hours是對完成此任務可能需要的小時數的一個粗略估計

該視圖有助于評估一個 Oracle 數據庫的遷移成本。

其他對象

表函數 oracle_test_table

此函數測試一個 Oracle 表是否存在潛在的遷移問題。您必須在db_migrate_prepare之后運行它。

參數為:

  • ? server:Oracle 外部服務器的名稱

  • ? schema:模式名稱

  • ? table_name:表名

  • ? pgstage_schema(默認是pgsql_stage):由db_migrate_prepare創建的 PostgreSQL 階段的名稱。

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

這是一個表函數,返回有問題的行在 Oracle 中的 ROWID,以及一條描述問題的消息。

目前測試發現有兩個問題:

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

  • ? 不在數據庫編碼中的字符串列中的值

函數 oracle_migrate_test_data

此函數對 PostgreSQL 暫存模式中的所有表調用oracle_test_table,并將結果記錄在 FDW 階段的test_error表中(在清空表后)。

此外,在 FDW 階段,會有一份錯誤摘要添加到表test_error_stats中。在清理 Oracle 中的臟數據時,這對于衡量隨時間推移的進度非常有用。

該函數會返回遇到的錯誤總數。

函數參數為:

  • ? server:Oracle 外部服務器的名稱

  • ? staging_schema(默認是fdw_stage):遠程暫存模式的名稱

  • ? pgstage_schema(默認是pgsql_stage):由oracle_migrate_prepare創建的 PostgreSQL 階段的名稱。

  • ? only_schemas(默認是NULL):應遷移到 PostgreSQL 的 Oracle 模式名稱數組。如果為 NULL,則會處理除 Oracle 系統模式之外的所有模式。名稱必須與它們出現在 Oracle 中的名稱相同,通常為大寫。

表 oracle_test_table 和 test_error_stats

這些表包含運行oracle_migrate_test_data生成的單個結果和匯總結果。

復制函數

函數 oracle_replication_start

此函數在 Oracle 和 PostgreSQL 數據庫中創建復制所需的所有對象。PostgreSQL 對象將創建在 Postgres 暫存模式中,Oracle 對象與復制的表位于同一模式中。

此函數應在db_migrate_tables之前調用,并且在啟動oracle_replication_start和調用db_migrate_tables之間,不應在 Oracle 上發生任何數據修改活動。

函數參數為:

  • ? server:Oracle 外部服務器的名稱

  • ? pgstage_schema(默認是pgsql_stage):由oracle_migrate_prepare創建的 PostgreSQL 階段的名稱

該函數創建的對象包括:

  • ? 一個 PostgreSQL 外表__ReplicationEnd,該表會顯示一個時間戳,保證能早于 Oracle 上最老的活躍事務

  • ? 一個 PostgreSQL 表__ReplicationStart,用于存儲下一次復制追趕的起點

對于 Postgres 階段的tables表中設置migrate為TRUE的每個表,將創建以下對象:

  • ? 一個 Oracle 表__Log_<tablename>,用于收集對<tablename>的更改

  • ? 一個在<tablename>上面的 Oracle 觸發器__Log_<tablename>_TRIG

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

函數 oracle_catchup_table

將特定時間間隔內更改的數據,從 Oracle 表復制到 PostgreSQL。

這要求oracle_replication_start已創建所需的對象,并且數據遷移已完成。

參數:

  • ? schema:遷移表的模式

  • ? table_name:遷移表的名稱

  • ? from_ts:復制該時間點以后的更改

  • ? to_ts:復制該時間點以前(包括該時間點)的更改

這是一個“底層”函數,由oracle_replication_catchup調用;如果要通過為不同的表并發運行它,來并行化追趕任務,則可以使用它。

函數 oracle_catchup_sequence

參數:

  • ? schema:遷移序列的模式

  • ? sequence_name:遷移序列的名稱

  • ? staging_schema(默認是fdw_stage):遠程暫存模式的名稱

在遠程端查詢 Oracle 序列的當前值,并將遷移的序列設置為該值。

函數 oracle_replication_catchup

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

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

參數:

  • ? staging_schema(默認是fdw_stage):遠程暫存模式的名稱

  • ? pgstage_schema(默認是pgsql_stage):由oracle_migrate_prepare創建的 PostgreSQL 階段的名稱

您可以在oracle_replication_start完成后隨時調用此函數。

除非數據庫中沒有觸發器或外鍵約束,否則應在調用此函數時,將配置參數session_replication_role設置為replica。這樣就不會觸發觸發器,并且不會檢查外鍵約束。

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

如果要使用復制進行接近零停機時間的遷移,請在短時間內連續調用兩次,并確保在第二次調用期間 Oracle 上沒有數據修改活動。第二次追趕完成后,您可以立即將應用程序切換到 PostgreSQL。

函數 oracle_replication_finish

刪除 PostgreSQL 和 Oracle 中由oracle_replication_start創建的所有對象。

這可用于在完成從 Oracle 的遷移后進行清理。

  • ? server:Oracle 外部服務器的名稱

  • ? pgstage_schema(默認是pgsql_stage):由oracle_migrate_prepare創建的 PostgreSQL 階段的名稱

限制

并非所有 Oracle 分區選項都受ora_migrator支持。PostgreSQL 僅支持列表、哈希和范圍分區,不支持其他分區策略。此外,不支持使用兩列或更多列的分區鍵進行列表和范圍分區。當ora_migrator遇到一個無法遷移的分區模式時,會將該表遷移到一個非分區表。

復制

ora_migrator提供了一個從 Oracle 到 PostgreSQL 的簡單的基于觸發器的復制功能。

這可用于將數據庫從 Oracle 遷移到 PostgreSQL,幾乎沒有停機時間。

操作步驟如下:

  • ? 按照db_migrator文檔中所述,通過調用db_migrate_prepare和db_migrate_mkforeign來準備遷移。

  • ? 暫停 Oracle 數據庫上的所有數據修改活動。這是需要的,因為 Oracle 不支持事務性 DDL。

  • ? 然后調用oracle_replication_start以設置所有必需的對象。這將在 Oracle 數據庫中創建日志表和觸發器。

  • ? 然后像往常一樣使用db_migrate_tables開始數據遷移。一旦db_migrate_tables啟動,Oracle 數據庫上的數據修改活動就可以恢復。遷移將使用SERIALIZABLE事務隔離級別運行,因此遷移的數據將是一致的。請確保 Oracle 上有足夠的 UNDO 存儲空間,否則數據遷移可能會失敗。

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

  • ? 您可以隨時調用oracle_replication_catchup,以將更改的數據從 Oracle 傳輸到 PostgreSQL。這需要為所有受影響的表調用oracle_catchup_table,因此要并行化操作,您可以直接為所有受影響的表調用下層的函數。請注意,追趕時不會清理 Oracle 上的日志表。為避免 PostgreSQL 中的外鍵約束問題,請在運行oracle_catchup_table時,確保將配置參數session_replication_role設置為replica。對于接近零停機時間的遷移,在 Oracle 數據庫上沒有數據修改活動時,還必須執行最后一次oracle_replication_catchup調用。調用后,將應用程序切換到 PostgreSQL。

  • ? 要結束復制,請調用oracle_replication_finish。這將會刪除為復制創建的所有對象。

  • ? 最后,調用db_migrate_finish,以刪除所有輔助對象。

歡迎添加下面的微信,拉你進微信群交流 PostgreSQL 技術。

需要復制文章中的源碼,或者訪問引用的網頁鏈接,請點擊左下角閱讀原文。對文章中的內容有疑問或者改進建議,歡迎您在下方留言。

原文來源:https://mp.weixin.qq.com/s/eFzRkQwp8mOE-2qhNwz0pA

[我要糾錯]
文:宋聰喬&發表于江蘇
關鍵詞: Oracle 數據庫 移到 PostgreSQL 過程

來源:本文內容搜集或轉自各大網絡平臺,并已注明來源、出處,如果轉載侵犯您的版權或非授權發布,請聯系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權及插圖屬于原作者。

點個贊
0
踩一腳
0

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

Copyright?2013-2024 JSedu114 All Rights Reserved. 江蘇教育信息綜合發布查詢平臺保留所有權利

蘇公網安備32010402000125 蘇ICP備14051488號-3技術支持:南京博盛藍睿網絡科技有限公司

南京思必達教育科技有限公司版權所有   百度統計

主站蜘蛛池模板: 国产你懂的在线 | 制服丝袜手机在线 | 国产在线观看午夜不卡 | 欧美在线视频一区二区三区 | 久久精品国产亚洲a不卡 | 久久成人国产精品免费 | 国产日韩欧美一区二区三区在线 | 一区二区三区欧美视频 | 亚洲高清免费观看 | 亚洲 中文 欧美 日韩 在线 | 亚欧成人乱码一区二区 | 成人短视频在线在线观看 | 国产在线一卡 | 亚洲不卡免费视频 | 亚洲综合欧美日韩 | 亚洲成人精品久久 | 国产aaaaaa | 日韩午夜高清福利片在线观看 | 亚欧中文字幕 | 久久这里有精品视频任我鲁 | 色婷婷影院在线视频免费播放 | aaa国产一级毛片 | 亚洲成年网站在线777 | 久久精品国产亚洲 | 男女性免费视频观看 | 成人看的羞羞视频免费观看 | 亚洲成人在线播放 | 农村偷人一级超爽毛片 | 一级午夜免费视频 | 国产精品免费视频能看 | 欧美极度另类极品 | a级片播放 | 国产免费黄视频 | 日韩在线一区二区 | 日韩精品在线观看视频 | 中文字幕一区二区三区5566 | 大胸美女被强吻胸动态图片 | 国产欧美日韩中文字幕 | 视频一区日韩 | 99re免费视频精品全部 | 一区二区三区四区国产 |
最熱文章
最新文章
  • 阿里云上云鉅惠,云產品享最低成本,有需要聯系,
  • 卡爾蔡司鏡片優惠店,鏡片價格低
  • 蘋果原裝手機殼