Sebagai seorang DBA, bagaimana saya akan beralih dari Oracle ke SQL Server?

32

Saya seorang Oracle DBA yang juga memiliki pengalaman Sybase.

Apa perbedaan arsitektural dan konseptual utama antara kedua platform RDBMS?

Jawaban yang mirip dengan SQL Server-> pertanyaan Oracle di sini akan paling bermanfaat.

Philᵀᴹ
sumber
3
sedikit humor (maaf jika PL), pernahkah Anda bertemu? dba.stackexchange.com/questions/9765/…
booyaa

Jawaban:

49

Saya telah bertukar antara bekerja pada Oracle dan SQL Server selama beberapa tahun terakhir, dan menulis uraian tentang pergi ke arah lain di sini. Ada sejumlah perbedaan idiomatik dan arsitektur, dan berbagai bit terminologi dapat digunakan secara berbeda oleh vendor dan komunitas pengembang / DBA yang mengelilingi setiap produk.

Arsitektur fisik

SQL Server mengatur berbagai hal yang sedikit berbeda dengan Oracle dan memiliki satu atau dua konsep kunci yang tidak memiliki analog langsung di Oracle.

  • 'Basis data' adalah item terpisah dalam SQL Server, dengan izin pengguna sendiri, skema / ruang nama, dan penyimpanan. Jika Anda terbiasa dengan Sybase, mereka bekerja sama seperti database di Sybase, karena asal usul produk yang sama.

  • Filegroup kira-kira setara dengan ruang tabel, meskipun mereka lokal ke database.

  • Skema adalah konsep yang berbeda dari pengguna basis data di SQL Server, meskipun pengguna dapat memiliki skema default.

  • MVCC bekerja agak berbeda di SQL Server. Ini adalah fitur yang relatif baru, mempertahankan salinan baris yang berbeda hingga kunci pada versi lama dilepaskan. SQL Server tidak memiliki padanan langsung ke segmen rollback. Ini tidak aktif secara default pada database SQL Server.

  • Tempdb jauh lebih banyak digunakan dalam SQL Server. Sistem menggunakannya untuk tabel sementara dan hasil gabungan antara. Lebih lanjut tentang tempdb nanti.

  • Partisi tabel agak lebih banyak daripada Oracle. Anda perlu mengatur fungsi partisi yang membuat kunci partisi dari apa pun yang Anda berikan, kemudian skema partisi di atas fungsi partisi itu. Skema partisi berperilaku sedikit seperti grup berkas di mana Anda kemudian membuat tabel pada skema partisi.

    Swapping partisi masuk dan keluar mengharuskan Anda untuk membuat batasan pada tabel kosong di struktur yang tepat. Batasan tersebut menjamin bahwa nilai kunci partisi sesuai dengan partisi yang ingin Anda tukarkan dengannya.

  • Tampilan terwujud disebut tampilan terindeks di SQL Server. The GROUP BYklausul memang memiliki CUBEoperator, dan menyinggung dokumentasi untuk fitur permintaan menulis ulang. Namun, fungsi ini tidak didokumentasikan dengan baik dan mungkin tidak terlalu matang. YMMV.

  • SQL Server tidak mendukung transaksi otonom, meskipun mendukung komitmen dua fase melalui protokol transaksi XA atau OLEDB.

  • Indeks Clustered sedikit berbeda dari tabel indeks-urutan di Oracle, karena mereka tidak memerlukan semua kolom dalam tabel untuk berpartisipasi dalam indeks clustered. Mereka jauh lebih banyak digunakan dalam arsitektur SQL Server daripada IOT di Oracle.

  • SQL Server mendukung indeks yang meliputi, tetapi tidak memiliki indeks gabungan. Indeks Bitmap tidak didukung, meskipun memang memiliki indeks interseksi / operator transformasi bintang yang dapat menghitung persimpangan tanpa mengenai tabel fakta.

  • Urutan adalah tambahan yang relatif baru untuk SQL Server. Secara tradisional kunci penambahan otomatis dilakukan melalui kolom identitas. Anda dapat memuat nilai ke kolom identitas melalui set identity_insert on.

Pemrograman

Idiomatic T-SQL memiliki beberapa perbedaan dengan PL / SQL idiomatik. Ia bekerja cukup berbeda sehingga beberapa perbedaan paradigmatis pantas dijelaskan secara lebih mendalam.

  • T-SQL tidak memiliki konsep paket. Semua prosedur dan fungsi yang tersimpan dalam database tinggal di namespace yang sama, meskipun skema dapat digunakan untuk memecah ini, dan namespace adalah lokal untuk database.

  • Dapatkan merasakan bagaimana menggunakan tabel sementara, dan SELECT INTO. Sangat jarang menemukan kode T-SQL yang sebenarnya membutuhkan kursor; tabel sementara memungkinkan operasi untuk dipecah menjadi langkah-langkah yang dapat dilakukan dengan operasi yang ditetapkan. SELECT INTOdi tempdb log minimal, dan juga log minimal dalam mode pemulihan pada database pengguna juga, jadi itu sama cepatnya dengan operator kueri yang bertahan pada hasil gabungan antara.

    T-SQL idiomatis akan menggunakan tabel temp dalam jenis peran yang akan Anda lihat variabel kursor dalam PL / SQL, tetapi akan membuat lebih banyak menggunakan operasi yang ditetapkan. Namun tabel temp dapat membuat kode yang cukup tumpul, jadi gunakan dengan hati-hati.

  • Kamus data sistem jauh lebih tumpul daripada versi Oracle pada versi yang lebih lama, tetapi menjadi jauh lebih baik dengan SQL Server 2005. Meskipun alat yang disediakan oleh Microsoft memiliki cukup banyak hal introspeksi yang dibangun di penjelajah SSMS, masih perlu diketahui oleh Anda berkeliling di kamus data. Itu tidak membedakan antara ALL, USERdan DBApandangan dari objek DB, meskipun.

  • SSMS memiliki penampil paket kueri bawaan.

  • Pengidentifikasi dalam kode T-SQL dapat dikutip dengan [], dan dapat berisi semua jenis sampah jika dikutip. Namun, jika kami melihat Anda memanggil kolom 'Direct / Transfer', kami akan mencabut usus Anda.

  • SQL Server memang memiliki fungsi jendela (sejak 2005 IIRC), sehingga Anda dapat melakukan pemesanan, menjalankan jumlah dan sejenisnya di dalam grup sekarang.

  • T-SQL tidak memiliki padanan langsung CONNECT BY, meskipun rekursi dapat dilakukan melalui CTE rekursif.

  • Jika Anda perlu menulis kode yang melompat di seluruh basis data (sebagai lawan skema dalam basis data), pertimbangkan untuk menggunakan sinonim publik untuk alias objek ke sesuatu yang lokal dan merujuk ke alias dalam kode. Ini menghindari ketergantungan kode-keras pada nama database.

  • Jika Anda menghindari ketergantungan kode keras pada nama database, basis data membuatnya mudah untuk mempertahankan beberapa lingkungan pada server yang sama.

  • Beberapa hal, seperti fungsi agregat khusus, hanya dapat diimplementasikan menggunakan CLR sprocs. Juga, jika Anda ingin melarikan diri dari konteks transaksi (misalnya memalsukan transaksi otonom untuk pencatatan kesalahan rollback-proof), Anda dapat menggunakan CLR sproc, karena dapat membuat koneksi lokal di luar konteks transaksi saat ini.

Keamanan

Login didefinisikan pada tingkat contoh SQL Server, tetapi setiap login memetakan ke nol atau lebih basis data sebagai 'pengguna basis data'. Izin cam diberikan ke 'login' (server) dan 'pengguna' (database) tetapi dalam database 'peran' biasanya digunakan. Pengguna termasuk peran, izin ditugaskan ke peran. SQL Server 2012 menambahkan 'peran server'.

  • SQL Server 2012 memperkenalkan konsep yang disebut 'database sebagian terkandung', yang memungkinkan pengguna dan informasi peran disimpan lokal ke database itu.

  • Dalam database, konsep pengguna dan skema dipisahkan. Pengguna atau peran dapat ditugaskan ke skema dan skema memiliki objek database.

  • Otentikasi Windows menggunakan informasi masuk di belakang layar untuk mengautentikasi pengguna di mesin atau domain ke login SQL Server. Dukungan IIRC untuk ini adalah tambahan opsional untuk Oracle.

  • Peran khusus, 'dbo' (kependekan dari 'pemilik basis data') memiliki semacam hak istimewa pengguna super di dalam basis data tertentu. Setiap database memiliki peran 'dbo' dan pengguna dapat ditugaskan ke peran 'dbo' pada database yang diberikan.

  • Ada juga skema 'dbo' default. Objek dapat dimiliki oleh skema dbo - Objek yang dibuat oleh pengguna dengan peran 'dbo' (atau izin admin seluruh sistem) akan secara default dimiliki oleh skema 'dbo' kecuali jika skema lain diberikan secara eksplisit.

  • Informasi keamanan tidak disimpan dengan cadangan satu basis data. Pengguna harus dan peran harus dikonfigurasikan secara eksplisit di server tempat cadangan dikembalikan. SQL Server 2012 memungkinkan pengguna dan data peran disimpan secara lokal ke database dengan fitur baru 'sebagian database'.

  • Dari SQL Server 2005, prosedur tersimpan dapat dieksekusi dalam konteks keamanan pemanggil, pembuat, skema kepemilikan atau pengguna tertentu.

  • Dalam pandangan tentang SQL Server, izin pada tabel yang mendasarinya didasarkan pada izin skema yang memiliki tampilan. Izin pengguna pada tabel yang mendasari tidak berpartisipasi dalam keamanan, meskipun definisi tampilan dapat mencakup filter yang mendapatkan informasi dari sesi. Di Oracle, izin pengguna pada tabel yang mendasari dapat memengaruhi tampilan, tergantung pada konfigurasi hibah.

Pemantauan dan penyetelan

TBA - arsitektur memori vs. SGA dll di oracle

Cadangan dan pemulihan

TBA

Alat

Microsoft bundel satu set alat di sekitarnya dengan SQL Server. Beberapa item utama yang disediakan adalah:

  • SQL Server Management Studio (SSMS): Ini melakukan sesuatu yang mirip dengan SQL Developer di Oracle - ia menyediakan editor dan fasilitas eksekusi kode. Beberapa fitur yang berguna termasuk browser objek database dan penampil rencana kueri.

  • SQL Server Analysis Services (SSAS): Ini adalah server OLAP yang berbeda dari server database. Ini menggunakan bahasa kueri sendiri (MDX) dan API (XML / A) untuk komunikasi client-server. Tidak dapat ditanya dengan SQL. SSMS memiliki fasilitas untuk mengedit permintaan MDX dan XMLA mentah dan menampilkan hasilnya. Alat kueri baris perintah yang disebut ASCMD.EXE juga disediakan.

  • SQL Server Reporting Services (SSRS): Ini adalah alat pelaporan berbasis web untuk menerbitkan laporan. Laporan dapat dibuat melalui BI Development Studio (BIDS) atau Report Builder, dan dipublikasikan ke portal web. Server SSRS sendiri memiliki API layanan web untuk mengelola server secara terprogram. Perhatikan bahwa laporan SSRS dapat menggunakan data dari berbagai sumber, bukan hanya SQL Server. Alat baris perintah yang disebut RS.EXE disediakan untuk mengelola server SSR secara terprogram.

  • SQL Server Integration Services (SSIS): Ini adalah alat ETL yang disediakan dengan SQL Server. Secara arsitektur, ini sangat berbeda dengan OWB atau ODI dalam hal ini bukan alat pembuatan kode. Runtime duduk di sisi klien dan bisa berada di mesin terpisah ke server database. Paket SSIS dapat dikembangkan dengan BIDS dan dieksekusi secara independen dengan alat baris perintah yang disebut DTEXEC.EXE.

  • BI Development Studio (BIDS): Ini adalah lingkungan berbasis studio visual untuk mengembangkan laporan, paket SSIS, dan kubus SSAS. Jika perkakas pengembangan berbasis VS lainnya dipasang (mis. VS Profesional) perkakas tersebut dapat diintegrasikan ke dalam satu lingkungan dan pengelompokan proyek bersama.

  • Salinan massal (BCP): Alat sisipan / ekstrak massal baris perintah mirip dengan SQL * Loader

  • SQLCMD: Alat permintaan baris perintah mirip dengan SQL * plus

  • SQL Profiler: Alat penelusuran dan pembuatan profil yang dapat menangkap dan mengevaluasi informasi jejak dari SQL Server, SSAS, dan alat-alat lain di suite.

  • SQL Server Agent: Utilitas penjadwalan pekerjaan yang dapat menjalankan pekerjaan berkala dari satu jenis yang lain.

ConcernedOfTunbridgeWells
sumber
1
Pada T-SQL vs PL / SQL: T-SQL tidak memiliki konteks pemrograman yang berbeda seperti PL / SQL, sehingga Anda dapat dengan bebas mencampur pernyataan SQL dan T-SQL murni. Misalnya, Anda dapat menjalankan TRUNCATE TABLE ...DML bersama tanpa harus melakukan yang setara EXECUTE IMMEDIATE. Di T-SQL, Anda juga bisa mengembalikan set hasil ke klien menggunakan di SELECTsamping operasi lain, sedangkan di PL / SQL Anda harus mengarahkan output dari SELECTs ke tabel atau tujuan lain. Di Oracle, hanya SQL murni yang dapat mengembalikan hasil yang disetel ke klien.
Nick Chammas
1
Perhatikan juga bahwa prosedur tersimpan yang namanya dimulai dengan "sp_" diperlakukan secara khusus. Jangan beri nama procudes tersimpan Anda seperti itu, kecuali jika Anda mendukung prosedur sistem dari versi SQL server yang lebih baru. Anda secara teknis dapat memanfaatkan ini untuk membuat prosedur tersimpan dengan basis data yang luas, tetapi itu tidak direkomendasikan, karena versi yang akan datang dapat membuat prosedur tersimpan sistem baru dengan nama yang sama.
Kevin Cathcart
1
Apakah perlu menambahkan sedikit tentang eskalasi kunci di sini? Saya pikir itu akan mengejutkan bagi orang Oracle digunakan untuk kunci tingkat baris tak terbatas
Jack Douglas
8

Produk utama kami berfungsi pada SQL Server dan Oracle, berikut adalah beberapa perbedaan lain yang harus kami perhatikan dan mungkin perlu diingat:

  • Penanganan tanggal-waktu sangat berbeda: tindakan berbeda, serangkaian fungsi yang berbeda untuk dikerjakan

  • String kosong adalah NULL di Oracle, bukan di SQL Server

  • Penanganan pengodean karakter dan Unicode sangat berbeda. Dalam SQL Server Anda dapat memiliki kolom normal ( varchar) atau Unicode ( nvarchar) yang dicampur dalam database yang sama, di Oracle Anda memutuskan pada tingkat database jenis pengkodean yang akan digunakan.

MiMo
sumber
Oracle juga memungkinkan pencampuran tipe char / varchar2 dan nchar / nvarchar2 dengan dua pengkodean yang berbeda - lihat karakter Unicode dapat disimpan dalam database Oracle dengan dua cara .
George3