Oracle veri kaynağı, verileri Oracle'dan okumanıza ve Oracle'a yazmanıza olanak tanır. Sihirbaz veya betik modunda senkronizasyon görevleri yapılandırabilirsiniz. Bu konu, DataWorks tarafından desteklenen Oracle senkronizasyon özelliklerini açıklar.
Desteklenen sürümler
Toplu okuma ve yazma
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Oracle Writer, ojdbc6-12.1.1.jar sürücüsünü kullanır.
Gerçek zamanlı okuma
-
Desteklenenler:
11g R2 and later,12c non cdb,18c non cdb,19c non cdbveya19c cdbveritabanları. -
Desteklenmeyenler:
12c cbdve18c cbdveritabanları. Oracle bir tam veritabanı gerçek zamanlı görevin kaynağı olduğunda arşiv günlük kaydını etkinleştirin. Ayrıntılar için bkz. Oracle ortamını hazırlama.
Kapsayıcı veritabanı (CDB), birden çok takılabilir veritabanı (PDB) içeren Oracle 12c ve sonraki sürümlerin bir özelliğidir.
Sınırlamalar
Oracle örneği için NLS_CHARACTERSET ve NLS_NCHAR_CHARACTERSET değerlerinden biri AL32UTF8, AL16UTF16, ZHS16GBK veya UTF8 olmalıdır.
Bir Oracle örneği, günde en fazla 500 GB'lık artımlı verinin gerçek zamanlı olarak senkronize edilmesini destekler.
DataWorks, bir Oracle fiziksel standby'dan yalnızca gerçek zamanlı okuma yapar. Arşivlenmiş günlükleri okuduğu için gecikme süresi, birincil sunucudan okumaya göre daha fazladır ve arşiv günlüklerinin oluşturulma hızına bağlıdır.
Gerçek zamanlı senkronizasyon görünümleri desteklemez; toplu senkronizasyon görünümlerin okunmasını destekler.
DataWorks gerçek zamanlı Oracle okumaları Oracle LogMiner kullanır. Birincil veya standby okuma için birincil sunucuda ek günlük kaydı ve arşivleme günlüğünü etkinleştirin.
Dizin düzenli tablolar desteklenmez.
Tüm sütunları LOB türlerinde (BLOB, CLOB veya NCLOB) olan tablolar desteklenmez.
Oracle tablo veya sütun adlarında Çince karakterler desteklenmez.
30 bayttan uzun Oracle tablo adları desteklenmez.
Desteklenen alan türleri
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Aşağıdaki tabloda Oracle Reader için Oracle tür eşlemeleri listelenmiştir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Senkronizasyondan önce: Oracle ortamını hazırlama
DataWorks'te Oracle verilerini senkronize etmeden önce görevlerin normal şekilde yapılandırılıp çalıştırılabilmesi için Oracle ortamını hazırlayın.
Oracle veritabanı sürümünü kontrol etme
Desteklenen Oracle sürümleri senkronizasyon senaryosuna göre değişir. Sürümünüzün desteklendiğinden emin olun.
-
Sürümü kontrol etmek için aşağıdaki deyimlerden birini kullanın:
-
Deyim 1:
select * from v$version; -
Deyim 2:
select version from v$instance;
-
-
Oracle sürümü
12cveya18cise bunun bircdbveritabanı olup olmadığını kontrol etmek için bu deyimi kullanın. Veri Entegrasyonu gerçek zamanlı senkronizasyonu şu anda12cve18csürümlerindekicdbOracle veritabanlarını desteklemez.select name,cdb,open_mode,con_id from v$database;
Hesap oluşturma ve izin verme
Sonraki işlemler için bir veritabanı oturum açma hesabı planlayın. Bu hesabın ilgili Oracle izinlerine sahip olması gerekir.
Hesap oluşturun. Yordam için bkz. Oracle hesabı oluşturma.
-
İzin verin.
İzin vermek için bu komutları kullanın. Yukarıda oluşturulan hesapla değiştirmek için
'sync_user'ifadesini değiştirin.grant create session to 'sync_user'; //Allow the synchronization account to log on to the database. grant connect to 'sync_user'; //Allow the synchronization account to connect to the database. grant select on nls_database_parameters to 'sync_user'; //Allow the synchronization account to query the nls_database_parameters system settings. grant select on all_users to 'sync_user'; //Allow the synchronization account to query all database users. grant select on all_objects to 'sync_user'; //Allow the synchronization account to query all database objects. grant select on DBA_MVIEWS to 'sync_user'; //Allow the synchronization account to view materialized views. grant select on DBA_MVIEW_LOGS to 'sync_user'; //Allow the synchronization account to view materialized view logs. grant select on DBA_CONSTRAINTS to 'sync_user'; //Allow the synchronization account to view constraints on all database tables. grant select on DBA_CONS_COLUMNS to 'sync_user'; //Allow the synchronization account to view columns in specified constraints on all database tables. grant select on all_tab_cols to 'sync_user'; //Allow the synchronization account to view column information for tables, views, and clusters. grant select on sys.obj$ to 'sync_user'; //Allow the synchronization account to view objects. sys.obj$ is the Oracle dictionary base table containing all objects. grant select on SYS.COL$ to 'sync_user'; //Allow the synchronization account to view column definitions. SYS.COL$ stores table column definitions. grant select on sys.USER$ to 'sync_user'; //Allow the synchronization account to view system tables. sys.USER$ is the default service for user sessions. grant select on sys.cdef$ to 'sync_user'; //Allow the synchronization account to view system tables. grant select on sys.con$ to 'sync_user'; //Allow the synchronization account to view constraints. sys.con$ records Oracle constraint information. grant select on all_indexes to 'sync_user'; //Allow the synchronization account to view all indexes. grant select on v_$database to 'sync_user'; //Allow the synchronization account to view v_$database. grant select on V_$ARCHIVE_DEST to 'sync_user'; //Allow the synchronization account to view V_$ARCHIVE_DEST. grant select on v_$log to 'sync_user'; //Allow the synchronization account to view v_$log, which shows log file information in the control file. grant select on v_$logfile to 'sync_user'; //Allow the synchronization account to view v_$logfile, which contains redo log file information. grant select on v_$archived_log to 'sync_user'; //Allow the synchronization account to view v$archived_log, which contains archive log information. grant select on V_$LOGMNR_CONTENTS to 'sync_user'; //Allow the synchronization account to view V_$LOGMNR_CONTENTS. grant select on DUAL to 'sync_user'; //Allow the synchronization account to view DUAL, a one-row virtual table used in SELECT syntax. grant select on v_$parameter to 'sync_user'; //Allow the synchronization account to view v_$parameter, a dynamic dictionary view of database parameter values. grant select any transaction to 'sync_user'; //Allow the synchronization account to view any transaction. grant execute on SYS.DBMS_LOGMNR to 'sync_user'; //Allow the synchronization account to use LogMiner for transaction analysis and data recovery. grant alter session to 'sync_user'; //Allow the synchronization account to alter the database session. grant select on dba_objects to 'sync_user'; //Allow the synchronization account to view all database objects. grant select on v_$standby_log to 'sync_user'; //Allow the synchronization account to view v_$standby_log, which contains standby archive log information. grant select on v_$ARCHIVE_GAP to 'sync_user'; //Allow the synchronization account to query missing archive logs. grant select on sys.ICOL$ to 'sync_user'; //Allow the synchronization account to view objects. sys.obj$ is the Oracle dictionary base table containing all objects. grant select on V_$THREAD to 'sync_user'; //Allow the synchronization account to view instance thread information. V_$THREAD is an Oracle dynamic performance view of RAC instance thread status used to identify instance state and log sources for incremental parsing.Tam verilerin toplu senkronizasyonu için ayrıca hesaba tüm tabloları sorgulama izni verin:
grant select any table to 'sync_user';Oracle 12c ve sonraki sürümler, hesabın LogMiner'ı kullanması için bu komutu gerektirir. Önceki sürümler yerleşik LogMiner sağlar ve bunu gerektirmez.
grant LOGMINING TO 'sync_user';
Arşiv ve ek günlük kaydını etkinleştirme ve redo günlük dosyalarını değiştirme
-
Arşivleme günlüğünü etkinleştirin:
shutdown immediate; startup mount; alter database archivelog; alter database open; -
Ek günlük kaydını etkinleştirin.
İhtiyaca göre ek günlük kaydını seçin. Örnek SQL:
//Enable supplemental logging to capture complete changes for real-time synchronization. For database-level logging, run: alter database add supplemental log data(primary key) columns; //Enable supplemental logging for primary key columns in the database. alter database add supplemental log data(unique) columns; //Enable supplemental logging for unique-index columns in the database. //You can instead enable it at the table level: alter schema.table add supplemental log data(primary key) columns; //Enable supplemental logging for primary key columns in the specified table. alter schema.table add supplemental log data(unique) columns; //Enable supplemental logging for unique-index columns in the specified table. -
Redo günlük dosyalarını değiştirin.
Ek günlük kaydını etkinleştirdikten sonra redo günlük dosyalarını değiştirmek için aşağıdaki komutu birkaç kez (genellikle beş kez önerilir) çalıştırın.
alter system switch logfile;NotBirkaç kez değiştirmek, geçerli günlük dosyasının dolduktan sonra devredilmesini sağlayarak sonraki kurtarma için işlem kayıtlarının korunmasını garanti eder.
Veritabanı karakter kodlamasını kontrol etme
Veritabanının karakter kodlamasını kontrol etmek için veritabanında aşağıdaki komutu çalıştırın:
select * from v$nls_parameters where PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
v$nls_parameters veritabanı parametre ayarlarını depolar.
NLS_CHARACTERSET ve NLS_NCHAR_CHARACTERSET veritabanı ve ulusal karakter kümeleridir ve iki kategori Oracle karakter verisi için depolama biçimlerini belirtir.
Veri Entegrasyonu şu anda veri senkronize ederken UTF8, AL32UTF8, AL16UTF16 ve ZHS16GBK'yı destekler. Senkronizasyondan önce desteklenmeyen karakter kodlamalarını değiştirin.
Tablo veri türlerini kontrol etme
Tablo sütunlarının türlerini sorgulamak için bir SQL SELECT deyimi kullanın. 'tablename' öğesini incelemek için şunu çalıştırın:
select COLUMN_NAME,DATA_TYPE from all_tab_columns where TABLE_NAME='tablename';
COLUMN_NAME: Tablo sütun adı.
DATA_TYPE: Sütunun veri türü.
all_tab_columns: Tüm tablo sütunlarıyla ilgili bilgileri içeren görünüm.
TABLE_NAME: Hedef tablonun adı. Deyimde 'tablename' ifadesini gerçek tablo adıyla değiştirin.
Ayrıca select * from 'tablename'; çalıştırarak tüm verileri sorgulayabilir ve hedef tablo için türleri elde edebilirsiniz.
Veri kaynağı ekleme
DataWorks'te bir senkronizasyon görevi geliştirmeden önce gerekli veri kaynağını Veri kaynağı yapılandırma içindeki talimatları izleyerek DataWorks'e eklemeniz gerekir. Bir veri kaynağı eklerken parametrelerin anlamlarını anlamak için DataWorks konsolunda parametre açıklamalarını görüntüleyebilirsiniz.
Senkronizasyon görevleri geliştirme: Oracle iş akışı
Bir senkronizasyon görevini yapılandırmaya giriş noktası ve yordamı hakkında bilgi için aşağıdaki yapılandırma kılavuzlarına bakın.
Tek tablo toplu senkronizasyon görevini yapılandırma
Yordam için bkz. Kodsuz UI yapılandırma, Betik modu yapılandırma.
Tüm betik modu parametreleri ve örnek betikler için bkz. Ek: Örnek betikler ve parametreler.
Tek tablo gerçek zamanlı senkronizasyon görevini yapılandırma
Yordam için bkz. Gerçek zamanlı senkronizasyon görevini yapılandırma (eski).
Tam veritabanı toplu, tam ve artımlı gerçek zamanlı ve parçalı tablo gerçek zamanlı senkronizasyonunu yapılandırma
Yordam için bkz. Gerçek zamanlı tam veritabanı senkronizasyon görevlerini yapılandırma.
SSS
Oracle, PolarDB ve MySQL için gerçek zamanlı senkronizasyon görevleri tekrar tekrar hata bildiriyor
-
Birincil-standby kurulumunda veri kurtarma
Birincil-standby olağanüstü durum kurtarma kurulumunda, birincil sunucu bir standby'a yük devrettikten sonra standby, binloglar aracılığıyla birincilden sürekli olarak verileri kurtarır. Özellikle ağ gecikmesi nedeniyle çoğaltma gecikebilir. Bu nedenle, standby verileri birinciden önemli ölçüde farklı olabilir ve geçerli zamanda tam bir anlık görüntü olmayabilir.
-
Tutarlılık kısıtlamaları
Oracle, güçlü tutarlı sorgu arabirimleri sağlayabilen bir RDBMS'dir. Örneğin, bir senkronizasyon görevi başladıktan sonra başka bir yazıcı veritabanını güncellerse Oracle Reader, veritabanı anlık görüntüsü davranışı nedeniyle yeni verileri yakalamaz.
Bu tutarlılık davranışı tek iş parçacıklı bir Oracle Reader için geçerlidir. Yapılandırmanıza göre eşzamanlı çıkarma kesinlikle tutarlılığı garanti edemez.
Oracle Reader verileri splitPk ile böldüğünde birden çok eşzamanlı görev başlatır. Bunlar bir okuma işlemi paylaşmaz ve farklı zamanlarda başlar, bu nedenle ortaya çıkan veriler tam, tutarlı bir anlık görüntü değildir.
Birden çok iş parçacığı arasında tutarlı bir anlık görüntü şu anda teknik olarak mümkün değildir. Aşağıdaki mühendislik seçenekleri ödünleşimler içerir; ihtiyaçlarınıza göre birini seçin.
Veri bölme olmadan tek iş parçacığı senkronizasyonu kullanın. Daha yavaştır ancak iyi tutarlılık sağlar.
Verilerin statik kalması için diğer yazıcıları durdurun, örneğin tabloyu kilitleyerek veya standby çoğaltmayı durdurarak. Bu çevrimiçi hizmetleri etkileyebilir.
-
Veritabanı kodlaması
Oracle Reader verileri JDBC kullanarak çıkarır. JDBC farklı kodlamaları dahili olarak işler ve dönüştürür, bu nedenle bir kodlama belirtmeniz gerekmez.
-
Artımlı senkronizasyon
Oracle Reader verileri JDBC SELECT deyimleriyle çıkarır. Artımlı çıkarma için
SELECT…WHERE…kullanabilirsiniz:Çevrimiçi bir uygulama veritabanına yazdığında ekleme, güncelleme ve mantıksal silme işlemleri için modify değerini değişiklik zaman damgasına ayarlar. Oracle Reader, önceki senkronizasyon zaman damgasından sonra bir WHERE koşulu kullanabilir.
Yalnızca ekleme yapan kayıtlar için önceki aşamadaki maksimum otomatik artış ID'sine dayalı bir WHERE koşulu kullanın.
Ekleme ve güncellemeleri ayıran hiçbir iş alanı yoksa Oracle Reader artımlı olarak senkronize edemez ve tüm verileri senkronize etmelidir.
-
SQL güvenliği
Oracle Reader, bir SELECT çıkarma deyimi yazmanıza olanak tanıyan querySql sağlar. Oracle Reader, querySql güvenliğini doğrulamaz.
Ek: Örnek betikler ve parametreler
Kod düzenleyiciyi kullanarak toplu senkronizasyon görevini yapılandırma
Kod düzenleyiciyi kullanarak bir toplu senkronizasyon görevi yapılandırmak istiyorsanız betikteki ilgili parametreleri birleşik betik biçimi gereksinimlerine göre yapılandırmanız gerekir. Daha fazla bilgi için bkz. Betik modu yapılandırma. Aşağıdaki bilgiler, kod düzenleyiciyi kullanarak bir toplu senkronizasyon görevi yapılandırırken veri kaynakları için yapılandırmanız gereken parametreleri açıklar.
Reader örnek betiği
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "oracle",
"parameter": {
"selectedDatabase": "AUTOTEST",
"indexes": [],
"datasource": "oracle_test",
"envType": 0,
"useSpecialSecret": true,
"column": [
"id"
],
"where": "",
"splitPk": "id",
"encoding": "UTF-8",
"table": "AUTOTEST.table01"
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "odps",
"parameter": {
},
"name": "Writer",
"category": "writer"
},
{
"name": "Processor",
"stepType": null,
"category": "processor",
"copies": 1,
"parameter": {
"nodes": [],
"edges": [],
"groups": [],
"version": "2.0"
}
}
],
"setting": {
"executeMode": null,
"errorLimit": {
"record": ""
},
"speed": {
"concurrent": 2,
"throttle": false
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Reader betik parametreleri
Parametre | Açıklama | Gerekli | Varsayılan değer |
datasource | Veri kaynağı adı. Betik modunda bir veri kaynağı ekleyebilirsiniz. Değer, eklenen veri kaynağının adıyla eşleşmelidir. | Evet | Yok |
selectedDatabase | Senkronize edilecek veritabanının şeması. | Evet | Yok |
table |
Not Örneğin, selectedDatabase değeri | Evet | Yok |
column | Yapılandırılan tablodan senkronize edilecek sütunlar, JSON dizisi olarak açıklanır. Varsayılan olarak tüm sütunlar seçilir, örneğin ["*"].
| Evet | Yok |
splitFactor | Veri parçası sayısını ayarlayan bir bölme faktörü. Eşzamanlı görevlerle veriler concurrency × splitFactor parçaya bölünür. Örneğin, concurrency = 5 ve splitFactor = 5, beş eşzamanlı iş parçacığı arasında 5 × 5 = 25 parça üretir. Not Önerilen aralık: 1 ila 100. Aşırı büyük bir değer bellek yetersizliği hatasına neden olabilir. | Hayır | 5 |
splitMode | Bölme modu seçenekleri:
Not splitMode'u splitPk ile birlikte kullanın.
| Hayır | randomSampling |
splitPk | Oracle Reader veri çıkarırken splitPk belirtmek, verileri splitPk tarafından temsil edilen alana göre bölmek istediğiniz anlamına gelir. Senkronizasyon, verimliliği artırmak için eşzamanlı görevler başlatır.
Not Bir görünüm için ROWID, splitPk olarak kullanılamaz. | Hayır | Yok |
where | Filtre koşulu. Oracle Reader, belirtilen column, table ve where koşuluna göre SQL'i birleştirir ve verileri bu SQL ile çıkarır. Test için WHERE değerini row_number() olarak ayarlayın.
| Hayır | Yok |
querySql (yalnızca gelişmiş mod; sihirbaz modu desteklenmez) | WHERE koşulu filtrenizi açıklayamadığında özel SQL yazmak için querySql kullanın. Veri Entegrasyonu daha sonra table ve column ve diğer ayarları yoksayar, verileri doğrudan querySql ile filtreler. Örneğin, birden çok tabloyu birleştirmek için | Hayır | Yok |
fetchSize | Eklenti ve veritabanı sunucusu tarafından her partide alınan kayıt sayısı. Bu, ağ etkileşimlerini kontrol eder ve çıkarma performansını önemli ölçüde artırabilir. Not Aşırı büyük bir fetchSize (> 2.048) senkronizasyon sırasında bellek yetersizliği (OOM) hatasına neden olabilir. | Hayır | 1.024 |
Writer örnek betiği
{ "type":"job", "version":"2.0",//Sürüm numarası. "steps":[ { "stepType":"stream", "parameter":{}, "name":"Reader", "category":"reader" }, { "stepType":"oracle",//Eklenti adı. "parameter":{ "postSql":[],//Senkronizasyondan sonra çalıştırılacak SQL deyimleri. "datasource":"", "session":[],//Veritabanı bağlantı oturumu parametreleri. "column":[//Alanlar. "id", "name" ], "encoding":"UTF-8",//Kodlama biçimi. "batchSize":1024,//Tek partide gönderilen kayıt sayısı. "table":"",//Tablo adı. "preSql":[]//Senkronizasyondan önce çalıştırılacak SQL deyimleri. }, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"//Hatalı kayıt sayısı. }, "speed":{ "throttle":true,//Throttle false olduğunda mbps yoksayılır ve aktarım hızı sınırsızdır; true olduğunda aktarım hızı sınırlıdır. "concurrent":1, //Görev eşzamanlılığı. "mbps":"12"//Hız sınırı. Burada 1 mbps = 1 MB/s'ye eşittir. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }
Writer betik parametreleri
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|