DBA olarak Oracle'dan SQL Server'a nasıl geçebilirim?


Yanıtlar:


49

Geçtiğimiz birkaç yıl boyunca Oracle ve SQL Server üzerinde çalışmak arasında geçiş yaptım ve burada diğer tarafa gitme konusunda bir bulanıklık yazdım . Çok sayıda deyimsel ve mimari farklılık vardır ve her bir ürünü çevreleyen satıcı ve geliştirici / DBA toplulukları tarafından farklı terminoloji parçaları kullanılmaktadır.

Fiziksel mimari

SQL Server, çeşitli şeyleri Oracle'dan biraz farklı şekilde organize eder ve Oracle'da doğrudan analogları olmayan bir veya iki temel konsepte sahiptir.

  • 'Veritabanı', SQL Server'da kendi kullanıcı izinleri, şemaları / adı boşlukları ve depolanması olan ayrı bir öğedir. Sybase'e aşina iseniz, ürünün ortak kökenleri nedeniyle, Sybase'deki veritabanlarıyla aynı şekilde çalışırlar.

  • Dosya grupları kabaca eşittir, ancak bir veritabanında yereldirler.

  • Bir şema, kullanıcılar varsayılan bir şemaya sahip olabilse de, SQL Server'da bir veritabanı kullanıcısından farklı bir kavramdır.

  • MVCC, SQL Server'da biraz farklı çalışır. Eski sürümdeki kilitler serbest bırakılıncaya kadar bir satırın farklı kopyalarını saklamak nispeten yeni bir özelliktir. SQL Server'ın geri alma segmentine doğrudan bir eşdeğeri yoktur. SQL Server veritabanlarında varsayılan olarak etkin değildir.

  • Tempdb, SQL Server'da çok daha yoğun kullanılır. Sistem geçici tablolar ve ara birleştirme sonuçları için kullanır. Daha sonra tempdb hakkında daha fazla.

  • Tablo bölümleme, Oracle'dan biraz daha karmaşıktır. Ne sağladığınızdan bir bölüm anahtarı oluşturan bir bölüm işlevi ayarlamanız ve ardından bu bölüm işlevi üzerinde bir bölüm düzeni ayarlamanız gerekir. Bölüm şeması biraz daha sonra bir dosya grubu gibi davranır, böylece bölüm şemasında tabloyu oluşturursunuz.

    Bölümleri içeri ve dışarı takas etmek, doğru yapıdaki boş bir masaya bir kısıtlama koymanızı gerektirir. Kısıtlama, bölüm anahtarı değerlerinin, değiştirmeyi düşündüğünüz bölüme uygun olduğunu garanti eder.

  • Materyalize görünümler, SQL Server'da dizine alınmış görünümler olarak adlandırılır. GROUP BYYantümce var CUBEoperatör ve bir sorgu yeniden yazma özelliğine dokümantasyon bahsettiği. Ancak, bu işlevsellik iyi belgelenmemiş ve çok olgun olmayabilir. YMMV.

  • SQL Server, XA veya OLEDB işlem protokolleri aracılığıyla iki aşamalı işlemeyi desteklese de, özerk işlemleri desteklemez.

  • Kümelenmiş dizinler, Oracle'daki dizin sıralı tablolardan biraz farklıdır, çünkü tablodaki tüm sütunların kümelenmiş dizine katılmasını gerektirmezler. SQL Server mimarisinde IOT'lerin Oracle'da olduğundan çok daha yaygın olarak kullanılırlar.

  • SQL Server, kaplama dizinlerini desteklemektedir, ancak birleştirme dizinlerine sahip değildir. Bitmap dizinleri desteklenmemektedir, ancak durum tablosuna çarpmadan kesişmeleri hesaplayabilen bir dizin kesişme / yıldız dönüştürme operatörüne sahiptir.

  • Diziler, SQL Server'a nispeten yeni bir ektir. Geleneksel olarak kendiliğinden anahtarlar kimlik sütunları aracılığıyla yapılır. Bir kimlik sütununa değerleri yükleyebilirsiniz set identity_insert on.

Programlama

Deyimsel T-SQL deyimsel PL / SQL ile ilgili bazı farklılıklar vardır. Paradigmatik farklılıkların bazılarının daha derinlemesine açıklamaya hak ettiği kadar farklı şekilde çalışır.

  • T-SQL'in paket konsepti yoktur. Bir veritabanındaki tüm saklı yordamlar ve işlevler ortak bir ad alanında yaşar, ancak şemalar bu ayrımı yapmak için kullanılabilir ve ad alanı bir veritabanında yereldir.

  • Geçici tabloların nasıl kullanılacağına dair bir fikir edin SELECT INTO. Bir imleç gerektiren T-SQL koduyla karşılaşmanız oldukça nadirdir; geçici tablolar, işlemlerin ayarlanmış işlemlerle gerçekleştirilebilecek adımlara bölünmesine izin verir. SELECT INTOtempdb'de en az günlüğe kaydedilir ve kullanıcı veritabanlarında da belirli kurtarma modlarında en az düzeyde günlüğe kaydedilir, bu nedenle bir ara birleştirme sonucunu sürdüren sorgu işleci kadar hızlıdır.

    Idiomatic T-SQL, imleç değişkenlerini PL / SQL'de göreceğiniz rol türlerinde temp tablolarını kullanır, ancak set işlemlerini çok daha fazla kullanır. Bununla birlikte, geçici tablolar oldukça geniş kodlar üretebilir, bu nedenle dikkatli kullanın.

  • Sistem veri sözlüğü, eski sürümlerdeki Oracle’dan çok daha uzundu, ancak SQL Server 2005 ile çok daha iyi bir hale geldi. Microsoft tarafından sağlanan araçların SSMS explorer’ında yerleşik olarak birçok gözden geçirme olayı olmasına rağmen, yine de veri sözlüğü çevresinde. Bu arasında ayrım yapmaz ALL, USERve DBAde, DB nesnelerin görünümleri.

  • SSMS'nin yerleşik bir sorgu planı görüntüleyicisi var.

  • T-SQL kodundaki tanımlayıcılar [] ile iktibas edilebilir ve alıntı yapılırsa her türlü çöp içerebilir. Biz bir sütun 'Doğrudan / Transferi' çağıran yakalarsam Ancak, biz olacak senin bağırsaklarını söküp.

  • SQL Server'da pencere işlevleri vardır (2005 IIRC'den beri), böylece artık gruplar içinde sipariş, toplamlar ve benzeri işlemleri yapabilirsiniz.

  • CONNECT BYÖzyinelemeli CTE'ler aracılığıyla özyineleme yapılabilmesine rağmen, T-SQL'in doğrudan karşılığı yoktur .

  • Veritabanları arasında dolaşan bir kod yazmanız gerekiyorsa (bir veritabanındaki şemaların aksine), nesneleri yerel bir şeye takma ad vermek için ortak eşanlamlılar kullanmayı ve koddaki diğer adlara başvurmayı düşünün. Bu, veritabanı adlarına kodlanmış bağımlılıkları önler.

  • Veritabanı adlarına kodlanmış bağımlılıklardan kaçınırsanız, veritabanları aynı sunucuda birden fazla ortamı korumayı oldukça kolaylaştırır.

  • Özel toplama işlevleri gibi bazı şeyler yalnızca CLR zincirleri kullanılarak gerçekleştirilebilir. Ayrıca, bir işlem bağlamından kaçmak istiyorsanız (örneğin, geri alma kanıtı hata günlüğü için özerk bir işlem gerçekleştirme), geçerli işlem bağlamının dışında yerel bir bağlantı oluşturabildiğinden, bir CLR sproc kullanabilirsiniz.

Güvenlik

Girişler, SQL Server örneği düzeyinde tanımlanır, ancak her giriş, 'veritabanı kullanıcısı' olarak sıfır veya daha fazla veritabanına eşlenir. İzinler kam hem 'girişler' (sunucu) hem de 'kullanıcılar' (veritabanına) atanır, ancak bir veritabanında 'roller' normal olarak kullanılır. Kullanıcılar rollere aittir, izinler rollere atanır. SQL Server 2012 'sunucu rolleri' ekler.

  • SQL Server 2012, kullanıcı ve rol bilgilerinin o veritabanında yerel olarak tutulmasına izin veren 'kısmen içerilen veritabanları' adlı bir konsept sunar.

  • Bir veri tabanında, kullanıcı ve şema kavramı ayrılmıştır. Bir şemaya bir kullanıcı veya rol atanabilir ve bir şema veritabanı nesnelerinin sahibidir.

  • Windows kimlik doğrulaması, bir makine veya etki alanındaki bir kullanıcının bir SQL Server girişine kimliğini doğrulamak için sahne arkasındaki giriş bilgilerini kullanır. Bunun için IIRC desteği, Oracle için isteğe bağlı bir ekstradır.

  • Özel bir rol olan 'dbo' ('veritabanı sahibi' için kısa) belirli bir veritabanında bir çeşit süper kullanıcı ayrıcalığına sahiptir. Her veritabanı 'dbo' rolüne sahiptir ve kullanıcılar belirli bir veritabanındaki 'dbo' rolüne atanabilir.

  • Varsayılan bir 'dbo' şeması da vardır. Nesneler dbo şemasına ait olabilir - 'dbo' rolüne sahip kullanıcılar (veya sistem genelinde yönetici izinleri) tarafından oluşturulan nesneler, başka bir şema açıkça belirtilmedikçe, 'dbo' şemasına ait olmak için varsayılan olacaktır.

  • Güvenlik bilgileri tek bir veritabanının yedeğiyle tutulmaz. Kullanıcılar ve roller, yedeklemenin geri yüklendiği sunucuda açıkça yapılandırılmalıdır. SQL Server 2012, kullanıcı ve rol verilerinin yeni bir "kısmen içerilen veritabanları" özelliğine sahip bir veritabanında yerel olarak tutulmasına izin verir.

  • SQL Server 2005'ten, saklı yordamlar arayanın, içerik oluşturucunun, sahiplenme şemasının veya belirli bir kullanıcının güvenlik bağlamında yürütülebilir.

  • SQL Server görünümünde, alttaki tablolardaki izinler görünüme sahip olan şemanın izinlerine dayanır. Temel tablolardaki kullanıcı izinleri güvenliğe katılmamaktadır, ancak görünüm tanımı oturumdan bilgi alan filtreler içerebilir. Oracle'da, temel tablolardaki kullanıcı izinleri, hibelerin yapılandırmasına bağlı olarak görünümü etkileyebilir.

İzleme ve ayarlama

TBA - bellek mimarisi vs. SGA vs. kehanette

Yedekleme ve kurtarma

TBA

İşleme

Microsoft, SQL Server ile bir dizi çevreleyen aracı bir araya getirir. Tedarik edilen ana kalemlerden bazıları:

  • SQL Server Management Studio (SSMS): Bu, Oracle'daki SQL Developer'a benzer bir şey yapar - bir editör ve kod yürütme olanağı sağlar. Bazı yararlı özellikler arasında bir veritabanı nesnesi tarayıcısı ve bir sorgu planı görüntüleyicisi bulunur.

  • SQL Server Analiz Hizmetleri (SSAS): Bu, veritabanı sunucusundan farklı bir OLAP sunucusudur. İstemci-sunucu iletişimi için kendi sorgu dilini (MDX) ve API'sini (XML / A) kullanır. SQL ile sorgulanamaz. SSMS, MDX ve ham XMLA sorgularını düzenleme ve sonuçları görüntüleme özelliğine sahiptir. ASCMD.EXE adlı bir komut satırı sorgu aracı da sağlanır.

  • SQL Server Raporlama Servisleri (SSRS): Bu, raporları yayınlamak için web tabanlı bir raporlama aracıdır. BI Development Studio (BIDS) veya Rapor Oluşturucusu aracılığıyla raporlar oluşturulabilir ve bir web portalında yayınlanabilir. SSRS sunucusunun kendisi, sunucuyu programlı olarak yönetmek için bir web servis API'sine sahiptir. SSRS raporlarının yalnızca SQL Server değil, çeşitli kaynaklardan veri tüketebileceğini unutmayın. SSRS sunucularını programlı olarak yönetmek için RS.EXE adlı bir komut satırı aracı sağlanmıştır.

  • SQL Server Entegrasyon Hizmetleri (SSIS): Bu, SQL Server ile birlikte verilen bir ETL aracıdır. Mimari olarak, kod oluşturma aracı olmadığı için OWB veya ODI'den oldukça farklıdır. Çalışma zamanı istemci tarafında oturur ve veritabanı sunucusuna ayrı bir makinede olabilir. SSIS paketleri BIDS ile geliştirilebilir ve bağımsız olarak DTEXEC.EXE adlı bir komut satırı aracıyla yürütülebilir.

  • BI Development Studio (BIDS): Bu, raporlar, SSIS paketleri ve SSAS küpleri geliştirmek için görsel bir stüdyo tabanlı bir ortamdır. Diğer VS tabanlı geliştirme araçları kurulursa (örn. VS Professional), takım, tek bir ortama ve ortak bir proje grubuna entegre edilebilir.

  • Toplu kopya (BCP): SQL * Loader'a benzer bir komut satırı toplu ekleme / çıkarma aracı

  • SQLCMD: SQL * plus'a benzer bir komut satırı sorgu aracı

  • SQL Profiler: SQL Server, SSAS ve paketteki diğer araçlardan izleme bilgilerini yakalayabilen ve değerlendirebilen bir izleme ve profilleme aracı.

  • SQL Server Agent: Bir diğerinin periyodik işlerini çalıştırabilen bir iş planlama programı.


1
T-SQL - PL / SQL'de: T-SQL'in PL / SQL gibi farklı programlama içerikleri yoktur, bu nedenle saf SQL ve T-SQL deyimlerini özgürce karıştırabilirsiniz. Örneğin , eşdeğerini yapmak zorunda kalmadan TRUNCATE TABLE ...DML ile birlikte çalıştırabilirsiniz . T-SQL, ayrıca kullanarak istemciye sonuç kümelerini dönebilirsiniz PL / SQL Eğer oysa, diğer operasyonlar yanında olmalı çıktısını yönlendirmek bir tablo ya da diğer hedef haline s. Oracle'da, yalnızca saf SQL istemciye ayarlanan bir sonuç verebilir. EXECUTE IMMEDIATESELECTSELECT
Nick Chammas

1
Ayrıca, adı "sp_" ile başlayan saklı işlemlerin özel olarak ele alındığını da unutmayın. Sistem prosedürünü daha yeni bir SQL server sürümünden desteklemiyorsanız, saklı ürünlerinizi bu şekilde isimlendirmeyin. Bunu veritabanında geniş saklı yordamlar oluşturmak için teknik olarak kullanabilirsiniz, ancak bu önerilmez, çünkü gelecekteki sürümler aynı ada sahip yeni bir sistem saklı yordam oluşturabilir.
Kevin Cathcart

1
Burada kilit yükseltme hakkında biraz eklemeye değer mi? Bence Oracle halkının sınırsız sıra seviyeli kilitlere
Jack Douglas

8

Ana ürünümüz hem SQL Server hem de Oracle üzerinde çalışıyor, işte çalışmak zorunda olduğumuz bazı farklılıklar var ve akılda tutulması iyi olabilir:

  • Tarih-zaman kullanımı çok farklı: farklı hassasiyetler, çalışacak farklı fonksiyonlar

  • Boş dizeler Oracle'da NULL, SQL Server'da değil

  • Karakter kodlaması ve Unicode'un kullanımı çok farklı. SQL Server'da aynı veritabanında karıştırılmış normal ( varchar) veya Unicode ( nvarchar) sütunlara sahip olabilirsiniz , Oracle'da hangi seviyede kodlamanın kullanılacağına veritabanı düzeyinde karar verebilirsiniz.


Oracle ayrıca char / varchar2 ve nchar / nvarchar2 tiplerinin iki farklı kodlamayla karıştırılmasına izin verir - bkz. Unicode karakterler, Oracle veritabanında iki şekilde saklanabilir .
George3
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.