-------------------------------------------------------------------------------- DbaMgr - Una Piccola Console Alternativa per MSDE 1.0 -------------------------------------------------------------------------------- Premessa. Provengo dal mondo del Jet Engine, a partire da quello presente in VB3 e malgrado cio' non ho mai posseduto una copia di Access, ho sempre fatto tutto con Dao e Visual Data Manager. Ora che Microsoft ha rilasciato MSDE, sto provando ad utilizzare questo potentissimo strumento. Msde, al pari del fratello maggiore e' stato profondamente modificato, sia nelle configurazioni che nella necessita' di manutenzioni, per raggiungere quello che comunemento viene chiamato TCO=0 (Total Cost of Ownership =0). Purtroppo per noi pero', Microsoft non rilascia insieme a Msde alcuno strumento visuale per la gestione del motore o per la manutenzione ordinaria dello stesso. Viene solo fornito un interfaccia a carattere, oSql.exe che, se pure potente, e' indicata per utenti quantomeno esperti DBA o simili, non sicuramente nella media dei miei clienti. SQL7 stesso e' esso stesso uno strumento non proprio facilissimo.. Se il prodotto che cedo viene installato in aziende dove siano presenti SA in organico, non esiste problema, ed e' anche possibile che sia gia' presente il motore completo di SQL Server, ma, negli altri casi? Visto che non credo di poter pretendere di dire ai miei clienti di lanciare oSql e scrivere oscuri comandi T-SQL per effettuare operazioni quali un Backup o altro, da tutto cio' scaturisce questo progetto. L'idea deriva da un articolo di Peter Swaniker (vbpj july 1999 "Managing SQL Server 7.0"), che pero' si appoggia sull'oggetto Com dei Namespace, oggetto pero' non redistribuibile con soluzioni Msde, cosi' il form frmMain, inizialmente suo, e' stato riadattato, mentre il resto e' tutto mio, nel bene e nel male. Non pretende ne' di essere completo ne' di essere privo di Bug, ma puo' essere uno spunto e base anche per altri. Sviluppato con VB6 sp5, si appoggia completamente sull'oggetto Com SQL-DMO, che deve essere presente e registrato sulla macchina, che e' un'interfaccia di programmazione di SQL Server utile alla gestione sia del motore che degli oggetti da esso creati. Oltre ai Common Control e RichEdit, e' necessario il controllo OCX MSFlexGrid, MS DataGrid e Mdac. Non vuole sicuramente essere un'alternativa ad Enterprise Manager, e' sicuramente primitivo e semplicistico, ma permette la gestione di una semplice installazione di MSDE con i tasks amministrativi piu' comuni, d'altronde installazioni piu' complicate necessiterebbero comunque di un DBA e dell'utilizzo di Enterprise Manager). Gestione della sicurezza: sono implementate possibilita' di agire su restristizioni a livello di oggetto, ma solo a livello di database, tabelle, viste e stored procedures, a livello di oggetto Tabella e Vista le autorizzazioni possono essere a livello di Colonna. Non sono implementati gestione e visione dei Diagrammi. La gestione delle Tabelle supporta l'inserimento di un nuovo campo anche tra gli esistententi e non solo in fondo ad essi, ed altro. La gestione dei Default e' volutamente simile a quella di Enterprise Manager, che per feature da la possibilita' (errata) di inserire default non congruenti, ad esempio un valore alfabetico in un campo numerico. Ho riscontrato anche un bug di DMO che, nel recuperare informazioni relative ad un campo, talvolta ritorna dati non congruenti per le proprieta' Precision e Scale, specialmete NON congruenti se riferiti a campi Char o Varchar.... La gestione delle chiavi di integrita' avviene direttamente dal form di gestione indici e non tramite il mantenimento di diagrammi; ancora non ho capito perche' non posso modificare la attivazione delle relazioni per le repliche, poiche' DMO ritorna un errore di tentata modifica di Tipo di Chiave, Clustered, Fillfactor o Tabella Referenziata... , e non ho ancora capito la proprieta' da usare per settare la proprieta' "Verifica Dati Esistenti durante la Creazione", presente nell'Enterprise Manager..... Tali 2 proprieta' sono modificabili a piacere con EM (misteri MS). Le operazioni di Restore sono anche volutamente limitate, anche perche' un buon piano di Backup/restore non e' la cosa piu' semplice da concepire ed anche mantenere... Non avendo Tape, i Backup/restore sono solo possibili verso e da File fisici o Device, tra l'altro solo singoli e non multipli. Il reupero delle righe di una tabella potrebbe sicuramente essere piu' veloce con un altro metodo di accesso ai dati, ma ho voluto completamente basarmi su SQL-DMO. La piccola interfaccia di query, seppur limitata, consente di spezzare i comandi in transazioni separate da istruzioni GO, e consente il ritorno di QueryResults (Resultsets) multipli. BCP; consente operazioni di Bulk Copy veloci da e per Tabelle/Viste di Sql7, potendo scegliere tra importazione/esportazione da e verso file in formato Nativo di SQL7, formato a Carattere e il cosidetto Custom, con la creazione/utilizzo e modifica dei file di formato, con supporto dei formati di Sql 6.x; in caso di BCP IN, consente di caricare il file di formato sia dalla definizione della tabella di origine che da un file formato precedentemente definito, conpossibilita' di effettuare variazioni su questo. Sicuramente la possibilita' di costruire file batch da lanciare o anche l'utilizzo da riga di comando di BCP.exe possono dare risultati a dire poco stupefacenti, ma non sempre le situazioni sono di semplice comprensione... per operazioni Bulk Copy relativamente semplici e' una soluzione a mio vedere degna. Viene presentata anche una intefaccia visuale per la generazione di comandi INSERT INTO per il popolamento di tabelle con esportazione dei dati da tabelle esistenti; tra le varie opzioni: e' possibile esportare tutti i tipi di colonna ad eccezione di IMAGE e VARIANT (non disponibile per Sql7 ma aggiunto per la versione DbaMgr2k), in quanto per questo tipo di dati non e' possibile effettuare una corretta conversione in Testo; a livello di colonna: e' possibile includere/escludere alcune colonne, rinominarle in ALIAS nello script, caricare valori di DEFAULT o alternativi in caso di valori NULL, riposizionare ordinalmente le colonne; a livello di tabella: e' possibile specificare di cancellare il contenuto della tabella di destinazione con TRUNCATE oppure DELETE, settare il tipo di DATEFORMAT preferito, anche se la procedura provvede all'esportazione in formato canonico ODBC, settare il mantenimento o meno dei valori IDENTITY, il numero di righe per ogni batch, una clausola WHERE e ORDER BY con appropriata sintassi T-SQL, fornire un ALIAS per il nome della tabella di destinazione, se separare ogni n righe l'output su piu' files; e' anche possibile la generazione dei comandi DDL di generazione della tabella, in questo caso perdendo la possibilita' di fornire ALIAS, includendo/escludendo la generazione di Indici, Trigger, Indici Full Text, e le sole Chiavi INTERNE, in quanto non vengono generati ne' DDL di oggetti dai quali eventualmente la tabella puo' dipendere, ne' i relativi comandi INSERT INTO per la gestione dell'integrita' referenziale. Non e' neanche molto documentato, come al solito lo faro' dopo...... Sicuramente mi sta permettendo di imparare a conoscere meglio questo, per me, nuovo strumento che e' MSDE. Manca sicuramente un bel debug test, la gestione dei Mantainance Plan, la modifica visuale di viste, DTS. DbaMgr e' localizzabile intervenendo sui file di Linguaggio ".Lng" presenti nella cartella dell'applicazione; l'applicazione provvede a autogenerare i file di linguaggio Italiano ed Inglese in caso di loro mancanza, e, da tali basi, e' possibile localizzare l'interfaccia semplicemente copiando uno di questi file, mantenendo l'estensione ".Ln2", rinominarlo nella lingua desiderata (ad es.: Deutsch.Lng per il tedesco) e traducendo il file riga per riga. Una volta cosi' approntato il file di linguaggio, questi apparira' nei settaggi del Combo Box del form di connessione al Server. Non sono uno scatenato di interfacce, sono relativamente spartano... E' allegato anche il file .pdm per la creazione del pacchetto di installazione, unitamente alla sua controparte .ISS per InnoSetup 2.0.18/19, consultare comunque i BOL di sql7/msde per le dipendenze dell'oggetto SQL-DMO; notare che i BOL riportano di registrare sqldmo.rll, che e' una libreria di risorse NON registrabile mentre va registrata sqldmo.dll; l'allegato setup.lst per me ha funzionato su una macchina Win98 sp1 con appena installato MDAC 2.5 (2.50.4403.12) e chiaramente avendo settato correttamente i protocolli di comunicazione con il server con Cliconfg.exe; chiaramente ho anche modificato il setup.lst per fare registrare sqldmo.dll. Il file .lst non prevede l'installazione di mdac_typ.exe, mentre il file .iss si. Mi e' stato riferito di problemi di risoluzione di interfaccia circa alcune proprieta' di DMO neanche riportate dall'Object Browser... personalmente ho riscontrato il corretto funzionamento si con installato sp1 di MSDE, sqldmo.dll ver file 1999.04.12 ver 7.00.694 sp2 di MSDE, sqldmo.dll ver file 2000.02.08 ver 7.00.839 sp3 di MSDE, sqldmo.dll ver file 2000.10.24 ver 7.00.961 che sp4 di MSDE, sqldmo.dll ver file 2000.28.09 ver 7.00.1063 Nota.. Al sito http://www.imranweb.com/freesoft/ e' possibile scaricare una versione free di WinSQL e di Enhaced ISQL/w, progettate per Sql6.5 ma che funzionano abbastanza anche con Sql7 e MSDE1.0, che implementano utility potenti (e free). E' anche consigliato scaricare una utility Free "SqlUtil" (SqlUtil2k.exe) presso il sito www.innovmgtsys.com. ============================================================================ Se desiderate essere informati circa nuove versioni rilasciate di DbaMgr, inviami una e-mail con indicata la Vostra autorizzazione al trattamento dei dati personali ai sensi della legge 196/2003 e della Vostra volonta' di aderire a questo servizio. Il servizio e' gratuito e potra' essere sospeso in qualsiasi momento senza preventiva notifica. ============================================================================ ----- DISCLAIMER --------------------------------------------------------------- Tutto il materiale incluso prodotto dall'Autore, con l'esclusione delle dipendenze e librerie aggiuntive che sono distribuite con licenza limitata dei rispettivi produttori ed aventi diritto, e' copyright Insulin Power 1993-2007 di Andrea Montanari; e' utilizzabile senza restrizioni e distribuibile alle seguenti condizioni: In generale, DbaMgr puo' essere distribuito a corredo di altre applicazioni se: 1) non viene richiesto alcun ulteriore compenso extra per DbaMgr; 2) vengono mantenute inalterate le indicazioni dell'autore; 3) se da DbaMgr dovesse essere derivato un programma di amministrazione generale simile, senza una sostanziale modifica del codice sorgente originale, devono comunque rimanere soddisfatti i punti 1) e 2); 4) parti piu' o meno rilevanti del codice sorgente originale possono essere prelevate ed utilizzate in applicazioni gestionali senza limitazioni di sorta, fatto salvo quanto riportato al punto 3). Saro' molto lieto di essere informato di tali distribuzioni, con il vostro nome, nome dell'azienda, occupazione dell'azienda, applicativo al quale DbaMgr verra' aggiunto, dati che non verranno mai resi noti, ma solo per i miei record. Il materiale viene distribuito nella speranza che possa essere utile ad altri, senza alcuna garanzia, di nessun tipo. L'autore non si riterra' responsabile di alcun danno, perdita di dati o danneggiamenti che l'utilizzo del materiale incluso possa arrecare. USATELO A VOSTRO RISCHIO E PERICOLO -------------------------------------------------------------------------------- Doveste trovare bugs (e li troverete ...), errori o implementare migliorie, vi prego volermi contattare; sono graditi feed-back, commenti, consigli, ma non le dissacrazioni... ;-) Andrea Montanari andrea.sql@virgilio.it http://www.asql.biz/DbaMgr.shtm