oracle postgresql ora2pg

Ora2pg組態設定(上)

周志鴻 Vincent Chou 2023/04/26 15:40:32
1281

上一篇文章講解了如何架設ora2pg機器並進行簡單遷移,並且使用下方簡易參數進行遷移

 

ORACLE_HOME           <ORACLE_HOME>
ORACLE_DSN            dbi:Oracle:host=<IP>;service_name=<Name>;port=1521
ORACLE_USER           <Oracle帳號>
ORACLE_PWD            <Oracle密碼>
EXPORT_SCHEMA         1
SCHEMA                <Oracle Schema>
USER_GRANTS           1
TYPE                  TABLE
PG_VERSION            14
PG_DSN                dbi:Pg:dbname=<DB Name>;host=<Pg ip>;port=5432
PG_USER               <Pg帳號>
PG_PWD                <Pg密碼>
PG_SCHEMA             <Pg Schema>

 

這麼簡短的參數當然是無法遷移正式資料庫的,這次就介紹Ora2pg比較常用到的參數

ORACLE_DSN

此參數為設定oracle連線資訊,可使用service_name或sid

 

SCHEMA test

在此輸入要轉換的Oracle Schema名稱

 

EXPORT_SCHEMA

Oracle的Schema名稱預設不會匯到PG裡,而是使用PG的預設名稱public,如要按照Oracle Schema名稱匯入請設定為1

 

COMPILE_SCHEMA

預設情況下,Ora2Pg 只會匯出有效的 PL/SQL 代碼。啟用此參數使其有機會重新編譯成功,然後能夠將其匯出。

 

匯出類型

 

TYPE

指定匯出的格式,有常見的TABLE、VIEW、FUNCTION,也可以測試資料正確性,所有Type如下:

ºTABLE

ºVIEW

ºGRANT

ºSEQUENCE

ºTABLESPACE

ºTRIGGER

ºFUNCTION

ºPROCEDURE

ºPACKAGE

ºINSERT

ºCOPY

ºPARTITION

ºTYPE

ºFDW

ºMVIEW

ºQUERY

ºKETTLE

ºDBLINK

ºSYNONYM

ºDIRECTORY

ºLOAD

ºTEST

ºTEST_COUNT

ºTEST_VIEW

ºTEST_DATA

 

COST_UNIT_VALUE 5

設定遷移報告成本評估單位值。預設值為5分鐘,如果是初次遷移建議設為10分鐘,這樣預估人天數會比較合理

 

DUMP_AS_HTML 0

預設情況使用SHOW_REPORT產生遷移報告以命令字元顯示,啟用此參數強制 ora2pg 產生 HTML 格式的報告

 

HUMAN_DAYS_LIMIT 10

定義遷移評估報告難度級別從 B 切換到 C 的人天數。預設值為 10 人天。

 

JOBS 1

可以在 COPY、FUNCTION、PROCEDURE模式下多工處理以增進效率。

 

PARALLEL_TABLES 1

同時資料擷取的Table數量,上限為主機的核心數,多工數量為 PARALLEL_TABLES * JOBS。

 

ENABLE_BLOB_EXPORT 1

匯出BLOB格式需要較多時間,如不想匯出的話停用此參數,因不是整筆資料同時匯入,需注意目的端 bytea欄位需沒有 NOT NULL限制。

 

DATA_EXPORT_ORDER name

匯出data的順序預設為table name,如果在字母順序末尾有大型表,並且使用的是多工處理,則最好在大小上設置排序順序,以便在最大表完成之前處理多個小表。在這種情況下,將此參數設置為size會比較好。

 

 

限制物件匯出

 

ALLOW

此參數可設定必須限制導出的物件清單,排除同一匯出類型中的所有其他物件。該值是要匯出的物件名稱的空格或逗號分隔清單,例如:

ALLOW           EMPLOYEES       SALE_.*       COUNTRIES       .*_GEOM_SEQ

將導出名稱為「員工」、「國家」的物件、所有以「SALE_」開頭的物件以及名稱以“_GEOM_SEQ”結尾的所有物件。

 

EXCLUDE

與前一個相反,EXCLUDE可定義要從匯出中排除的物件名稱的空格或逗號分隔清單。

EXCLUDE         EMPLOYEES       TMP_.*       COUNTRIES

將排除名稱為「員工」、「國家」的物件以及所有以「tmp_」開頭的表。

 

WHERE

使用此參數在匯出表時篩選內容,語法結構為TABLE_NAME[WHERE_CLAUSE]

# 單一TABLE
WHERE  TABLE_NAME[ID1='001']

# 套用兩個不同表 TABLE1 & TABLE2
# 及一個通用WHERE DATE_CREATE
WHERE  TABLE1[ID1='001' OR ID1='002']   
       DATE_CREATE > '2001-01-01'   
       TABLE2[NAME='test']


# 資料匯出限制前一千筆,可用於資料測試
WHERE   ROWNUM < 1000

 

修改物件結構

 

MODIFY_STRUCT

使用此參數可以限制要擷取的Columns ,語法結構為NOM_TABLE(nomcol1,nomcol2,...),使用 Table Type匯出時,也不會匯出相關的所有索引或外來鍵。

MODIFY_STRUCT   T_TEST1(id,dossier)   T_TEST2(id,fichier)

 

REPLACE_TABLES

此參數可在匯出過程中將 Oracle遷移到PostgreSQL的Table重新命名。

REPLACE_TABLES  ORIG_TBNAME1:DEST_TBNAME1   ORIG_TBNAME2:DEST_TBNAME2

 

REPLACE_COLS

與REPLACE_TABLES一樣,可以使用以下語法將欄位名稱重新命名

REPLACE_COLS    T_TEST(dico:dictionary,dossier:folder)

 

BOOLEAN_VALUES

使用此選項可添加 Oracle 可能使用的布林值定義。必須設置以空格分隔的 TRUE:FALSE 值清單。以下是 Ora2Pg 預設的值:

BOOLEAN_VALUES          yes:no y:n 1:0 true:false enabled:disabled

 

DISABLE_PARTITION

如在分區匯入時遇到錯誤,可使用此參數將分區變成單一Table,減少錯誤機率

 

匯入PostgreSQL

DATA_LIMIT 10000

調高數值可增加使用INSERT/COPY匯出資料時的速度,例如100000 或 1000000,預設值為1000

 

BLOB_LIMIT 500

當 Ora2Pg 檢測到帶有一些 BLOB 的Table時,它將自動除以 10 來自動減小此指令的值,直到他的值低於 1000。

匯出 BLOB 會佔用大量資源,其值過高可能會生成 OOM。

 

FILE_PER_CONSTRAINT 1

Schema匯出時會將Constraint檔案單獨儲存

 

FILE_PER_INDEX 1

Schema匯出時會將Index檔案單獨儲存

 

FILE_PER_FKEYS 1

Schema匯出時會將外來鍵檔案單獨儲存

 

FILE_PER_FUNCTION 1

啟用此參數將Function、Procedure、Trigger匯出時單獨儲存,如有要改寫建議啟用

 

TRUNCATE_TABLE

如果此參數設置為 1,則在載入資料之前將添加TRUNCATE TABLE指令。這僅在Insert或Copy匯出時可用。

僅當沒有使用 DELETE 或沒有指定於當前Table的語法時,才會TRUNCATE。

 

DELETE

再匯入Data時一併執行DELETE指令刪除指定條件的資料,語法為TABLE_NAME[DELETE_WHERE_CLAUSE],範例如下:

DELETE  1=1    #刪除全部
DELETE  TABLE_TEST[ID1='001']
DELETE  TABLE_TEST[ID1='001' OR ID1='002']  
        DATE_CREATE > '2001-01-01'  
        TABLE_INFO[NAME='test']

 

DROP_IF_EXISTS 0

在建立物件之前如果存在則會使用DROP指令。

 

DATA_VALIDATION_ROWS 10000

在兩端資料庫進行數據驗證的行數。預設為驗證前 10000 行。 0 表示驗證所有行。

 

DATA_VALIDATION_ORDERING 1

修改數據後,兩邊之間的行順序會有所不同。在這種情況下,資料必須使用主鍵或索引進行排序才可以驗證。

如果驗證是在遷移後完成的,沒有修改任何資料時,則可以對所有Table進行驗證,不用進行任何排序。

 

DATA_VALIDATION_ERROR 10

在一定行數的資料不一致後停止資料驗證。預設值是在出現 10 行錯誤後停止。

 

欄位型態控制

 

PG_NUMERIC_TYPE 1

設定為 1時,Oracle的NUMBER(p,s)會轉換為實數和浮點型 PostgreSQL 型態。

如果有貨幣欄位或不希望有小數問題,則應設定 0 使用NUMERIC(p,s)的PostgreSQL型態。

 

PG_INTEGER_TYPE 1

設定為 1時,Oracle的NUMBER(p) 或 NUMBER 會按照精度值轉換為 smallint、integer 或 bigint的PostgreSQL型態。

不帶精度則 NUMBER 設置下方DEFAULT_NUMERIC。

 

DEFAULT_NUMERIC bigint

預設不帶精度的 NUMBER 僅在 PG_INTEGER_TYPE 為 True 時才轉換為 Bigint。可以將此值覆蓋為任何PG類型,如整數或浮點數。

 

DATA_TYPE

使用此參數可以控制 Oracle 和 PostgreSQL 型態之間的對應關係,重新定義 Ora2pg 中使用的資料型態轉換。

語法是“Oracle datatype:Postgresql datatype”的逗號分隔清單。

DATA_TYPE   VARCHAR2:varchar,NVARCHAR2:varchar,DATE:timestamp

 如果要用精度和小數位數替換型態,則需要使用反斜線。例如,如果要將所有 NUMBER(*,0) 替換為 bigint 而不是 numeric(),可以這樣輸入:

DATA_TYPE       NUMBER(*\,0):bigint

 

FORCE_IDENTITY_BIGINT 1

通常Identity欄位必須是Bigint以搭配自動取號,因此 Ora2Pg 預設為 1 。

 

周志鴻 Vincent Chou