Ora2pg組態設定(上)
上一篇文章講解了如何架設ora2pg機器並進行簡單遷移,並且使用下方簡易參數進行遷移
這麼簡短的參數當然是無法遷移正式資料庫的,這次就介紹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 。