Sono un Oracle DBA che ha anche un'esperienza Sybase.
Quali sono le principali differenze architettoniche e concettuali tra le due piattaforme RDBMS?
Una risposta simile alla domanda SQL Server-> Oracle qui sarebbe di grande utilità.
Sono un Oracle DBA che ha anche un'esperienza Sybase.
Quali sono le principali differenze architettoniche e concettuali tra le due piattaforme RDBMS?
Una risposta simile alla domanda SQL Server-> Oracle qui sarebbe di grande utilità.
Risposte:
Mi sono scambiato tra lavorare su Oracle e SQL Server negli ultimi anni e ho scritto un clamore andando avanti dall'altra parte . Esistono numerose differenze idiomatiche e architettoniche e varie parti della terminologia vengono utilizzate in modo diverso dal fornitore e dalle comunità di sviluppatori / DBA che circondano ciascun prodotto.
Architettura fisica
SQL Server organizza varie cose in modo leggermente diverso da Oracle e ha uno o due concetti chiave che non hanno analoghi diretti in Oracle.
Un "Database" è un elemento separato in SQL Server, con le proprie autorizzazioni utente, schemi / spazi dei nomi e spazio di archiviazione. Se hai familiarità con Sybase, funzionano in modo analogo ai database in Sybase, a causa delle origini comuni del prodotto.
I filegroup sono approssimativamente equivalenti ai tablespace, sebbene siano locali in un database.
Uno schema è un concetto distinto da un utente del database in SQL Server, sebbene gli utenti possano avere uno schema predefinito.
MVCC funziona in modo leggermente diverso in SQL Server. È una funzionalità relativamente recente, che mantiene diverse copie di una riga fino a quando non vengono rilasciati i blocchi sulla versione precedente. SQL Server non ha equivalenti diretti a un segmento di rollback. Non è attivo per impostazione predefinita nei database di SQL Server.
Tempdb è molto più utilizzato in SQL Server. Il sistema lo utilizza per tabelle temporanee e risultati di join intermedi. Maggiori informazioni su tempdb più tardi.
Il partizionamento delle tabelle è un po 'più complicato di Oracle. È necessario impostare una funzione di partizione che crea una chiave di partizione da qualunque cosa la si stia fornendo, quindi uno schema di partizione su quella funzione di partizione. Lo schema di partizione si comporta un po 'come un filegroup in quanto si crea quindi la tabella sullo schema di partizione.
Lo scambio di partizioni dentro e fuori richiede l'impostazione di un vincolo su una tabella vuota nella struttura corretta. Il vincolo garantisce che i valori della chiave di partizione siano appropriati alla partizione che si intende scambiare in essa.
Le viste materializzate sono chiamate viste indicizzate in SQL Server. La GROUP BY
clausola ha un CUBE
operatore e la documentazione allude a una funzione di riscrittura delle query. Tuttavia, questa funzionalità non è ben documentata e potrebbe non essere terribilmente matura. YMMV.
SQL Server non supporta transazioni autonome, sebbene supporti il commit in due fasi tramite i protocolli di transazione XA o OLEDB.
Gli indici cluster sono leggermente diversi dalle tabelle ordinate per indice in Oracle, in quanto non richiedono che tutte le colonne della tabella partecipino all'indice cluster. Sono molto più ampiamente utilizzati nell'architettura di SQL Server rispetto agli IOT in Oracle.
SQL Server supporta gli indici di copertura, ma non ha indici di join. Gli indici bitmap non sono supportati, sebbene disponga di un operatore di intersezione / trasformazione stella che può calcolare intersezioni senza colpire la tabella dei fatti.
Le sequenze sono un'aggiunta relativamente recente a SQL Server. Le chiavi tradizionalmente autoincrementate vengono eseguite tramite colonne di identità. È possibile caricare i valori in una colonna identità attraverso set identity_insert on
.
Programmazione
T-SQL idiomatico presenta alcune differenze rispetto a PL / SQL idiomatico. Funziona in modo abbastanza diverso che alcune delle differenze paradigmatiche meritano di essere spiegate in modo più approfondito.
T-SQL non ha il concetto di un pacchetto. Tutte le procedure e le funzioni memorizzate in un database vivono in uno spazio dei nomi comune, sebbene gli schemi possano essere utilizzati per suddividere questo e lo spazio dei nomi è locale in un database.
Scopri come utilizzare le tabelle temporanee e SELECT INTO
. È abbastanza raro incontrare il codice T-SQL che in realtà ha bisogno di un cursore; le tabelle temporanee consentono alle operazioni di essere suddivise in passaggi che possono essere eseguiti con le operazioni impostate. SELECT INTO
in tempdb è minimamente registrato ed è minimamente registrato in determinate modalità di recupero anche sui database degli utenti, quindi è altrettanto veloce dell'operatore di query che persiste un risultato di join intermedio.
T-SQL idiomatico utilizzerà le tabelle temporanee nel tipo di ruoli che vedresti visualizzare le variabili del cursore in PL / SQL, ma utilizzerà molto di più le operazioni impostate. Le tabelle temporanee possono tuttavia rendere il codice abbastanza ottuso, quindi usalo con cura.
Il dizionario dei dati di sistema era molto più ottuso di quello di Oracle nelle versioni precedenti, ma è migliorato molto con SQL Server 2005. Sebbene gli strumenti forniti da Microsoft abbiano un sacco di elementi introspettivi integrati nell'esploratore SSMS, vale comunque la pena conoscere il tuo intorno al dizionario dei dati. E non fa differenza tra ALL
, USER
e DBA
vista degli oggetti DB, però.
SSMS ha un visualizzatore del piano di query integrato.
Gli identificatori nel codice T-SQL possono essere citati con [] e, se presenti, possono contenere tutti i tipi di immondizia. Tuttavia, se si cattura chiamare una colonna 'Direct / Transfer', ci sarà strappare il vostro intestino fuori.
SQL Server ha funzioni di finestra (dal 2005 IIRC), quindi ora puoi fare ordini, eseguire somme e simili all'interno dei gruppi.
T-SQL non ha equivalenti diretti a CONNECT BY
, sebbene la ricorsione possa essere effettuata attraverso CTE ricorsivi.
Se è necessario scrivere codice che passa attraverso i database (al contrario degli schemi all'interno di un database), prendere in considerazione l'uso di sinonimi pubblici per aliasare gli oggetti in qualcosa di locale e fare riferimento agli alias nel codice. Questo evita dipendenze hard-coded sui nomi dei database.
Se si evitano dipendenze codificate dai nomi dei database, i database semplificano la gestione di più ambienti sullo stesso server.
Alcune cose, come le funzioni di aggregazione personalizzate, possono essere implementate solo usando gli sprocs CLR. Inoltre, se si desidera uscire da un contesto di transazione (ad es. Per simulare una transazione autonoma per la registrazione degli errori a prova di rollback) è possibile utilizzare uno sproc CLR, in quanto può creare una connessione locale al di fuori del contesto di transazione corrente.
Sicurezza
Gli accessi sono definiti a livello di istanza di SQL Server, ma ogni accesso viene mappato su zero o più database come "utente del database". Le autorizzazioni possono essere assegnate sia agli "accessi" (server) che agli "utenti" (database) ma in un "database" vengono normalmente utilizzati. Gli utenti appartengono ai ruoli, le autorizzazioni sono assegnate ai ruoli. SQL Server 2012 aggiunge "ruoli server".
SQL Server 2012 introduce un concetto chiamato "database parzialmente contenuti", che consente di mantenere le informazioni su utenti e ruoli locali in quel database.
All'interno di un database, il concetto di utente e schema è separato. Un utente o un ruolo può essere assegnato a uno schema e uno schema possiede oggetti di database.
L'autenticazione di Windows utilizza le informazioni di accesso dietro le quinte per autenticare un utente su un computer o dominio su un accesso di SQL Server. Il supporto IIRC per questo è un extra opzionale su Oracle.
Un ruolo speciale, "dbo" (abbreviazione di "proprietario del database") ha una sorta di privilegio di superutente all'interno di un database specifico. Ogni database ha un ruolo 'dbo' e gli utenti possono essere assegnati al ruolo 'dbo' su un dato database.
C'è anche uno schema 'dbo' predefinito. Gli oggetti possono essere di proprietà dello schema dbo - Gli oggetti creati dagli utenti con il ruolo "dbo" (o autorizzazioni di amministratore a livello di sistema) saranno automaticamente di proprietà dello schema "dbo" a meno che un altro schema non sia fornito esplicitamente.
Le informazioni di sicurezza non vengono conservate con un backup di un singolo database. Gli utenti devono e i ruoli devono essere configurati in modo esplicito sul server in cui viene ripristinato il backup. SQL Server 2012 consente ai dati di utenti e ruoli di essere archiviati localmente in un database con una nuova funzionalità "database parzialmente contenuti".
Da SQL Server 2005, le procedure memorizzate possono essere eseguite nel contesto di sicurezza del chiamante, del creatore, dello schema proprietario o di un utente specificato.
In una vista su SQL Server, le autorizzazioni per le tabelle sottostanti si basano sulle autorizzazioni dello schema proprietario della vista. Le autorizzazioni utente sulle tabelle sottostanti non partecipano alla sicurezza, sebbene una definizione di vista possa includere filtri che ottengono informazioni dalla sessione. In Oracle, le autorizzazioni utente sulle tabelle sottostanti possono influire sulla vista, a seconda della configurazione delle sovvenzioni.
Monitoraggio e messa a punto
TBA - architettura di memoria vs. SGA ecc. In Oracle
Backup e ripristino
TBA
Tooling
Microsoft raggruppa un set di strumenti circostanti con SQL Server. Alcuni dei principali articoli forniti sono:
SQL Server Management Studio (SSMS): fa qualcosa di simile a SQL Developer su Oracle: fornisce un editor e una funzione di esecuzione del codice. Alcune utili funzioni includono un browser degli oggetti di database e un visualizzatore del piano di query.
SQL Server Analysis Services (SSAS): si tratta di un server OLAP distinto dal server di database. Utilizza il proprio linguaggio di query (MDX) e API (XML / A) per le comunicazioni client-server. Non può essere interrogato con SQL. SSMS dispone di una funzione per la modifica di query MDX e XMLA non elaborate e la visualizzazione dei risultati. Viene inoltre fornito uno strumento di query della riga di comando denominato ASCMD.EXE.
SQL Server Reporting Services (SSRS): si tratta di uno strumento di reporting basato sul Web per la pubblicazione di report. I report possono essere creati tramite BI Development Studio (BIDS) o Report Builder e pubblicati su un portale Web. Il server SSRS stesso ha un'API del servizio Web per la gestione programmatica del server. Si noti che i report SSRS possono consumare dati da una varietà di origini, non solo da SQL Server. Viene fornito uno strumento da riga di comando chiamato RS.EXE per la gestione programmatica dei server SSRS.
SQL Server Integration Services (SSIS): questo è uno strumento ETL fornito con SQL Server. Dal punto di vista architettonico, è abbastanza diverso da OWB o ODI in quanto non è uno strumento di generazione del codice. Il runtime si trova sul lato client e può trovarsi su una macchina separata dal server del database. I pacchetti SSIS possono essere sviluppati con BIDS ed eseguiti indipendentemente con uno strumento da riga di comando chiamato DTEXEC.EXE.
BI Development Studio (BIDS): si tratta di un ambiente basato su Visual Studio per lo sviluppo di report, pacchetti SSIS e cubi SSAS. Se sono installati altri strumenti di sviluppo basati su VS (ad esempio VS Professional), gli strumenti possono essere integrati in un unico ambiente e in un raggruppamento di progetti comune.
Bulk copy (BCP): uno strumento di inserimento / estrazione in blocco della riga di comando simile a SQL * Loader
SQLCMD: uno strumento di query della riga di comando simile a SQL * plus
SQL Profiler: uno strumento di tracciabilità e profilazione in grado di acquisire e valutare informazioni di traccia da SQL Server, SSAS e altri strumenti nella suite.
Agente SQL Server: un'utilità di pianificazione dei lavori in grado di eseguire lavori periodici di un tipo di altro.
TRUNCATE TABLE ...
DML a fianco senza dover fare l'equivalente di EXECUTE IMMEDIATE
. In T-SQL, è anche possibile restituire set di risultati al client utilizzando SELECT
insieme ad altre operazioni, mentre in PL / SQL è necessario indirizzare l'output di SELECT
s in una tabella o altra destinazione. In Oracle, solo SQL puro può restituire un set di risultati al client.
Il nostro prodotto principale funziona sia su SQL Server che su Oracle, qui ci sono alcune altre differenze che abbiamo dovuto aggirare e potrebbe essere utile tenere presente:
La gestione della data e dell'ora è molto diversa: diverse precisioni, diversi set di funzioni con cui lavorare
Le stringhe vuote sono NULL in Oracle, non in SQL Server
La gestione della codifica dei caratteri e Unicode è molto diversa. In SQL Server puoi avere colonne normali ( varchar
) o Unicode ( nvarchar
) miste nello stesso database, in Oracle decidi a livello di database quale tipo di codifica usare.