免费在线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-2025 ?JSedu114 All Rights Reserved. 江蘇教育信息綜合發布查詢平臺保留所有權利

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

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

主站蜘蛛池模板: 欧美最新一区二区三区四区 | 免费黄色在线视频 | 日本一区二区视频在线 | 免费一级欧美片片线观看 | 成年人深夜福利 | 五月深爱婷婷 | 精品国产一区二区三区19 | 欧美日韩国产伦理 | 一区二区精品视频 | 性欧美v | 91一级片 | 韩日一区二区 | 就爱啪啪手机版 | 99在线公开免费视频 | 播9公社在线精品中文字幕 波少野结衣色在线 | 毛片在线高清免费观看 | 男女下面一进一出的视频免费 | 边做边叫床的大尺度视频免费 | 日韩18在线观看 | 亚洲国产片高清在线观看 | 4388x成人网 4438x17全国最大色成网站 | 欧美久久xxxxxx影院 | 色综合天天综合网国产成人 | 亚洲一二三区在线观看 | 国产高清在线精品一区二区三区 | 色老头成人免费综合视频 | 色婷婷婷丁香亚洲综合不卡 | 久爱视频www在线播放 | 欧美激情视频一区二区 | 波多野结衣视频免费观看 | 涩涩精品 | 国产精久久一区二区三区 | 视频一区二区国产 | 国产亚洲欧美在线观看的 | 欧美xxx视频在线观看 | 欧洲精品不卡1卡2卡三卡四卡 | 亚洲日本三级 | 午夜影片| 特黄特色一级aa毛片免费观看 | 黄色国产一级片 | 福利毛片|
最熱文章
最新文章
  • 阿里云上云鉅惠,云產品享最低成本,有需要聯系,
  • 卡爾蔡司鏡片優惠店,鏡片價格低
  • 蘋果原裝手機殼