Ikuti wisata Access melalui SQL Server

Ikuti wisata Access melalui SQL Server

Setelah memigrasikan data dari Access ke SQL Server, Anda kini memiliki database klien/server yang dapat berupa solusi lokal atau cloud Azure hibrid. Bagaimanapun, Access kini menjadi lapisan presentasinya dan SQL Server adalah lapisan datanya. Sekarang adalah saat yang tepat untuk memikirkan kembali aspek-aspek solusi Anda, terutama kinerja kueri, keamanan, dan keberlangsungan bisnis sehingga Anda dapat meningkatkan dan menskalakan solusi database.

Akses lokal dan di awan

Bagi pengguna Access, SQL Server dan dokumentasi Azure mungkin akan terasa sulit di awal. Oleh karena itu, diperlukan panduan bagi Anda untuk melihat beberapa sorotan yang cukup penting. Setelah menyelesaikan panduan ini, Anda pun siap menikmati kecanggihan teknologi database dan menjelajah lebih jauh ke depannya.

Dalam Artikel ini

Manajemen Database

Mendorong keberlangsungan bisnis

Keamanan SQL Server

Menangani masalah privasi

Membuat snapshot database

Kontrol konkurensi

Kueri dan yang terkait

Meningkatkan kinerja kueri

Cara membuat kueri

Menambahkan kunci dan indeks

Melakukan transaksi

Menggunakan batasan dan pemicu

Tipe Data

Menggunakan kolom terkomputasi

Membuat stempel waktu pada data Anda

Mengelola objek berukuran besar

Lainnya

Bekerja dengan data hierarkis

Memanipulasi teks JSON



Sumber Daya

Mendorong keberlangsungan bisnis

Untuk solusi Access, Anda ingin tetap menggunakannya tanpa masalah, tetapi opsi yang tersedia dengan database ujung belakang Access terbatas. Penting untuk mencadangkan database Access Anda untuk melindungi data, tetapi hal ini mengharuskan pengguna Anda offline. Ada juga waktu henti tidak terencana yang disebabkan oleh pemutakhiran pemeliharaan perangkat keras/perangkat lunak, pemadaman listrik atau jaringan, kerusakan perangkat keras, pelanggaran keamanan, atau bahkan serangan cyber. Untuk meminimalkan waktu henti dan dampaknya pada bisnis, Anda dapat mencadangkan database SQL Server saat sedang digunakan. Selain itu, SQL Server juga menawarkan strategi ketersediaan tinggi (HA) dan pemulihan bencana (DR). Dua teknologi gabungan ini disebut HADR. Untuk informasi selengkapnya, lihat Keberlangsungan bisnis dan pemulihan database dan Mendorong keberlangsungan bisnis dengan SQL Server (e-book).

Pencadangan ketika sedang digunakan

SQL Server menggunakan proses pencadangan online yang dapat terjadi saat database sedang dijalankan. Anda dapat melakukan pencadangan penuh, pencadangan sebagian, atau pencadangan file. Pencadangan menyalin data dan log transaksi untuk memastikan penyelesaian operasi pemulihan. Khususnya dalam solusi lokal, waspadai perbedaan antara opsi pemulihan sederhana dan penuh serta pengaruhnya pada pertumbuhan log transaksi. Untuk informasi selengkapnya, lihat Model Pemulihan.

Sebagian besar operasi pencadangan terjadi secara langsung, kecuali operasi penyusutan database dan manajemen file. Sebaliknya, jika Anda mencoba membuat atau menghapus file database saat operasi pencadangan sedang berlangsung, operasi akan gagal. Untuk informasi selengkapnya, lihat Gambaran Umum Pencadangan.

HADR

Dua teknik paling umum untuk mencapai ketersediaan tinggi dan keberlangsungan bisnis adalah pencerminan dan pengklusteran. SQL Server mengintegrasikan teknologi pencerminan dan pengklusteran dengan "Instans Kluster Failover Selalu Aktif" dan "Grup Ketersediaan Selalu Aktif".

Pencerminan adalah solusi keberlangsungan tingkat database yang mendukung failover hampir secara langsung dengan mempertahankan database siaga, salinan lengkap atau cermin dari database yang aktif di perangkat keras terpisah. Solusi ini dapat berjalan dalam mode sinkron (keamanan tinggi), dengan transaksi masuk yang dilakukan ke semua server secara bersamaan, atau dalam mode asinkron (kinerja tinggi), dengan transaksi masuk yang dilakukan pada database aktif, lalu disalin ke cermin pada beberapa kasus yang telah ditentukan. Pencerminan adalah solusi tingkat database dan hanya berfungsi dengan database yang menggunakan model pemulihan penuh.

Pengklusteran adalah solusi tingkat server yang menggabungkan server ke dalam penyimpanan data tunggal yang terlihat seperti instans tunggal bagi pengguna. Pengguna terhubung ke instans dan tidak perlu tahu server mana dalam instans yang saat ini sedang aktif. Jika satu server gagal atau harus dialihkan ke offline untuk pemeliharaan, pengalaman pengguna tidak akan berubah. Setiap server dalam kluster dipantau oleh pengelola kluster menggunakan heartbeat sehingga dapat mendeteksi ketika server yang aktif dalam kluster menjadi offline, lalu mencoba untuk beralih ke server berikutnya dalam kluster meskipun ada penundaan waktu variabel saat peralihan terjadi.

Untuk informasi selengkapnya, lihat Instans Kluster Failover Selalu Aktif dan Grup ketersediaan Selalu Aktif: solusi ketersediaan tinggi dan pemulihan bencana.

Atas Halaman

Keamanan SQL Server

Meskipun Anda dapat melindungi database Access menggunakan Pusat Kepercayaan dan dengan mengenkripsi database, SQL Server memiliki fitur keamanan yang lebih canggih. Mari kita lihat tiga keunggulan bagi pengguna Access. Untuk informasi selengkapnya, lihat Mengamankan SQL Server.

Autentikasi database

Ada empat metode autentikasi database di SQL Server yang masing-masing dapat Anda tentukan dalam string koneksi ODBC. Untuk informasi selengkapnya, lihat Menautkan ke atau mengimpor data dari Database Azure SQL Server. Setiap metode memiliki keuntungannya sendiri.

Otentikasi Windows Terpadu    Gunakan kredensial Windows untuk validasi pengguna, peran keamanan, dan membatasi pengguna ke fitur dan data. Anda dapat memanfaatkan kredensial domain dan mengelola hak pengguna dalam aplikasi dengan mudah. Jika diperlukan, masukkan Nama Prinsipal Layanan (SPN). Untuk informasi selengkapnya, lihat Memilih Mode Autentikasi.

Autentikasi SQL Server    Pengguna harus terhubung dengan kredensial yang telah diatur dalam database dengan memasukkan ID masuk dan kata sandi pada kali pertama mereka mengakses database dalam satu sesi. Untuk informasi selengkapnya, lihat Memilih Mode Autentikasi.

Autentikasi Terpadu Azure Active Directory    Sambungkan ke Database Azure SQL Server menggunakan Azure Active Directory. Setelah mengonfigurasi autentikasi Azure Active Directory, tidak ada proses masuk dan kata sandi lain yang diperlukan. Untuk informasi selengkapnya, lihat Menyambungkan ke Database SQL Menggunakan Autentikasi Azure Active Directory.

Autentikasi Kata Sandi Active Directory    Sambungkan dengan kredensial yang telah disiapkan di Azure Active Directory dengan memasukkan nama masuk dan kata sandinya. Untuk informasi selengkapnya, lihat Menyambungkan ke Database SQL Menggunakan Autentikasi Azure Active Directory.

Tips    Gunakan Deteksi Ancaman untuk menerima peringatan tentang aktivitas database tidak normal yang mengindikasikan potensi ancaman keamanan terhadap database Azure SQL Server. Untuk informasi selengkapnya, lihat Deteksi Ancaman Database SQL.

Keamanan aplikasi

SQL Server memiliki dua fitur keamanan tingkat aplikasi yang dapat Anda manfaatkan dengan Access.

Penyembunyian Data Dinamis    Menyembunyikan informasi sensitif dengan menutupinya dari pengguna yang tidak memiliki hak istimewa. Misalnya, Anda dapat menyembunyikan nomor Jaminan Sosial, baik sebagian maupun seluruhnya.

Masker data parsial

Masker data sebagian

Masker data lengkap

Masker data penuh

Ada beberapa cara untuk menentukan masker data dan Anda dapat menerapkannya ke berbagai tipe data. Penyembunyian data didasarkan pada kebijakan di tingkat tabel dan kolom bagi kumpulan pengguna tertentu dan diterapkan secara real-time pada kueri. Untuk informasi selengkapnya, lihat Penyembunyian Data Dinamis.

Keamanan Tingkat Baris    Anda dapat mengontrol akses ke baris database tertentu dengan informasi sensitif berdasarkan karakteristik pengguna menggunakan Keamanan Tingkat Baris. Sistem database menerapkan pembatasan akses ini dan hal ini membuat sistem keamanan menjadi lebih andal dan kuat.

Keamanan baris SQL Server

Terdapat dua jenis predikat keamanan:

  • Predikat filter memfilter baris dari kueri. Filter ini transparan, dan pengguna akhir tidak akan mengetahui adanya pemfilteran.

  • Predikat blok mencegah tindakan yang tidak sah dan mengeluarkan pengecualian jika tindakan tidak dapat dilakukan.

Untuk informasi selengkapnya, lihat Keamanan tingkat baris.

Melindungi Data dengan Enkripsi

Lindungi data dalam media fisik, saat transit, dan saat digunakan tanpa memengaruhi kinerja database. Untuk informasi selengkapnya, lihat Enkripsi SQL Server.

Enkripsi dalam media fisik    Untuk mengamankan data pribadi terhadap serangan media offline pada lapisan penyimpanan fisik, gunakan enkripsi dalam media fisik, atau disebut juga Enkripsi Data Transparan (TDE). Artinya, data tetap dilindungi meskipun media fisik dicuri atau dibuang dengan tidak benar. TDE melakukan enkripsi dan dekripsi pada database, cadangan, dan log transaksi secara real-time tanpa memerlukan perubahan apa pun pada aplikasi.

Enkripsi saat transit    Untuk melindungi dari pengintaian dan “serangan man-in-the-middle”, Anda dapat mengenkripsi data yang dikirimkan melalui jaringan. SQL Server mendukung Keamanan Lapisan Transportasi (TLS) 1.2 untuk komunikasi yang sangat aman. Protokol Tabular Data Stream (TDS) juga digunakan untuk melindungi komunikasi melalui jaringan yang tidak tepercaya.

Enkripsi yang digunakan pada klien    Untuk melindungi data pribadi saat sedang digunakan, “Always Encrypted” adalah fitur yang Anda butuhkan. Data pribadi dienkripsi dan didekripsi oleh driver di komputer klien tanpa mengungkapkan kunci enkripsi ke mesin database. Hasilnya, data yang dienkripsi hanya dapat dilihat oleh orang yang bertanggung jawab mengelola data tersebut, bukan pengguna dengan hak istimewa tinggi yang tidak seharusnya memiliki akses. Tergantung pada jenis enkripsi yang dipilih, Always Encrypted dapat membatasi beberapa fungsionalitas database seperti pencarian, pengelompokan, dan pengindeksan kolom terenkripsi.

Atas Halaman

Menangani masalah privasi

Kekhawatiran terkait privasi kini terjadi di seluruh dunia, dan karena itu, Uni Eropa telah menetapkan persyaratan hukum melalui Peraturan Perlindungan Data Umum (GDPR). Untungnya, ujung belakang SQL Server sangatlah sesuai untuk memenuhi persyaratan ini. Bayangkan penerapan GDPR dalam kerangka kerja tiga langkah.

GDPR adalah proses tiga langkah.

Langkah 1: Nilai dan kelola risiko kepatuhan

GDPR mewajibkan Anda mengidentifikasi dan menginventarisasi informasi pribadi yang dimiliki dalam tabel dan file. Informasi ini dapat berupa apa pun mulai dari nama, foto, alamat email, detail bank, postingan di situs web jejaring sosial, informasi medis, atau bahkan alamat IP.

Sebuah alat baru yang diintegrasikan ke SQL Server Management Studio, Penemuan dan Klasifikasi Data SQL, membantu Anda menemukan, mengklasifikasikan, memberi label, dan melaporkan data sensitif dengan menerapkan dua atribut metadata ke kolom:

  • Label    Untuk menentukan sensitivitas data.

  • Tipe informasi    Untuk memberikan detail tambahan tentang jenis data yang disimpan dalam kolom.

Mekanisme penemuan lain yang dapat Anda gunakan adalah pencarian teks lengkap, mencakup penggunaan predikat CONTAINS dan FREETEXT serta fungsi bernilai rowset seperti CONTAINSTABLE dan FREETEXTTABLE untuk digunakan dengan pernyataan SELECT. Menggunakan pencarian teks lengkap, Anda dapat mencari dalam tabel untuk menemukan kata, kombinasi kata, atau variasi kata seperti sinonim atau bentuk infleksi. Untuk informasi selengkapnya, lihat Pencarian Teks Lengkap.

Langkah 2: Lindungi informasi pribadi

GDPR mewajibkan Anda mengamankan informasi pribadi dan membatasi akses ke data tersebut. Selain langkah-langkah standar yang dilakukan untuk mengelola akses ke jaringan dan sumber daya, seperti pengaturan firewall, Anda dapat menggunakan fitur keamanan SQL Server untuk membantu mengontrol akses data:

  • Autentikasi SQL Server untuk mengelola identitas pengguna dan mencegah akses tidak sah.

  • Keamanan Tingkat Baris untuk membatasi akses ke baris dalam tabel berdasarkan hubungan antara pengguna dan data tersebut.

  • Penyembunyian Data Dinamis untuk membatasi pemaparan pada data pribadi dengan menyamarkannya dari pengguna yang tidak memiliki hak istimewa.

  • Enkripsi untuk memastikan bahwa data pribadi dilindungi selama transmisi dan penyimpanan serta dilindungi terhadap penyusupan, termasuk di sisi server.

Untuk informasi selengkapnya, lihat Keamanan SQL Server.

Langkah 3: Respons permintaan secara efisien

GDPR mewajibkan Anda menyimpan catatan pemrosesan data pribadi dan menyediakan catatan ini bagi otoritas pengawas berdasarkan permintaan. Jika terjadi masalah, termasuk rilis data yang tidak disengaja, kontrol perlindungan memungkinkan Anda merespons dengan cepat. Data harus segera tersedia saat pelaporan diperlukan. Sebagai contoh, GDPR mewajibkan pelaporan pelanggaran data pribadi kepada otoritas pengawas “tidak lebih dari 72 jam setelah diketahui.”

SQL Server 2017 membantu Anda melakukan tugas pelaporan dalam beberapa cara:

  • Audit SQL Server membantu Anda memastikan bahwa ada catatan yang persisten untuk akses database dan aktivitas pemrosesan. Fitur ini melakukan audit mendetail yang melacak aktivitas database untuk membantu Anda memahami dan mengidentifikasi potensi ancaman, dugaan penyalahgunaan, atau pelanggaran keamanan. Anda dapat melakukan forensik data dengan mudah.

  • Tabel temporal SQL Server adalah tabel pengguna versi sistem yang dirancang untuk menyimpan riwayat lengkap perubahan data. Anda dapat menggunakannya untuk pelaporan yang mudah dan analisis titik waktu.

  • Penilaian Kerentanan SQL membantu Anda mendeteksi masalah keamanan dan izin. Ketika masalah terdeteksi, Anda juga dapat menelusuri laporan pemindaian database untuk menemukan tindakan penyelesaian.

Untuk informasi selengkapnya, lihat Membuat platform kepercayaan (e-book) dan Perjalanan menuju Kepatuhan GDPR.

Atas Halaman

Membuat snapshot database

Snapshot database adalah tampilan statis yang bersifat baca saja dari database SQL Server pada satu titik waktu. Meskipun Anda dapat menyalin file database Access untuk membuat snapshot database secara efektif, Access tidak memiliki metodologi bawaan seperti SQL Server. Anda dapat menggunakan snapshot database untuk menulis laporan berdasarkan data yang ada pada saat pembuatan snapshot database. Anda juga dapat menggunakan snapshot database untuk menyimpan data historis, seperti untuk setiap kuartal keuangan yang digunakan untuk membuat laporan akhir periode. Kami merekomendasikan praktik terbaik berikut ini:

  • Beri nama snapshot    Setiap snapshot database membutuhkan nama database yang unik. Tambahkan tujuan dan jangka waktu pada nama untuk identifikasi yang lebih mudah. Misalnya, untuk membuat snapshot database AdventureWorks tiga kali sehari dengan interval 6 jam antara pukul 6 pagi hingga 6 petang dalam format 24 jam, beri nama AdventureWorks_snapshot_0600, AdventureWorks_snapshot_1200, dan AdventureWorks_snapshot_1800.

  • Batasi jumlah snapshot    Setiap snapshot database akan tetap ada sampai dihapus secara eksplisit. Karena setiap snapshot akan terus bertambah, Anda mungkin ingin menghemat ruang disk dengan menghapus snapshot lama setelah membuat yang baru. Misalnya, jika Anda membuat laporan harian, simpan snapshot database selama 24 jam, lalu hapus dan ganti dengan yang baru.

  • Hubungkan ke snapshot yang tepat    Untuk menggunakan snapshot database, ujung-depan Access harus mengetahui lokasi yang benar. Saat mengganti snapshot yang ada dengan yang baru, Anda perlu mengarahkan ulang Access ke snapshot yang baru. Tambahkan logika ke ujung-depan Access untuk memastikan Anda terhubung ke snapshot database yang benar.

Berikut adalah cara membuat snapshot database:

CREATE DATABASE AdventureWorks_dbss1800 ON  
( NAME = AdventureWorks_Data, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks_snapshot_0600' )  
AS SNAPSHOT OF AdventureWorks;  

Untuk informasi selengkapnya, lihat Snapshot Database (SQL Server).

Atas Halaman

Kontrol konkurensi

Ketika ada banyak orang yang mencoba mengubah data dalam database secara bersamaan, diperlukan sistem kontrol agar modifikasi yang dilakukan oleh satu orang tidak berdampak buruk pada perubahan orang lain. Hal ini disebut kontrol konkurensi dan ada dua strategi penguncian dasar: pesimistis dan optimistis. Penguncian dapat mencegah pengguna mengubah data dalam cara yang memengaruhi pengguna lain. Penguncian juga membantu memastikan integritas database, terutama dengan kueri yang mungkin memberikan hasil yang tidak diharapkan. Ada beberapa perbedaan penting dalam cara Access dan SQL Server menerapkan strategi kontrol konkurensi ini.

Di Access, strategi penguncian defaultnya bersifat optimistis dan memberikan kepemilikan kunci kepada orang pertama yang mencoba menulis ke data. Access menampilkan kotak dialog Konflik Penulisan kepada orang lain yang mencoba menulis ke data yang sama di waktu yang sama. Untuk mengatasi konflik ini, orang lain tersebut dapat menyimpan data, menyalinnya ke clipboard, atau membatalkan perubahan.

Anda juga dapat menggunakan properti RecordLocks untuk mengubah strategi kontrol konkurensi. Properti ini memengaruhi formulir, laporan, dan kueri serta memiliki tiga pengaturan:

  • Tanpa Kunci    Dalam formulir, pengguna dapat mencoba mengedit data yang sama secara bersamaan, tetapi kotak dialog Konflik Penulisan mungkin akan muncul. Dalam laporan, data tidak dikunci ketika laporan sedang dipratinjau atau dicetak. Dalam kueri, data tidak dikunci ketika kueri sedang dijalankan. Ini adalah cara Access menerapkan penguncian optimistis.

  • Semua Data    Semua data dalam tabel atau kueri yang mendasari dikunci saat formulir dibuka dalam tampilan Formulir atau Lembar Data, ketika laporan dipratinjau atau dicetak, atau saat kueri sedang dijalankan. Pengguna dapat membaca data selama penguncian.

  • Data yang Diedit    Untuk formulir dan kueri, halaman data akan dikunci segera setelah pengguna mulai mengedit bidang apa pun dalam data dan tetap dikunci hingga pengguna berpindah ke data lainnya. Oleh karena itu, data hanya dapat diedit oleh satu pengguna dalam satu waktu. Ini adalah cara Access menerapkan penguncian pesimistis.

Untuk informasi selengkapnya, lihat Kotak dialog Konflik Penulisan dan Properti RecordLocks.

Di SQL Server, kontrol konkurensi berfungsi sebagai berikut:

  • Pesimistis    Setelah pengguna melakukan tindakan yang menyebabkan kunci diterapkan, pengguna lain tidak dapat melakukan tindakan yang akan bertentangan dengan kunci tersebut hingga pemilik melepaskannya. Kontrol konkurensi ini biasanya digunakan di lingkungan dengan ketidakcocokan data yang tinggi.

  • Optimistis    Dalam kontrol konkurensi optimistis, pengguna tidak mengunci data ketika mereka membacanya. Ketika pengguna memperbarui data, sistem akan memeriksa apakah pengguna lain mengubah data setelah dibaca. Jika pengguna lain memperbarui data, kesalahan akan muncul. Biasanya, pengguna yang menerima kesalahan akan membatalkan transaksi dan memulai kembali. Kontrol konkurensi ini biasanya digunakan di lingkungan dengan ketidakcocokan data yang rendah.

Anda dapat menentukan tipe kontrol konkurensi dengan memilih beberapa tingkat isolasi transaksi, yang menentukan tingkat perlindungan bagi transaksi dari perubahan yang dilakukan oleh transaksi lain menggunakan pernyataan SET TRANSACTION:

 SET TRANSACTION ISOLATION LEVEL
 { READ UNCOMMITTED
    | READ COMMITTED
    | REPEATABLE READ  
    | SNAPSHOT
    | SERIALIZABLE
 }

Tingkat isolasi

Deskripsi

Baca tanpa komitmen

Transaksi diisolasi secukupnya hanya untuk memastikan bahwa data yang rusak secara fisik tidak terbaca.

Baca dengan komitmen

Transaksi dapat membaca data yang sebelumnya dibaca oleh transaksi lain tanpa menunggu transaksi pertama selesai.

Baca yang dapat diulang

Kunci baca dan tulis terjadi pada data yang dipilih sampai akhir transaksi, tetapi pembacaan hantu dapat terjadi.

Snapshot

Menggunakan versi baris untuk memberikan konsistensi pembacaan tingkat transaksi.

Serializable

Transaksi sepenuhnya diisolasi antara satu dan yang lainnya.

Untuk informasi selengkapnya, lihat Panduan Penguncian Transaksi dan Pembuatan Versi Baris.

Atas Halaman

Meningkatkan kinerja kueri

Setelah berhasil menjalankan permintaan kirim langsung Access, manfaatkan cara canggih yang dapat dilakukan SQL Server untuk menjalankannya secara lebih efisien.

Tidak seperti database Access, SQL Server menyediakan kueri paralel untuk mengoptimalkan operasi indeks dan eksekusi kueri untuk komputer yang memiliki lebih dari satu mikroprosesor (CPU). Karena SQL Server dapat melakukan operasi kueri atau indeks secara paralel menggunakan beberapa utas pekerja sistem, operasi dapat diselesaikan dengan cepat dan efisien.

Kueri adalah komponen penting untuk meningkatkan kinerja keseluruhan solusi database Anda. Kueri yang buruk berjalan tanpa batas waktu, waktu habis, dan menggunakan banyak sumber daya seperti CPU, memori, dan bandit jaringan. Hal ini menghambat ketersediaan informasi bisnis yang penting. Bahkan, satu kueri yang buruk dapat mengakibatkan masalah kinerja serius bagi database Anda.

Untuk informasi selengkapnya, lihat Membuat kueri lebih cepat dengan SQL Server (e-book).

Pengoptimalan kueri

Beberapa alat bekerja bersama untuk membantu Anda menganalisis kinerja kueri dan meningkatkannya: Pengoptimal Kueri, rencana eksekusi, dan Query Store.

cara kerja optimasi kueri

Pengoptimal kueri

Pengoptimal Kueri adalah salah satu komponen terpenting SQL Server. Gunakan Pengoptimal Kueri untuk menganalisis kueri dan menentukan cara yang paling efisien untuk mengakses data yang diperlukan. Input pada Pengoptimal Kueri terdiri dari kueri, skema database (definisi tabel dan indeks), dan statistik database. Output Pengoptimal Kueri adalah rencana eksekusi.

Untuk informasi selengkapnya, lihat Pengoptimal Kueri SQL Server.

Rencana eksekusi

Rencana eksekusi adalah definisi yang mengurutkan tabel sumber yang akan diakses dan metode yang digunakan untuk mengekstrak data dari setiap tabel. Pengoptimalan adalah proses memilih satu rencana eksekusi dari kemungkinan banyaknya rencana. Setiap rencana eksekusi yang mungkin dilakukan memiliki biaya terkait jumlah sumber daya komputasi yang digunakan dan Pengoptimal Kueri memilih rencana dengan estimasi biaya terendah.

SQL Server juga harus menyesuaikan perubahan kondisi dalam database secara dinamis. Regresi dalam rencana eksekusi kueri dapat sangat memengaruhi kinerja. Perubahan tertentu dalam database dapat menyebabkan rencana eksekusi menjadi tidak efisien atau tidak valid, berdasarkan keadaan baru database. SQL Server mendeteksi perubahan yang membatalkan rencana eksekusi dan menandai rencana tersebut sebagai tidak valid.

Rencana baru kemudian harus dikompilasi ulang untuk koneksi berikutnya yang mengeksekusi kueri. Kondisi yang membatalkan rencana mencakup:

  • Perubahan yang dilakukan pada tabel atau tampilan yang direferensikan oleh kueri (ALTER TABLE dan ALTER VIEW).

  • Perubahan pada indeks yang digunakan oleh rencana eksekusi.

  • Pembaruan pada statistik yang digunakan oleh rencana eksekusi, dihasilkan baik secara eksplisit dari pernyataan, seperti UPDATE STATISTICS, maupun secara otomatis.

Untuk informasi selengkapnya, lihat Rencana eksekusi.

Query Store

Query Store memberikan wawasan tentang pilihan dan kinerja rencana eksekusi. Fitur ini menyederhanakan pemecahan masalah kinerja dengan membantu Anda dengan cepat menemukan perbedaan kinerja yang disebabkan oleh perubahan rencana eksekusi. Query Store mengumpulkan data telemetri, seperti riwayat kueri, rencana, statistik runtime, dan statistik tunggu. Gunakan pernyataan ALTER DATABASE untuk mengimplementasikan Query Store:

ALTER DATABASE AdventureWorks2012 SET QUERY_STORE = ON;

Untuk informasi selengkapnya, lihat Memantau kinerja menggunakan Query Store.

Koreksi Rencana Otomatis

Mungkin, cara termudah untuk meningkatkan kinerja kueri adalah dengan Koreksi Rencana Otomatis, sebuah fitur yang tersedia dengan Azure SQL Database. Anda hanya perlu mengaktifkan dan membiarkannya bekerja. Fitur ini secara terus menerus melakukan pemantauan dan analisis rencana eksekusi, mendeteksi rencana eksekusi yang bermasalah, dan memperbaiki masalah kinerja secara otomatis. Di belakang layar, Koreksi Rencana Otomatis menggunakan strategi empat langkah yang terdiri dari mempelajari, beradaptasi, memverifikasi, dan mengulangi.

Untuk informasi selengkapnya, lihat Penyelarasan otomatis.

Pemrosesan Kueri Adaptif

Anda juga dapat memperoleh kueri yang lebih cepat cukup dengan memutakhirkan ke SQL Server 2017, yang memiliki fitur baru bernama pemrosesan kueri adaptif. SQL Server menyesuaikan pilihan rencana kueri berdasarkan karakteristik runtime.

Estimasi kardinalitas mendekati jumlah baris yang diproses pada setiap langkah dalam rencana eksekusi. Estimasi yang tidak akurat dapat mengakibatkan waktu respons kueri yang lambat, penggunaan sumber daya yang tidak perlu (memori, CPU, dan IO), serta mengurangi throughput dan konkurensi. Ada tiga teknik yang digunakan untuk menyesuaikan karakteristik beban kerja aplikasi:

  • Umpan balik pemberian memori mode batch    Estimasi kardinalitas yang buruk dapat menyebabkan kueri “tumpah ke disk” atau menggunakan terlalu banyak memori. SQL Server 2017 menyesuaikan pemberian memori berdasarkan umpan balik eksekusi, menyingkirkan tumpahan ke disk, dan meningkatkan konkurensi untuk kueri berulang.

  • Gabungan adaptif mode batch    Gabungan adaptif secara dinamis memilih tipe gabungan internal yang lebih baik (gabungan ulang bertumpuk, gabungan menyatu, atau gabungan hash) selama runtime, berdasarkan baris input aktual. Hasilnya, rencana dapat beralih secara dinamis ke strategi gabungan yang lebih baik selama eksekusi.

  • Eksekusi dengan pembagian    Fungsi bernilai tabel multipernyataan selama ini diperlakukan secara tradisional sebagai kotak hitam oleh pemrosesan kueri. SQL Server 2017 dapat memperkirakan jumlah baris dengan lebih baik untuk meningkatkan operasi hilir.

Anda dapat mengatur beban kerja agar otomatis memenuhi syarat bagi pemrosesan kueri adaptif dengan mengaktifkan tingkat kompatibilitas 140 untuk database:

ALTER DATABASE [YourDatabaseName] SET COMPATIBILITY_LEVEL = 140;

Untuk informasi selengkapnya, lihat Pemrosesan kueri cerdas dalam database SQL.

Atas Halaman

Cara membuat kueri

Di SQL Server, ada beberapa cara untuk membuat kueri, dan masing-masing memiliki keuntungannya sendiri. Anda harus mengetahuinya agar dapat membuat pilihan yang tepat untuk solusi Access. Cara terbaik untuk membuat kueri TSQL adalah dengan mengedit dan mengujinya secara interaktif menggunakan editor Transact-SQL, SQL Server Management Studio (SSMS), yang memiliki intellisense untuk membantu Anda memilih kata kunci yang tepat dan memeriksa kesalahan sintaksis.

Tampilan

Di SQL Server, tampilan terlihat seperti tabel virtual tempat data tampilan berasal dari satu tabel atau lebih atau tampilan lainnya. Namun, tampilan direferensikan seperti tabel dalam kueri. Tampilan dapat menyembunyikan kompleksitas kueri dan membantu melindungi data dengan membatasi kumpulan baris dan kolom. Berikut adalah contoh tampilan sederhana:

CREATE VIEW HumanResources.EmployeeHireDate AS  
SELECT p.FirstName, p.LastName, e.HireDate  
FROM HumanResources.Employee AS e JOIN Person.Person AS p  
ON e.BusinessEntityID = p.BusinessEntityID;

Untuk kinerja optimal dan untuk mengedit hasil tampilan, buat tampilan terindeks, yang tetap ada dalam database seperti tabel, memiliki penyimpanan yang dialokasikan untuknya, dan dapat diberi kueri seperti tabel apa pun. Untuk menggunakannya di Access, tautkan ke tampilan seperti saat Anda menautkan ke tabel. Berikut adalah contoh tampilan terindeks:

CREATE VIEW Sales.vOrders  
WITH SCHEMABINDING  
AS  
    SELECT SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Revenue,  
        OrderDate, ProductID, COUNT_BIG(*) AS COUNT  
    FROM Sales.SalesOrderDetail AS od, Sales.SalesOrderHeader AS o  
    WHERE od.SalesOrderID = o.SalesOrderID  
    GROUP BY OrderDate, ProductID;  

CREATE UNIQUE CLUSTERED INDEX IDX_V1   
    ON Sales.vOrders (OrderDate, ProductID);  

Bagaimanapun, ada batasan untuk hal ini. Anda tidak dapat memperbarui data jika ada lebih dari satu tabel dasar yang terpengaruh atau tampilan berisi fungsi agregat atau klausa DISTINCT. Jika SQL Server mengembalikan pesan kesalahan yang mengatakan program tidak tahu data mana yang harus dihapus, Anda mungkin perlu menambahkan pemicu hapus pada tampilan. Terakhir, Anda tidak dapat menggunakan klausa ORDER BY seperti dengan kueri Access.

Untuk informasi selengkapnya, lihat Tampilan dan Membuat Tampilan terindeks.

Prosedur tersimpan

Prosedur tersimpan adalah kumpulan dari satu pernyataan TSQL atau lebih yang mengambil parameter input, mengembalikan parameter output, dan menunjukkan keberhasilan atau kegagalan dengan nilai status. Prosedur ini bertindak sebagai lapisan menengah antara ujung depan Access dan ujung belakang SQL Server. Prosedur tersimpan dapat dibuat sesederhana pernyataan SELECT atau serumit program apa pun. Berikut contohnya:

CREATE PROCEDURE HumanResources.uspGetEmployees   
    @LastName nvarchar(50),   
    @FirstName nvarchar(50)   
AS   
    SET NOCOUNT ON;  
    SELECT FirstName, LastName, Department  
    FROM HumanResources.vEmployeeDepartmentHistory  
    WHERE FirstName = @FirstName AND LastName = @LastName  
    AND EndDate IS NULL;  

Saat digunakan di Access, prosedur tersimpan biasanya mengembalikan hasil yang diatur kembali ke formulir atau laporan. Namun, prosedur ini dapat melakukan tindakan lain yang tidak mengembalikan hasil, seperti pernyataan DDL atau DML. Ketika menggunakan permintaan kirim langsung, pastikan Anda mengatur properti Return Records dengan tepat.

Untuk informasi selengkapnya, lihat Prosedur tersimpan.

Ekspresi Tabel Umum

Ekspresi Tabel Umum (CTE) bersifat seperti tabel sementara yang menghasilkan kumpulan hasil bernama. Ekspresi ini hanya ada untuk eksekusi satu kueri atau pernyataan DML. CTE dibuat dalam baris kode yang sama dengan pernyataan SELECT atau pernyataan DML yang menggunakannya, sementara membuat dan menggunakan tabel atau tampilan sementara biasanya dilakukan dalam dua langkah. Berikut contohnya:

-- Define the CTE expression name and column list.  
WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear)  
AS  
-- Define the CTE query.  
(  
    SELECT SalesPersonID, SalesOrderID, YEAR(OrderDate) AS SalesYear  
    FROM Sales.SalesOrderHeader  
    WHERE SalesPersonID IS NOT NULL  
)  
-- Define the outer query referencing the CTE name.  
SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales, SalesYear  
FROM Sales_CTE  
GROUP BY SalesYear, SalesPersonID  
ORDER BY SalesPersonID, SalesYear;

CTE memiliki beberapa manfaat, termasuk hal-hal berikut:

  • Sifat CTE yang hanya sementara tidak mengharuskan Anda untuk membuatnya sebagai objek database permanen seperti tampilan.

  • Anda dapat mereferensikan CTE yang sama lebih dari sekali dalam kueri atau pernyataan DML sehingga kode menjadi lebih mudah dikelola.

  • Anda dapat menggunakan kueri yang mereferensikan CTE untuk menentukan kursor.

Untuk informasi selengkapnya, lihat WITH common_table_expression.

Fungsi yang Ditentukan Pengguna

Fungsi yang Ditentukan Pengguna (UDF) dapat menjalankan kueri dan penghitungan serta mengembalikan nilai skalar atau kumpulan hasil data. Fungsi ini seperti fungsi dalam bahasa pemrograman yang menerima parameter, melakukan tindakan seperti penghitungan rumit, dan mengembalikan hasil tindakan tersebut sebagai nilai. Berikut contohnya:

CREATE FUNCTION dbo.ISOweek (@DATE datetime)  
RETURNS int WITH SCHEMABINDING -- Helps improve performance
WITH EXECUTE AS CALLER  
AS  
BEGIN  
     DECLARE @ISOweek int;  
     SET @ISOweek= DATEPART(wk,@DATE)+1  
          -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104');  
-- Special cases: Jan 1-3 may belong to the previous year  
     IF (@ISOweek=0)   
          SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1   
               AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1;  
-- Special case: Dec 29-31 may belong to the next year  
     IF ((DATEPART(mm,@DATE)=12) AND   
          ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))  
          SET @ISOweek=1;  
     RETURN(@ISOweek);  
END;  
GO  
SET DATEFIRST 1;  
SELECT dbo.ISOweek(CONVERT(DATETIME,'12/26/2004',101)) AS 'ISO Week';  

UDF memiliki batasan tertentu. Misalnya, fungsi ini tidak dapat menggunakan fungsi sistem non-deteministik tertentu, melakukan pernyataan DML atau DDL, atau melakukan kueri SQL dinamis.

Untuk informasi selengkapnya, lihat Fungsi yang Ditentukan Pengguna.

Atas Halaman

Menambahkan kunci dan indeks

Apa pun sistem database yang Anda gunakan, kunci dan indeks akan selalu beriringan.

Kunci

Di SQL Server, pastikan Anda membuat kunci utama untuk setiap tabel dan kunci asing untuk setiap tabel terkait. Di SQL Server, fitur yang setara dengan tipe data AutoNumber di Access adalah properti IDENTITY, yang dapat digunakan untuk membuat nilai kunci. Setelah diterapkan ke kolom numerik apa pun, properti ini menjadi bersifat baca-saja dan dikelola oleh sistem database. Saat Anda menyisipkan data ke dalam tabel yang berisi kolom IDENTITY, sistem akan otomatis menambah nilai pada kolom IDENTITY sebanyak 1 nilai dan dimulai dari 1, tetapi Anda dapat mengontrol nilai ini dengan argumen.

Untuk informasi selengkapnya, lihat CREATE TABLE, IDENTITY (Properti).

Indeks

Seperti biasa, pemilihan indeks adalah langkah penyeimbangan antara kecepatan kueri dan biaya pembaruan. Di Access, Anda memiliki satu tipe indeks, tetapi di SQL Server, ada dua belas indeks. Untungnya, Anda dapat menggunakan pengoptimal kueri untuk membantu memilih indeks yang paling efektif. Dan di Azure SQL, Anda dapat menggunakan manajemen indeks otomatis, sebuah fitur penyelarasan otomatis, yang menyarankan penambahan atau penghapusan indeks untuk Anda. Tidak seperti Access, Anda harus membuat indeks sendiri untuk kunci asing di SQL Server. Anda juga dapat membuat indeks pada tampilan terindeks untuk meningkatkan kinerja kueri. Kelemahan dari tampilan terindeks adalah kelebihan yang meningkat ketika Anda mengubah data dalam tabel dasar tampilan, karena tampilan juga harus diperbarui. Untuk informasi selengkapnya, lihat Panduan Arsitektur dan Desain Indeks SQL Server dan Indeks.

Atas Halaman

Melakukan transaksi

Sulit untuk melakukan Proses Transaksi Online (OLTP) ketika menggunakan Access, tetapi dengan SQL Server, hal ini relatif mudah. Transaksi adalah unit kerja tunggal yang melakukan semua perubahan data saat berhasil tetapi mengembalikan perubahan ketika tidak berhasil. Transaksi harus memiliki empat properti, yang sering disebut sebagai ACID:

  • Atomicity    Transaksi harus berupa unit kerja atom; baik semua modifikasi datanya dilakukan, maupun tidak ada yang dilakukan.

  • Consistency    Ketika selesai, transaksi harus diselesaikan dengan keadaan data yang konsisten. Artinya, semua aturan integritas data diterapkan.

  • Isolation    Perubahan yang dilakukan oleh transaksi bersamaan diisolasi dari transaksi saat ini.

  • Durability    Setelah transaksi selesai, perubahan bersifat permanen meskipun kegagalan sistem terjadi.

Transaksi digunakan untuk memastikan integritas data yang terjamin, seperti penarikan tunai ATM atau setoran pembayaran otomatis. Anda dapat melakukan transaksi eksplisit, implisit, atau berkelompok. Berikut adalah dua contoh TSQL:

-- Using an explicit transaction

BEGIN TRANSACTION;  
DELETE FROM HumanResources.JobCandidate  
    WHERE JobCandidateID = 13;  
COMMIT;  

-- the ROLLBACK statement rolls back the INSERT statement, but the created table still exists.

CREATE TABLE ValueTable (id int);  
BEGIN TRANSACTION;  
       INSERT INTO ValueTable VALUES(1);  
       INSERT INTO ValueTable VALUES(2);  
ROLLBACK;

Untuk informasi selengkapnya, lihat Transaksi.

Atas Halaman

Menggunakan batasan dan pemicu

Semua database memiliki cara untuk menjaga integritas data.

Batasan

Di Access, integritas referensial diterapkan dalam hubungan tabel melalui pasangan kunci asing-kunci utama, pembaruan dan penghapusan kaskade, dan aturan validasi. Untuk informasi selengkapnya, lihat Panduan tentang hubungan tabel dan Membatasi input data menggunakan aturan validasi.

Di SQL Server, gunakan batasan UNIQUE dan CHECK, yaitu objek database yang menerapkan integritas data dalam tabel SQL Server. Untuk memvalidasi bahwa nilai sudah valid dalam tabel lain, gunakan batasan kunci asing. Untuk memvalidasi bahwa nilai dalam suatu kolom ada dalam rentang tertentu, gunakan batas cek. Objek-objek ini adalah baris pertahanan pertama Anda dan dirancang untuk bekerja secara efisien. Untuk informasi selengkapnya, lihat Batasan Unik dan Batas Cek.

Pemicu

Access tidak memiliki pemicu database. Di SQL Server, Anda dapat menggunakan pemicu untuk menerapkan aturan integritas data yang kompleks dan menjalankan logika bisnis ini di server. Pemicu database adalah prosedur tersimpan yang dijalankan saat tindakan tertentu terjadi dalam database. Pemicu adalah sebuah kejadian, seperti menambah atau menghapus data pada tabel, yang mengaktifkan dan menjalankan prosedur yang tersimpan. Meskipun database Access dapat memastikan integritas referensial ketika pengguna mencoba memperbarui atau menghapus data, SQL Server memiliki rangkaian pemicu yang canggih. Misalnya, Anda dapat memprogram pemicu untuk menghapus data secara massal dan memastikan integritas data. Anda bahkan dapat menambahkan pemicu ke tabel dan tampilan.

Untuk informasi selengkapnya, lihat Pemicu - DML, Pemicu - DDL, dan Mendesain pemicu T-SQL.

Atas Halaman

Menggunakan kolom terkomputasi

Di Access, kolom terhitung dibuat dengan menambahkannya ke kueri dan membuat ekspresi, seperti:

Extended Price: [Quantity] * [Unit Price]

Di SQL Server, fitur yang setara disebut kolom terkomputasi, yaitu kolom virtual yang tidak disimpan secara fisik dalam tabel, kecuali jika kolom tersebut ditandai PERSISTED. Seperti kolom terhitung, kolom terkomputasi menggunakan data dari kolom lain dalam ekspresi. Untuk membuat kolom terkomputasi, tambahkan ke tabel. Misalnya:

CREATE TABLE dbo.Products   
(  
    ProductID int IDENTITY (1,1) NOT NULL  
  , QtyAvailable smallint  
  , UnitPrice money  
  , InventoryValue AS QtyAvailable * UnitPrice  
);  

Untuk informasi selengkapnya, lihat Menentukan Kolom Terkomputasi dalam Tabel.

Atas Halaman

Membuat stempel waktu pada data Anda

Terkadang, Anda menambahkan bidang tabel untuk merekam stempel waktu ketika data dibuat agar dapat mencatat entri data. Di Access, cukup buat kolom tanggal dengan nilai default =Now(). Untuk mencatat tanggal atau waktu di SQL Server, gunakan tipe data datetime2 dengan nilai default SYSDATETIME().

Catatan    Hindari kesalahan menggunakan rowversion dengan menambahkan stempel waktu ke data Anda. Stempel waktu kata kunci adalah sinonim untuk rowversion di SQL Server, tetapi Anda harus menggunakan kata kunci rowversion. Di SQL Server, rowversion adalah tipe data yang menunjukkan angka biner unik yang dihasilkan secara otomatis dalam database, dan umumnya digunakan sebagai mekanisme untuk baris tabel pemberian cap versi. Namun, tipe data rowversion hanyalah angka yang bertambah, tidak menyimpan tanggal atau waktu, dan tidak dirancang untuk membuat stempel waktu pada baris.

Untuk informasi selengkapnya, lihat rowversion. Untuk informasi selengkapnya tentang menggunakan rowversion untuk meminimalkan konflik data, lihat Memigrasikan database Access ke SQL Server.

Atas Halaman

Mengelola objek berukuran besar

Di Access, data yang tidak terstruktur seperti file, foto, dan gambar harus dikelola menggunakan Jenis data lampiran. Dalam terminologi SQL Server, data tidak terstruktur disebut Blob (Objek Besar Biner) dan ada beberapa cara untuk bekerja dengannya:

FILESTREAM    Menggunakan tipe data varbinary(max) untuk menyimpan data yang tidak terstruktur pada sistem file daripada di database. Untuk informasi selengkapnya, lihat Mengakses Data FILESTREAM dengan Transact-SQL.

FileTable    Menyimpan blob dalam tabel khusus yang disebut FileTables dan menyediakan kompatibilitas dengan aplikasi Windows seolah-olah disimpan dalam sistem file dan tanpa membuat perubahan apa pun pada aplikasi klien Anda. FileTable membutuhkan penggunaan FILESTREAM. Untuk informasi selengkapnya, lihat FileTables.

Penyimpanan BLOB Jarak Jauh (RBS)    Menyimpan objek besar biner (BLOB) dalam solusi penyimpanan komoditas, bukan langsung di server. Cara ini menghemat ruang dan mengurangi sumber daya perangkat keras. Untuk informasi selengkapnya, lihat Data Objek Besar Biner (BLOB).

Atas Halaman

Bekerja dengan data hierarkis

Meskipun database relasional seperti Access sangat fleksibel, bekerja dengan hubungan hierarkis merupakan pengecualian dan biasanya memerlukan pernyataan atau kode SQL yang kompleks. Contoh data hierarkis meliputi: struktur organisasi, sistem file, taksonomi istilah bahasa, dan grafik tautan antarhalaman Web. SQL Server memiliki tipe data hierarchyid bawaan dan serangkaian fungsi hierarkis untuk menyimpan, membuat kueri, dan mengelola data hierarkis dengan mudah.

Hierarki umum

Untuk informasi selengkapnya, lihat Data hierarkis dan Tutorial: Menggunakan tipe data hierarchyid.

Atas Halaman

Memanipulasi teks JSON

JavaScript Object Notation (JSON) adalah layanan web yang menggunakan teks yang dapat dibaca manusia untuk mengirimkan data sebagai pasangan atribut-nilai dalam komunikasi browser-server yang asinkron. Misalnya:

{
"firstName": "Mary",
"lastName": "Contrary",
"spouse": null,
"age": 27
}

Access tidak memiliki cara bawaan untuk mengelola data JSON, tetapi di SQL Server, Anda dapat menyimpan, mengindeks, membuat kueri, dan mengekstrak data JSON tanpa masalah. Anda dapat mengonversi dan menyimpan teks JSON dalam tabel atau memformat data sebagai teks JSON. Misalnya, Anda ingin memformat hasil kueri sebagai JSON untuk aplikasi Web atau menambahkan struktur data JSON ke dalam baris dan kolom.

Catatan    JSON tidak didukung di VBA. Sebagai alternatif, Anda dapat menggunakan XML di VBA menggunakan pustaka MSXML.

Untuk informasi selengkapnya, lihat Data JSON di SQL Server.

Atas Halaman

Sumber Daya

Sekarang adalah saat yang tepat untuk mempelajari selengkapnya tentang SQL Server dan Transact SQL (TSQL). Seperti yang Anda lihat, ada banyak fitur yang serupa dengan Access, juga kemampuan yang tidak dimiliki Access. Untuk mengoptimalkan proses Anda, berikut beberapa sumber daya pembelajaran:

Sumber Daya

Deskripsi

Membuat kueri dengan Transact-SQL

Kursus berbasis video

Tutorial Mesin Database

Tutorial tentang SQL Server 2017

Microsoft Learn

Pembelajaran langsung untuk Azure

Pelatihan dan sertifikasi SQL Server

Menjadi ahli

SQL Server 2017

Halaman tujuan utama

Dokumentasi SQL Server

Informasi bantuan

Dokumentasi Azure SQL Database

Informasi bantuan

Panduan penting tentang data di cloud (e-book)

Gambaran umum cloud

Lembar Data SQL Server 2017

Ringkasan visual tentang fitur-fitur baru

Bandingkan versi Microsoft SQL Server

Ringkasan fitur menurut versi

Edisi Microsoft SQL Server Express

Unduh SQL Server Express 2017

Database sampel SQL

Unduh database sampel

Atas Halaman

Kembangkan keterampilan Office Anda
Jelajahi pelatihan
Dapatkan fitur baru terlebih dahulu
Gabung ke Office Insiders

Apakah informasi ini bermanfaat?

Terima kasih atas umpan balik Anda!

Terima kasih atas umpan balik Anda! Sepertinya menghubungkan Anda ke salah satu agen dukungan Office kami akan sangat membantu.

×