Doküman menüsü

Sürüm 3.0.0

Kaynak Yapısı ve Anahtar Kontrolleri

Kaynak şema ve anahtar denetimleri: Tablo varlığı, depolama motoru, karakter setleri ve birincil anahtar kısıtları.

TABLE_EXISTENCE_CHECK

Her görev tablosu kaynak şemada temel tablo (base table) olarak bulunmalıdır. Bir görünüm (view) veya başka bir nesne reddedilir ve türüyle birlikte belirtilir; örneğin orders(VIEW). Hesabın kaynak şema üzerinde hiçbir yetkisi yoksa şema bu hesaba görünmez. Bu durumda SOURCE_SELECT_PERMISSION_CHECK yerine bu kontrol başarısız olur.

Çözüm: Tablo adını düzeltin veya source.database ayarını doğru şemaya yönlendirin. Görünüm yerine görünümün dayandığı tabloyu arşivleyin. Tablo adlarını küçük harfle saklayan bir sunucuda görevin tablo adlarını da küçük harfle yazın.

STORAGE_ENGINE_CHECK

Kaynaktaki her görev tablosu InnoDB olmalıdır. Depolama motoru NULL olarak bildirilen bir temel tablo (genellikle bozulmuş veya motoru bilinmeyen bir tablo) <table>(<unknown>) olarak reddedilir.

Çözüm: ALTER TABLE <table> ENGINE=InnoDB;

COLUMN_CHARSET_CHECK

Çalıştırmanın metin olarak okuduğu veya yazdığı bir görev kolonu, utf8mb4 oturumundan birebir korunarak geçemeyen bir karakter seti kullanıyor. Böyle bir karakter setinde iki karakter tek karakter olarak okunabilir ya da bir karakter ? olarak okunur. Bu durumda iki anahtar birleşir ve metin değişmiş olarak geri yazılır; üstelik tüm doğrulamalar başarılı görünür. Kontrol, herhangi bir satır okunmadan önce çalışır:

COLUMN_CHARSET_CHECK: A job column uses a character set that GoArchive cannot read and write back
exactly through its utf8mb4 session, so keys could merge and text change without notice (tables:
[children.code(cp932) destination:notes.body(sjis)])
Görev TürüKontrol Edilen Kolonlar
archive, copy-onlyKaynaktaki her görev tablosunun tüm kolonları ve hedefteki aynı adlı her kolon
purgeKaynakta, her görev tablosunun birincil anahtar ve foreign_key kolonları

ENUM ve SET kolonları kontrol edilir. Sayılar, zaman (temporal) tipleri, ikili (binary) metinler ve JSON bir karakter setine sahip olmadığı için kontrol edilmez. Kontrol, karşılaştırma kuralını (collation) değil karakter setini değerlendirir ve ön kontroller atlandığında da çalışır.

Çözüm: Kolonu her iki sunucuda da utf8mb4 karakter setine dönüştürün veya tabloyu görevin dışında bırakın. Desteklenen ve reddedilen karakter setleri Karakter Setleri sayfasında listelenmiştir.

Birincil Anahtar Kontrolleri

GoArchive her tablonun birincil anahtarını (primary key) veritabanından okur ve tüm SQL sorgularını bu anahtardan oluşturur. Yapılandırmadaki primary_key ise anahtarı belgeler: Veritabanıyla karşılaştırılır, ancak hiçbir sorguya girmez.

PRIMARY_KEY_CHECK

Bir görev tablosunda PRIMARY KEY tanımlı değil; bu nedenle tablonun satırları tekil olarak adreslenemez.

Çözüm: Tabloya bir PRIMARY KEY ekleyin.

KEY_TYPE_UNSUPPORTED

Birincil anahtar kolonlarından biri, satırları tekil olarak tanımlayamayan bir tipte. İzin verilen anahtar tipleri:

  • tam sayı (integer) tipleri ve DECIMAL;
  • önek uzunluğu (prefix length) olmadan CHAR, VARCHAR, BINARY ve VARBINARY;
  • DATE, DATETIME, TIMESTAMP, TIME ve YEAR.

FLOAT ve DOUBLE yaklaşık değer tutar, ENUM ve SET iç indekslerine göre sıralanır, BIT ise desteklenmez. Zaman tipindeki anahtar değerlerinin de geçerli olması gerekir (Sınırlar ve Kısıtlamalar ).

Çözüm: Başka bir kök tablo seçin veya tabloyu görevin dışında bırakın.

SQL sorguları anahtarlardan oluşturulduğu için PRIMARY_KEY_CHECK ve KEY_TYPE_UNSUPPORTED, ön kontroller atlandığında bile çalışır.

PK_COLUMN_CASE_CHECK

Yapılandırmadaki primary_key, anahtarın kolonlarını doğru adlandırıyor ancak büyük/küçük harf açısından farklı yazıyor; örneğin LOG_ID yerine log_id. Çözümü farklı olduğu için bu hata PK_COLUMN_CHECK kontrolünden önce bildirilir.

Çözüm: Her kolon adını veritabanındaki yazımıyla birebir aynı şekilde yazın.

PK_COLUMN_CHECK

Yapılandırmadaki primary_key, tablonun PRIMARY KEY tanımıyla eşleşmiyor: Bir kolon eksik, fazla veya anahtar sırasının dışında.

Çözüm: Tüm anahtar kolonlarını anahtar sırasıyla listeleyin. Bileşik anahtar (composite key) bir liste olarak yazılır: primary_key: [order_id, line_no].

RELATION_KEY_CHECK

Her foreign_key kolonu kendi tablosunda bulunmalı ve başvurduğu ebeveyn anahtar kolonuyla (references, konuma göre) uyumlu olmalıdır:

  • işaretlilik (signedness) durumu aynı olan iki tam sayı tipi;
  • iki DECIMAL tipi;
  • karakter seti ve karşılaştırma kuralı aynı olan iki karakter tipi;
  • BINARY(n) ile BINARY(n) veya VARBINARY ile VARBINARY;
  • kesirli hassasiyeti (fractional precision) aynı olan aynı zaman tipi.

NULL değer alabilen (nullable) bir foreign_key kolonuna izin verilir: Bu kolonda NULL bulunan bir alt kayıt hiçbir ebeveynle eşleşmez.

Çözüm: foreign_key veya references değerini düzeltin ya da kolon tiplerini uyumlu hale getirin.