

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Mengelola penanganan kesalahan Babelfish dengan escape hatch
<a name="babelfish-strict"></a>

Babelfish meniru perilaku SQL untuk aliran kontrol dan status transaksi bila memungkinkan. Ketika Babelfish menemukan kesalahan, layanan ini menampilkan kode kesalahan yang mirip dengan kode kesalahan SQL Server. Jika Babelfish tidak dapat memetakan kesalahan menjadi kode SQL Server, layanan ini menampilkan kode kesalahan tetap (`33557097`) dan mengambil tindakan spesifik berdasarkan jenis kesalahan, sebagai berikut:
+ Untuk kesalahan waktu kompilasi, Babelfish akan melakukan rollback pada transaksi.
+ Untuk kesalahan runtime, Babelfish mengakhiri batch dan melakukan rollback pada transaksi.
+ Untuk kesalahan protokol antara klien dan server, tidak akan ada rollback pada transaksi.

Jika kode kesalahan tidak dapat dipetakan menjadi kode yang setara dan kode untuk kesalahan serupa tersedia, kode kesalahan akan dipetakan menjadi kode alternatif. Misalnya, perilaku yang menyebabkan kode SQL Server `8143` dan `8144` dipetakan menjadi `8143`.

Kesalahan yang tidak dapat dipetakan tidak mematuhi konsep `TRY... CATCH`.

Anda dapat menggunakan `@@ERROR` untuk menampilkan kode kesalahan SQL Server, atau fungsi `@@PGERROR` untuk menampilkan kode kesalahan PostgreSQL. Anda juga dapat menggunakan fungsi `fn_mapped_system_error_list` untuk menampilkan daftar kode kesalahan yang dipetakan. Untuk informasi tentang kode kesalahan PostgreSQL, lihat [situs web PostgreSQL](https://www.postgresql.org/docs/current/errcodes-appendix.html).

## Memodifikasi pengaturan escape hatch Babelfish
<a name="babelfish-escape_hatches"></a>

Untuk menangani pernyataan yang mungkin gagal, Babelfish mendefinisikan opsi tertentu yang disebut escape hatch. *Escape hatch* adalah opsi yang menentukan perilaku Babelfish ketika menemukan fitur atau sintaks yang tidak didukung.

Anda dapat menggunakan prosedur tersimpan `sp_babelfish_configure` untuk mengontrol pengaturan escape hatch. Gunakan skrip untuk mengatur escape hatch ke `ignore` atau `strict`. Jika disetel ke `strict`, Babelfish menampilkan kesalahan yang perlu Anda perbaiki sebelum melanjutkan.

Untuk menerapkan perubahan pada sesi saat ini dan pada tingkat klaster, sertakan kata kunci `server`.

Penggunaannya dapat dilihat sebagai berikut:
+ Untuk mencantumkan semua escape hatch dan statusnya, serta informasi penggunaan, jalankan `sp_babelfish_configure`.
+ Untuk membuat daftar penetasan escape bernama dan nilainya, untuk sesi saat ini atau seluruh cluster, jalankan perintah `sp_babelfish_configure '{{hatch_name}}'` di mana pengenal satu atau `{{hatch_name}}` lebih lubang escape. {{hatch\_name}}dapat menggunakan wildcard SQL, seperti '%'.
+ Untuk mengatur satu escape hatch atau lebih ke nilai yang ditentukan, jalankan `sp_babelfish_configure ['{{hatch_name}}' [, 'strict'|'ignore' [, 'server']]`. Untuk membuat pengaturan menjadi permanen di tingkat klaster, sertakan kata kunci `server`, seperti yang ditunjukkan sebagai berikut:

  ```
  EXECUTE sp_babelfish_configure 'escape_hatch_unique_constraint', 'ignore', 'server'
  ```

  Untuk mengaturnya hanya untuk sesi ini, jangan gunakan `server`.
+ Untuk mengatur ulang semua escape hatch ke nilai default-nya, jalankan `sp_babelfish_configure 'default'` (Babelfish versi 1.2.0 dan yang lebih tinggi). 

String yang mengidentifikasi hatch dapat mencakup wildcard SQL. Misalnya, yang berikut ini menetapkan semua escape hatch sintaks ke `ignore` untuk klaster Aurora PostgreSQL.

```
EXECUTE sp_babelfish_configure '%', 'ignore', 'server'
```

Dalam tabel berikut, Anda dapat menemukan deskripsi dan nilai default untuk escape hatch Babelfish yang telah ditentukan sebelumnya.


| Escape hatch | Deskripsi | Default | 
| --- | --- | --- | 
| escape\_hatch\_checkpoint | Memungkinkan penggunaan pernyataan CHECKPOINT dalam kode prosedural, tetapi pernyataan CHECKPOINT saat ini tidak diterapkan. | abaikan | 
| escape\_hatch\_constraint\_name\_for\_default | Mengontrol perilaku Babelfish yang terkait dengan nama batasan default. | abaikan | 
| escape\_hatch\_database\_misc\_options | Mengontrol perilaku Babelfish terkait dengan opsi berikut pada CREATE DATABASE: CONTAINMENT, DB\_CHAINING, TRUSTWORTHY, PERSISTENT\_LOG\_BUFFER. | abaikan | 
| escape\_hatch\_for\_replication | Mengontrol perilaku Babelfish yang terkait dengan klausa [NOT] FOR REPLICATION saat membuat atau mengubah tabel. | ketat | 
| escape\_hatch\_fulltext | Mengontrol perilaku Babelfish yang terkait dengan fitur FULLTEXT, seperti DEFAULT\_FULLTEXT\_LANGUAGE di DATABASE, CREATE FULLTEXT INDEX, atau sp\_FULLTEXT\_database. CREATE/ALTER  | abaikan | 
| escape\_hatch\_ignore\_dup\_key | Mengontrol perilaku Babelfish yang terkait dengan CREATE/ALTER TABLE dan CREATE INDEX. Ketika IGNORE\_DUP\_KEY=ON, memunculkan kesalahan saat disetel ke `strict` (default) atau mengabaikan kesalahan saat disetel ke `ignore` (Babelfish versi 1.2.0 dan lebih tinggi).  | ketat | 
| escape\_hatch\_index\_clustering | Mengontrol perilaku Babelfish yang terkait dengan kata kunci CLUSTERED atau NONCLUSTERED untuk indeks dan batasan PRIMARY KEY atau UNIQUE. Ketika CLUSTERED diabaikan, indeks atau batasan masih dibuat seolah-olah NONCLUSTERED ditentukan. | abaikan | 
| escape\_hatch\_index\_columnstore | Mengontrol perilaku Babelfish yang terkait dengan klausa COLUMNSTORE. Jika Anda menentukan`ignore`, Babelfish membuat indeks reguler B-tree . | ketat | 
| escape\_hatch\_join\_hints | Mengontrol perilaku kata kunci dalam operator JOIN: LOOP, HASH, MERGE, REMOTE, REDUCE, REDISTRIBUTE, REPLICATE. | abaikan | 
| escape\_hatch\_language\_non\_english | Mengontrol perilaku Babelfish yang terkait dengan bahasa selain bahasa Inggris untuk pesan di layar. Babelfish saat ini hanya mendukung `us_english` untuk pesan di layar. SET LANGUAGE mungkin menggunakan variabel yang berisi nama bahasa, sehingga bahasa sebenarnya yang disetel hanya dapat dideteksi pada runtime. | ketat | 
| escape\_hatch\_login\_hashed\_password | Ketika diabaikan, menekan kesalahan untuk kata kunci `HASHED` untuk `CREATE LOGIN` dan `ALTER LOGIN`. | ketat | 
| escape\_hatch\_login\_misc\_options | Ketika diabaikan, menekan kesalahan untuk kata kunci lain selain `HASHED`, `MUST_CHANGE`, `OLD_PASSWORD`, dan `UNLOCK` untuk `CREATE LOGIN` dan `ALTER LOGIN`. | ketat | 
| escape\_hatch\_login\_old\_password | Ketika diabaikan, menekan kesalahan untuk kata kunci `OLD_PASSWORD` untuk `CREATE LOGIN` dan `ALTER LOGIN`. | ketat | 
| escape\_hatch\_login\_password\_must\_change | Ketika diabaikan, menekan kesalahan untuk kata kunci `MUST_CHANGE` untuk `CREATE LOGIN` dan `ALTER LOGIN`. | ketat | 
| escape\_hatch\_login\_password\_unlock | Ketika diabaikan, menekan kesalahan untuk kata kunci `UNLOCK` untuk `CREATE LOGIN` dan `ALTER LOGIN`. | ketat | 
| escape\_hatch\_nocheck\_add\_constraint | Mengontrol perilaku Babelfish yang terkait dengan klausa WITH CHECK atau NOCHECK untuk batasan. | ketat | 
| escape\_hatch\_nocheck\_existing\_constraint | Mengontrol perilaku Babelfish yang terkait dengan klausa FOREIGN KEY atau CHECK untuk batasan.  | ketat | 
| escape\_hatch\_query\_hints | Mengontrol perilaku Babelfish yang terkait dengan petunjuk kueri. Ketika opsi ini diatur untuk mengabaikan, server mengabaikan petunjuk yang menggunakan klausa OPTION (...) untuk menentukan aspek pemrosesan kueri. Contohnya termasuk SELECT FROM ... OPTION(MERGE JOIN HASH, MAXRECURSION 10)). | abaikan | 
|  escape\_hatch\_rowversion | Mengontrol perilaku tipe data ROWVERSION dan TIMESTAMP. Untuk informasi penggunaan, lihat [Menggunakan fitur Babelfish dengan implementasi terbatas](babelfish-compatibility.tsql.limited-implementation.md). | ketat | 
| escape\_hatch\_schemabinding\_function | Mengontrol perilaku Babelfish terkait dengan klausul WITH SCHEMABINDING. Secara default, klausa WITH SCHEMABINDING diabaikan ketika ditentukan dengan perintah CREATE atau ALTER FUNCTION.  | abaikan | 
| escape\_hatch\_schemabinding\_procedure | Mengontrol perilaku Babelfish terkait dengan klausul WITH SCHEMABINDING. Secara default, klausa WITH SCHEMABINDING diabaikan ketika ditentukan dengan perintah CREATE atau ALTER PROCEDURE.  | abaikan | 
| escape\_hatch\_rowguidcol\_column | Mengontrol perilaku Babelfish yang terkait dengan klausa ROWGUIDCOL saat membuat atau mengubah tabel. | ketat | 
| escape\_hatch\_schemabinding\_trigger | Mengontrol perilaku Babelfish terkait dengan klausul WITH SCHEMABINDING. Secara default, klausa WITH SCHEMABINDING diabaikan ketika ditentukan dengan perintah CREATE atau ALTER TRIGGER. | abaikan | 
| escape\_hatch\_schemabinding\_view | Mengontrol perilaku Babelfish terkait dengan klausul WITH SCHEMABINDING. Secara default, klausa WITH SCHEMABINDING diabaikan ketika ditentukan dengan perintah CREATE atau ALTER VIEW. | abaikan | 
| escape\_hatch\_session\_settings | Mengontrol perilaku Babelfish terhadap pernyataan SET tingkat sesi yang tidak didukung. | abaikan | 
| escape\_hatch\_showplan\_all | Mengontrol perilaku Babelfish yang terkait dengan SET SHOWPLAN\_ALL dan SET STATISTICS PROFILE. Ketika diatur untuk mengabaikan, perilakunya seperti SET BABELFISH\_SHOWPLAN\_ALL dan SET BABELFISH\_STATISTICS PROFILE; ketika disetel ke ketat, pengabaiannya dilakukan secara diam-diam. | ketat | 
| escape\_hatch\_storage\_on\_partition | Mengontrol perilaku Babelfish yang terkait dengan klausa `ON partition_scheme column ` saat mendefinisikan partisi. Babelfish saat ini tidak menerapkan partisi. | ketat | 
| escape\_hatch\_storage\_options | Escape hatch pada opsi penyimpanan apa pun yang digunakan dalam CREATE, ALTER DATABASE, TABLE, INDEX. Ini termasuk klausa (LOG) ON, TEXTIMAGE\_ON, FILESTREAM\_ON yang menentukan lokasi penyimpanan (partisi, grup file) untuk tabel, indeks, dan batasan, dan juga untuk basis data. Pengaturan escape hatch ini berlaku untuk semua klausa ini (termasuk ON [PRIMARY] dan ON "DEFAULT"). Pengecualiannya adalah ketika partisi ditentukan untuk tabel atau indeks dengan ON partition\_scheme (kolom). | abaikan | 
| escape\_hatch\_table\_hints | Mengontrol perilaku petunjuk tabel yang ditentukan menggunakan klausa WITH (...).  | abaikan | 
| escape\_hatch\_unique\_constraint | Ketika diatur ke ketat, perbedaan semantik yang tidak jelas antara SQL Server dan PostgreSQL dalam menangani nilai NULL pada kolom yang diindeks dapat menimbulkan kesalahan. Perbedaan semantik hanya muncul dalam kasus penggunaan yang tidak realistis, sehingga Anda dapat mengatur escape hatch ini menjadi 'abaikan' untuk menghindari melihat kesalahan. <br />Usang dari versi berikut: 3.6.0 dan versi yang lebih tinggi, 4.2.0 dan versi yang lebih tinggi | ketat | 