Esportare un inventario di Access (AccessToSQL)
Se si dispone di più database di Access e non si è certi di quali eseguire la migrazione in SQL Server, è possibile esportare un inventario di tutti i database di Access in un progetto. È quindi possibile esaminare ed eseguire query sui metadati di inventario per determinare i database e gli oggetti all'interno di tali database di cui eseguire la migrazione. Questo inventario consente di trovare rapidamente le risposte alle domande, ad esempio l'elenco seguente:
- Quali sono i database più grandi?
- Chi possiede la maggior parte dei database?
- Quali database contengono le stesse tabelle?
- Quali database non sono stati modificati negli ultimi sei mesi?
- Quali database contengono informazioni private?
Gli esempi di query usati per rispondere a queste domande vengono forniti alla fine di questo articolo.
Metadati esportati
SSMA esporta i metadati relativi a database di Access, tabelle, colonne, indici, chiavi esterne, query, report, macro e moduli. I metadati relativi a ognuna di queste categorie di elementi vengono esportati in una tabella separata. Per gli schemi di queste tabelle, vedere Schemi di inventario di Access.
Esportare i dati di inventario
Per esportare un inventario di Access, è prima necessario aprire o creare un progetto SSMA e quindi aggiungere il database di Access da analizzare. Dopo aver aggiunto database a un progetto SSMA, si esportano i metadati relativi a questi database in un database e uno schema di SQL Server specificati. Se necessario, SSMA crea tabelle per archiviare i metadati. SSMA aggiunge quindi i metadati relativi ai database di Access al database di SQL Server.
Nota
Un database di Access può essere suddiviso in più file: un database back-end che contiene tabelle e database front-end che contengono query, moduli, report, macro e collegamenti. Se si vuole eseguire la migrazione di un database suddiviso in SQL Server, aggiungere il database front-end a SSMA.
Le istruzioni seguenti descrivono come creare un progetto, aggiungere database al progetto, connettersi a SQL Server e quindi esportare i dati di inventario.
Creare un progetto
Aprire SSMA per Access.
Scegliere Nuovo progetto dal menu File.
Verrà visualizzata la finestra di dialogo Nuovo progetto .
Nella casella Nome immettere un nome per il progetto.
Nella casella Posizione immettere o selezionare una cartella per il progetto.
Nella casella combinata Esegui migrazione a selezionare la versione di destinazione di cui si vuole eseguire la migrazione e quindi selezionare OK.
Per altre informazioni sulla creazione di progetti, vedere Creazione e gestione di progetti.
Trovare e aggiungere database
Scegliere Trova database dal menu File.
Nella Procedura guidata Trova database immettere l'unità, il percorso del file o il percorso UNC da cercare. In alternativa, selezionare Sfoglia per selezionare l'unità o la cartella di rete.
Selezionare Aggiungi per aggiungere la posizione alla casella di riepilogo.
Ripetere i due passaggi precedenti per aggiungere altre posizioni di ricerca.
Facoltativamente, aggiungere criteri di ricerca per perfezionare l'elenco di database restituiti.
Importante
La casella di testo Tutto o parte del nome file non supporta caratteri jolly.
Selezionare Analisi.
Viene visualizzata la pagina di Analisi. Vengono visualizzati i database trovati e lo stato di avanzamento della ricerca. Per arrestare la ricerca, selezionare Arresta.
Nella pagina Seleziona file, selezionare ogni database da aggiungere al progetto.
È possibile utilizzare i pulsanti Seleziona tutto e Cancella tutto nella parte superiore dell'elenco per selezionare o cancellare tutti i database. È anche possibile tenere premuto il tasto CTRL per selezionare più righe oppure tenere premuto il tasto MAIUSC per selezionare un intervallo di righe.
Selezionare Avanti.
Nella pagina Verifica, selezionare Fine.
Per altre informazioni sull'aggiunta di database ai progetti, vedere Aggiunta e rimozione di file di database di Access.
Connessione a SQL Server
Scegliere Connessione a SQL Server dal menu File.
Nella finestra di dialogo per la connessione al server immettere o selezionare il nome dell'istanza di SQL Server.
Se ci si connette all'istanza predefinita nel computer locale, è possibile immettere localhost o un punto (.).
Se ci si connette all'istanza predefinita in un altro computer, immettere il nome del computer.
Se si sta eseguendo la connessione a un'istanza denominata, immettere il nome del computer, una barra rovesciata e il nome dell'istanza. Ad esempio: MyServer\MyInstance.
Nella casella Database immettere il nome del database di destinazione per i metadati esportati.
Se l'istanza di SQL Server è configurata per accettare connessioni su una porta non predefinita, immettere il numero di porta usato per le connessioni di SQL Server nella casella Porta server. Per l’istanza predefinita di SQL Server, la porta è la numero 1433. Per le istanze denominate, SSMA prova a ottenere il numero di porta dal servizio SQL Server Browser.
Nell'elenco a discesa Autenticazione selezionare il tipo di autenticazione da usare per la connessione. Per usare l'account di Windows corrente, selezionare Autenticazione di Windows. Per usare un account di accesso di SQL Server, selezionare Autenticazione di SQL Server e quindi specificare un nome utente e una password.
Per altre informazioni sulla connessione a SQL Server, vedere Connessione a SQL Server (AccessToSQL).
Esportare le informazioni sull'inventario
In Metadata Explorer di Access, espandere Access-metabase.
Selezionare la casella di controllo accanto a Database.
Per omettere singoli database o oggetti database, espandere la cartella Database e quindi deselezionare la casella di controllo accanto al database o all'oggetto database.
Fare clic con il pulsante destro del mouse su Database e quindi selezionare Esporta schema.
Nella finestra di dialogo Seleziona schema per l'esportazione selezionare lo schema di destinazione per i metadati esportati e quindi selezionare OK.
Ogni volta che si esportano metadati, SSMA accoda i dati all'inventario. I dati esistenti nell'inventario non vengono aggiornati o eliminati.
Eseguire query sui metadati esportati
Dopo aver esportato i metadati relativi ai database di Access, è possibile eseguire query sui metadati. Le istruzioni seguenti descrivono l’uso della finestra Editor di query in SQL Server Management Studio per eseguire query.
Metadati delle query
Dal menu Start, scegliere Tutti i programmi, scegliere Microsoft SQL Server 2005 o Microsoft SQL Server 2008 o Microsoft SQL Server 2012 e quindi SQL Server Management Studio.
Nella finestra di dialogo Connetti al server verificare le impostazioni e quindi selezionare Connetti.
Selezionare Nuova query sulla barra degli strumenti di Management Studio per aprire Editor di query.
Nella finestra Editor di query immettere una query. Nella sezione seguente sono mostrati alcuni esempi.
Premere F5 per eseguire la query.
Esempi di query
Prima di eseguire una delle query seguenti, è necessario eseguire una query database_name USE per assicurarsi che le query vengano eseguite sul database che contiene i metadati esportati. Ad esempio, se i metadati sono stati esportati in un database denominato MyAccessMetadata, aggiungere l'istruzione seguente all'inizio del codice Transact-SQL:
USE MyAccessMetadata;
GO
Gli esempi seguenti utilizzano tutti lo schema dbo. Se i metadati sono stati esportati in un altro schema, assicurarsi di modificare lo schema quando si eseguono queste query.
Quali tabelle e colonne si trovano in questi database?
La query seguente unisce le tabelle che contengono metadati di colonna, tabella e database e quindi restituisce i nomi di tutti i database, le tabelle e le colonne, ordinati in base al nome della colonna:
SELECT DatabaseName,
TableName,
ColumnName
FROM dbo.SSMA_Access_InventoryColumns C
INNER JOIN dbo.SSMA_Access_InventoryTables T
ON C.TableId = T.TableId
INNER JOIN dbo.SSMA_Access_InventoryDatabases D
ON T.DatabaseId = D.DatabaseId
ORDER BY ColumnName;
Quali sono i database più grandi?
La query seguente restituisce il nome del database, le dimensioni del file e il numero di tabelle in ogni database di Access, ordinati in base alle dimensioni del file:
SELECT DatabaseName,
FileSize,
TablesCount
FROM dbo.SSMA_Access_InventoryDatabases
ORDER BY FileSize DESC;
Chi è il proprietario della maggior parte dei database?
La query seguente restituisce il nome del database e il proprietario di ogni database di Access, ordinati in base al proprietario.
SELECT DatabaseName, FileOwner
FROM dbo.SSMA_Access_InventoryDatabases
ORDER BY FileOwner;
Quali database contengono le stesse tabelle?
La query seguente usa una sottoquery per trovare tutti i nomi di tabella visualizzati più volte nell'elenco delle tabelle e quindi usa questo elenco di tabelle per ottenere il nome del database. I risultati vengono restituiti come nome del database e quindi come nome della tabella e vengono ordinati in base al nome della tabella.
SELECT DatabaseName,
TableName
FROM dbo.SSMA_Access_InventoryTables T
INNER JOIN dbo.SSMA_Access_InventoryDatabases D
ON D.DatabaseId = T.DatabaseId
WHERE TableName IN (
SELECT TableName
FROM dbo.SSMA_Access_InventoryTables
GROUP BY TableName
HAVING COUNT(*) > 1
)
ORDER BY TableName;
Quali database non sono stati modificati negli ultimi sei mesi?
La query seguente prende la data corrente, ottiene il valore del mese per sei mesi fa e quindi restituisce un elenco di database con una data modificata superiore a sei mesi fa.
SELECT DatabaseName,
DateModified
FROM dbo.SSMA_Access_InventoryDatabases
WHERE DATEDIFF(MONTH, DateModified, GETDATE()) > 6
ORDER BY DateModified;
Quali database contengono informazioni private?
I database di Access potrebbero contenere informazioni riservate o personali. È possibile spostare questi database in SQL Server per sfruttare le relative funzionalità di sicurezza. Se si sa che le colonne contenenti dati sensibili hanno un nome specifico o contengono caratteri specifici, è possibile usare una query per trovare tutte le colonne che contengono tali informazioni. Ad esempio, è possibile trovare tutte le colonne che includono la stringa "salary". La query restituisce quindi il nome del database, il nome della tabella e il nome della colonna.
SELECT DatabaseName,
TableName,
ColumnName
FROM dbo.SSMA_Access_InventoryColumns C
INNER JOIN dbo.SSMA_Access_InventoryTables T
ON C.TableId = T.TableId
INNER JOIN dbo.SSMA_Access_InventoryDatabases D
ON T.DatabaseId = D.DatabaseId
WHERE ColumnName LIKE '%salary%';
Se non si conosce il nome della colonna, è possibile scrivere una query per restituire tutte le colonne. A tale scopo, rimuovere la clausola WHERE dalla query precedente.