it-swarm.it

Un DBA deve sapere come programmare in un linguaggio di sistema oltre a SQL?

In che misura un amministratore di database deve conoscere i linguaggi di programmazione a livello di sistema o di applicazione (ad esempio .NET o PHP) oltre a "solo SQL"?

Ai fini di questa domanda, per questa risposta non viene considerata alcuna versione specifica dello standard SQL (SQL ANSI 86, SQL ISO 87, SQL: 2008) poiché la domanda riguarda le lingue desktop o server al di fuori del regno di SQL.

20
p mac

Dipende.

In un grande negozio, forse non perché hai migliaia di server da gestire e i tuoi strumenti sono forniti. In un piccolo negozio, probabilmente avrai bisogno di maggiori conoscenze perché hai un mandato più ampio.

I linguaggi di scripting (ad esempio PowerShell, cmd.exe) sono sempre utili anche se per il monitoraggio, la distribuzione, ecc. Ho spesso avuto alcuni script Perl che dovevo mantenere (quasi). Poi ci sono i pacchetti ETL assortiti che dovresti conoscere.

Detto questo, la maggior parte dei DBA (che conosco) sarebbe in grado di scrivere roba CLR di base o conoscere bene PL/SQL. Per me, la linea di demarcazione sta conoscendo i modelli o l'architettura più ampi di .net o Java. Non ne ho bisogno come sviluppatore DB o DBA. Allo stesso modo che .net o PHP o Java Le scimmie non capiscono il design del database o l'architettura o il codice come me.

Personalmente, ho deciso di smettere di inseguire l'ultima o la migliore lingua client anni fa e concentrarmi sul lavoro con il database. Questo non mi rende un "non programmatore": se dovessi, avrei bisogno di impararlo di nuovo.

25
gbn

Ho conosciuto i DBA per cavarsela con poca o nessuna abilità di programmazione, ma ogni DBA che abbia mai considerato un bene aveva almeno ragionevoli capacità di programmazione. Uno o due che mi viene in mente avevano un background di sviluppo sostanziale ed erano abbastanza bravi sviluppatori a pieno titolo. C'è un giustoimporto di open-sourcetooling scritto da persone che lavorano come DBA nel loro lavoro quotidiano e IIRC il tizio che ha scritto TOAD lavorava come DBA.

A seconda del ruolo che potresti trovare, scrivere o mettere a punto le query, scrivere script per automatizzare le attività o consultare la progettazione delle applicazioni. In alcuni casi potresti pensare a un sacco di server tramite OEM o altri strumenti di monitoraggio.

Moderni ambienti di sviluppo "enterprise" come .Net o Java sono abbastanza complessi da consentire a uno sviluppatore di intraprendere una carriera solo specializzandosi in essi. Come DBA, in particolare nello spazio di sviluppo, con un conoscenza pratica di C # o Java potrebbe non danneggiare, ma probabilmente non passerai molto tempo a scrivere codice in essi.

Probabilmente otterrai più chilometraggio da qualsiasi strumento di scripting utilizzato sulla tua piattaforma, anche se molti sistemi espongono API .Net, Java, COM o web service. Se devi codificare qualcosa in base a queste API, avrai bisogno almeno di una conoscenza pratica di base di qualcosa che può consumare quell'API. Tuttavia, per fare ciò non sono in genere necessarie competenze avanzate di architettura dell'applicazione.

Alcuni sviluppatori avranno forti capacità di database, ma la paura irrazionale dei database è abbastanza comune nei circoli di sviluppo. Molti sviluppatori inoltre non riescono mai ad aggirare il paradigma delle "operazioni operative" che sta alla base di SQL. Come Dev DBA puoi trovarti a gestire le conseguenze di ciò e forse devi intervenire nel codice di procedura memorizzata per risolvere i problemi di prestazioni.

Anche l'ETL e gli strumenti che circondano il database possono rientrare nel mandato del DBA. Ho visto un sacco di ruoli DBA pubblicizzati che sembravano implicare una notevole quantità di lavoro di sviluppo back-end. Questo sarà più comune nelle aziende più piccole. Uno poster recente voleva integrare metriche personalizzate in Oracle Enterprise Manager, che ha un'API plugin per fare questo. È abbastanza comune vedere requisiti come questo alzarsi, ed essenzialmente l'unico modo per farlo è scrivere un codice di colla.

Ci sono molti "Strumenti per ragazzi" che lavorano in I.T. e possono fare un lavoro utile nonostante il parocalismo. Tuttavia, quando gli strumenti si esauriscono su Steam, spesso l'unico modo per fare qualcosa è effettivamente scrivere un po 'di codice per farlo. È qui che le abilità di programmazione separano gli uomini dai ragazzi.

Direi non tipicamente, ma non fa mai male. SQL Server è abbastanza grande da non pensare che una persona possa padroneggiare l'intero prodotto. Sono un DBA da SQL Server 4.2 e mi considero un esperto nella maggior parte dei settori, ma ammetto che non sarei in grado di scrivere una query MDX senza google a portata di mano in ogni fase del processo.

Quello che sto cercando di dire è che non puoi essere un esperto in tutto. Essere un ottimo DBA significa che dovresti essere bravo in T-SQL, ma probabilmente non sei molto bravo in .NET, o almeno non altrettanto efficace di altri che possono concentrare il loro tempo su .NET.

Powershell è buono a sapersi, così come l'ins-e-out di SSIS. Oltre a ciò, lascia gli altri linguaggi di sviluppo agli sviluppatori.

6
datagod

È stata la mia esperienza che, sebbene la maggior parte dei DBA abbia una sorta di background di sviluppo, non sono affatto tenuti a scrivere codice. Gli ottimi DBA con cui ho lavorato hanno una vasta conoscenza di una varietà di argomenti tra cui scripting Shell, sistemi operativi e conoscenze specialistiche delle applicazioni (es: PeopleSoft).

Avevo un istruttore di amministrazione del database presso la scuola elementare che ci ha fornito un elenco di domande a cui qualsiasi buon DBA (Oracle) dovrebbe essere in grado di rispondere: (posterò solo alcuni dei punti salienti dall'elenco di circa 40 )

  • Perché Oracle non crea automaticamente indici su colonne di chiavi esterne?
  • Quando si elimina un vincolo, quando si utilizzerà la clausola KEEP INDEX?
  • Quando useresti un IOT rispetto a un tavolo normale?
  • È una buona idea posizionare tabelle e indici in tablespace separati?
  • Qual è la differenza tra i tipi di dati VARCHAR e VARCHAR2?
  • È meglio utilizzare un trigger o un vincolo per applicare una regola aziendale?
  • Quando vorresti utilizzare l'autoallocazione rispetto a una dimensione di segmento fissa?
  • Quando useresti una tabella esterna rispetto a una tabella heap rispetto a una tabella B-tree?
  • Con quale frequenza è necessario eliminare il cestino?
  • Quali strategie consiglieresti per il backup di una tabella partizionata? Che ne dici di un indice partizionato?

(Oracle) I DBA devono conoscere queste cose per essere efficaci. La maggior parte degli sviluppatori che conosco (che codificano contro Oracle) sarebbero difficili da rispondere anche a uno o due di questi correttamente.

5
Aaron

Se sei il DBA, probabilmente stai lavorando nel regno delle prestazioni e della sicurezza (tra gli altri). Ciò potrebbe comportare la profilazione e l'assistenza nell'ottimizzazione delle applicazioni client su cui stanno lavorando gli sviluppatori. Pertanto, non sarebbe certo male conoscere le basi delle lingue utilizzate dagli sviluppatori e come interfacciarsi con il server di database. Per SQL Server, questo è probabilmente .NET. Per MySQL, probabilmente una combinazione di php o Java.

Ad esempio, se il server è sottoposto a pressioni per i thread client, aiuta a essere in grado di informare gli sviluppatori che dovrebbero utilizzare istanze singleton per le loro ObjectDataSource in modo che possano riutilizzare una singola connessione al database. Inoltre, assicurati di utilizzare correttamente le query con parametri per limitare l'iniezione SQL. Roba del genere.

Non farai alcun programmazione nel senso di sviluppo di applicazioni client se sei strettamente un DBA, ma dovresti sapere come funzionano (in generale).

5
db2

Bene, vediamo, Oracle usa PL/SQL che è molto simile a Pascal (un linguaggio che era usato per produrre il codice dell'app desktop ma che è caduto negli ultimi anni, e gli sviluppatori sono passati a Delphi, che alcuni sono passati da lì a .NET) e Oracle ora supporta anche Java per alcune attività. Poiché un DBA Oracle deve conoscere tutti gli aspetti del sistema per essere apprezzato, direi che conoscendo Pascal e Java sarebbe un requisito.

TSQL ha la capacità di scrivere codice gestito .NET (CLR) per alcune delle funzionalità di Sql Server, e quindi un buon DBA dovrebbe probabilmente conoscerlo (ma non è sempre possibile usarlo nelle versioni precedenti, quindi molti DBA tendono a rifuggire da quel set di funzionalità nella mia esperienza).

Quindi questi sono i due grandi, e quelli a cui la maggior parte delle persone si riferisce quando chiedono come stai chiedendo. Non conosco tutti gli altri motori per sapere cosa fanno e non supportano, ma so che molti altri hanno l'integrazione del linguaggio oltre a SQL.

4
jcolebrand