Bu konuda veri değişikliği taleplerinde karşılaşılan yaygın hatalar ve çözümleri açıklanmaktadır.
Güvenlik kuralları tarafından 'XXXX' türündeki komut yasaklandı
Hata mesajı:
SQL type check failed. Based on security rule settings, direct execution of command type 'XXXX' is prohibited. To proceed, contact a DBA or administrator to adjust the rules. You can find the rules at: Security and Disaster Recovery -> Security Rules -> Edit -> SQL Correct -> SQL Execution Rules. No rule was found for this command type, so execution is denied by default.
Neden: Güvenli iş birliği modunda veritabanına bağlı güvenlik kuralı, SQL komutunun çalıştırılmasına veya gönderilmesine izin vermez. Bu nedenle sistem komutu engeller.
Çözüm: Engellenen SQL komutları KNOWN (DMS tarafından tanınan komutlar) ve UNKNOWN (DMS tarafından tanınmayan komutlar) olarak sınıflandırılır. Komut türüne göre uygun çözümü uygulayın.
-
KNOWN
DMS bu komutu tanır ancak mevcut güvenlik kuralı varsayılan olarak yürütülmesini reddeder. Güvenlik kuralını ayarlamak için Veritabanı Yöneticinizle (DBA) veya yöneticiyle iletişime geçin. Kuralı ayarlamak için aşağıdaki adımları izleyin:
-
Güvenlik kuralı setinin adını bulun.
Data Change Ticket Details sayfasına gidin ve sağ üst köşede bulunan Operation Logs öğesine tıklayın. Operation Logs iletişim kutusunda ilişkili güvenlik kuralı setinin adını bulmak için Action Details sütununu kontrol edin (örneğin, POC Production Rules).
-
Güvenlik kuralını ayarlayın.
DMS üzerinde oturum açın.
Üst menü çubuğunda yolunu izleyin.
security rules sekmesinde hedef kural setini bulun ve Actions sütunundaki Edit seçeneğine tıklayın.
Sol gezinme bölmesinde SQL Correct seçeneğine tıklayın.
Hata mesajına göre bir Check Point seçin. Örneğin önceki hata örneğinde Check Point değerini SQL Execution Rules olarak ayarlayın.
-
Ayarlanacak güvenlik kuralını seçin ve Actions sütunundaki Edit seçeneğine tıklayın.
NotGüvenlik kuralını hata mesajındaki komutun SQL dil türüne göre seçin. Örneğin komut türü CREATE_INDEX ise DDL ile ilgili bir güvenlik kuralı seçmeniz gerekir.
-
Hata mesajındaki SQL türünü ilgili güvenlik kuralının DSL koduna ekleyin.
Örneğin hata
CREATE_INDEXkomut türünün yasaklandığını belirtiyorsa bu komut türünü DDL talebi gönderimine yönelik ilgili kurala eklemeniz gerekir.Edit Rule iletişim kutusunda Checkpoints değerini SQL Execution Rules olarak ayarlayın ve DDL must be submitted through a ticket adlı kuralı bulun. Kuralın DSL kodunda
@fac.sql_typelistesininCREATE_INDEXgibi DDL türlerini içerdiğini ve karşılık gelen eylemin@act.allow_submit(SQL türünün talep üzerinden çalıştırılmasına izin verir) olduğunu doğrulayın. Ardından Submit seçeneğine tıklayın. Submit seçeneğine tıklayın.
Değişiklikleri kaydettikten sonra talep ayrıntıları sayfasına dönün. Ön denetim bölümünde Retry seçeneğine tıklayın. DMS ardından tür denetimini yeniden çalıştırır.
-
-
UNKNOWN
Gönderilen SQL ifadesinde hata olup olmadığını kontrol edin. Hata varsa ön denetim bölümünde Modify SQL seçeneğine tıklayın. İfadeyi düzelttikten sonra denetimi yeniden çalıştırmak için Retry seçeneğine tıklayın.
SQL ifadesi doğruysa UNKNOWN olarak işaretlenen ifadeyi belirlemek için precheck bölümündeki View Details seçeneğine tıklayın. DBA'nızla veya yöneticinizle iletişime geçerek ifadenin DMS'de yürütülmesine izin veren bir güvenlik kuralına eklenmesini sağlayın. Kural güncellendikten sonra Retry seçeneğine tıklayın. Kuralın nasıl ayarlanacağına ilişkin talimatlar için bkz. Güvenlik kuralını ayarlama.
Etkilenen satırlar ve sözdizimi denetimi hataları
Hata mesajı:
Failed to check the number of affected rows. Syntax check failed. Error message: ERROR. pos 37, line 1, column 31, token WHERE
Neden: Bir veri değişikliği talebi için ön denetim aşamasında DMS taranan satır sayısını kontrol ederek SQL ifadesini sözdizimi hataları açısından yeniden denetler.
Çözüm: Gönderilen SQL ifadesinin sözdizimini kontrol edin.
SQL sözdizimi yanlışsa ifadeyi değiştirin ve ardından ön denetim bölümünde Retry seçeneğine tıklayın. DMS ardından taranan satır sayısını yeniden kontrol eder.
SQL sözdiziminin doğru olduğundan eminseniz ön denetim bölümünde Check the number of scanned rows yanındaki Skip seçeneğine tıklayarak bu hatayı atlayabilirsiniz.