Visualizzazione post con etichetta Lo sapevi che. Mostra tutti i post
Visualizzazione post con etichetta Lo sapevi che. Mostra tutti i post

mercoledì 20 novembre 2019

Gestire i servizi di una macchina remota

Se c'è la necessità di gestire ( stoppare/ riavviare ) i servizi su una macchina remota, ma non è possibile accedervi remotamente, è possibile usare il metodo di seguito descritto.


  • eseguire Start / Esegui. Scrivere "mmc".
  • File / Add / Remove Snap-in... Cliccare su "Add..."
  • Cercare "Services" e cliccare "Add"
  • selezionare "Another computer:" e inserire il nome / Indirizzo IP della macchina remota. Cliccare su Fine, chiudere ecc.
Sarà possibile a questo punto gestire i servizi come se fossero sulla macchina locale.


link : https://stackoverflow.com/questions/187836/how-do-i-restart-a-service-on-a-remote-machine-in-windows

giovedì 25 luglio 2019

Dimensione tabelle in Sql Server

Ci sono diversi modi per conoscere l'effettiva dimensione in Kb/Mb di una tabella

Usando Sql Server Management Studio è possibile cliccare con il tasto destro sul database, scegliere dal menu la voce Report, quindi la voce "Report Standard" e infine la voce "Spazio su disco utilizzato per tabella".


Sempre con Sql Server Management Studio, selezionare prima la voce "Tabelle" nell'elenco di sinistra. Nella finestra "Dettagli esplora oggetti", una volta visualizzate tutte le tabelle è possibile indicare quali colonne vogliamo visualizzare. Fra le colonne che per default sono deselezionate ci sono : "Spazio utilizzato per i dati (KB)" e "Spazio utilizzato per gli indici (KB)"


L'ultimo modo per determinare lo spazio utilizzato dalle tabelle e degli indici di un database è quello di eseguire la seguente query (thanks Gianni GC Ceccanti 19/03/2021): 

select cast(Tabella as char(50)) as "Tabella", 
       max(Record) as "N. Record",  --max perché in base agli inidici cambia, il max corrisponde al totale sulla tabella
       sum(AllocatoTabellaMB) + sum(AllocatoIndiceMB) as "Totale Allocato (MB)", -- allocato su disco
       sum(AllocatoTabellaMB) as "Allocato Tabella (MB)", -- allocato su disco
       sum(AllocatoIndiceMB) as "Allocato Indice (MB)", -- allocato su disco
       sum(InutilizzatoMB) as "Inutilizzato (MB)" -- differenza tra spazio allocato e spazio utilizzato, quindi disponibile prima che SQLServera allochi nuovo spazio
  FROM (
      SELECT t.name AS "Tabella",
            p.rows as "Record",
            isnull( i.name , '_tabella_' ) as Tipo,
            (case when i.name is null then  CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) else 0 end) AS AllocatoTabellaMB,
            (case when i.name is not null then  CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) else 0 end) AS AllocatoIndiceMB,
            CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS InutilizzatoMB
       FROM sys.tables t
            INNER JOIN sys.indexes i ON t. object_id = i.object_id
            INNER JOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
            INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id
            LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id
      WHERE t.name NOT LIKE 'dt%' 
         AND t.is_ms_shipped = 0
         AND i.OBJECT_ID > 255 
      GROUP BY  t.name, s.name, p.rows, i.name
      ) as innertable
GROUP BY Tabella
ORDER BY sum(AllocatoTabellaMB) + sum(AllocatoIndiceMB) DESC, Tabella
La query precedente, qui sotto, non teneva conto degli indici:
SELECT 
    t.NAME AS TableName,
    s.Name AS SchemaName,
    p.rows AS RowCounts,
    SUM(a.total_pages) * 8 AS TotalSpaceKB, 
    CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
    SUM(a.used_pages) * 8 AS UsedSpaceKB, 
    CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB, 
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
    CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
WHERE 
    t.NAME NOT LIKE 'dt%' 
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255 
GROUP BY 
    t.Name, s.Name, p.Rows
ORDER BY 
    t.Name
Riferimenti : 
https://stackoverflow.com/questions/7892334/get-size-of-all-tables-in-database

mercoledì 15 febbraio 2017

Trasferimento dati fra versioni diverse di SQL Server

Come è risaputo su Sql Server non è possibile ripristinare un file di backup creato con una versione più recente.

Certe volte non è possibile neppure usare software di terze parti in quanto i due server non comunicano direttamente fra loro.

Sql Server Management Studio ci viene incontro. Permette infatti la creazione di script di creazione e di popolamento delle tabelle.

Si inizia sulla macchina su cui dobbiamo fare il backup, cliccando con il tasto destro sul database da copiare e scegliendo la voce "Tasks" e successivamente la voce "Generate Scripts".
A questo punto, tramite un wizard, viene richiesto se trasferire tutto il database o scegliere manualmente le tabelle/viste da trasferire.

Nella pagina successiva si può scegliere la destinazione del file che conterrà tutti comandi SQL.
Per default Management Studio esporta solo lo script per ricreare la struttura della tabella.
Premendo il tasto "Advanced" è possibile indicare che si vogliono anche i dati.
E' sufficiente impostare a "Schema and Data" la voce "Types of data to script".
Impostare anche a False la voce "Script of USE Database" se vogliamo importare i dati in un database con un nome diverso.
Impostando a True la voce "Script Indexes" vengono generate le istruzioni per la creazione degli indici collegati alle tabelle.
Al termine dell'operazione avremo un file .sql con tutte le istruzioni SQL per la creazione delle tabelle con i loro indici e il loro popolamento.

A questo punto è necessario copiare il file sulla macchina su cui si vuole ripristinare i dati, accedere al prompt dei comandi e digitare le seguenti istruzioni:
SQLCMD [-S server] [-U utente] [-P password] [-d database] [-i nome_file_sql]
Esempio:
SQLCMD -S localhost -U sa -P 12345678 -d DITTA1 -i c:\temp\ditta1.sql



giovedì 9 ottobre 2014

Estrarre il giorno della settimana dalla data da linea di comando

Certe volte è necessario, direttamente da linea di comando, inserire nel nome di un file il giorno della settimana, per esempio per distinguere i backup.

Sfortunatamente il comando DATE non visualizza il giorno della settimana se non modificando a livello di sistema il formato della data, ma la modifica potrebbe creare altri problemi ad altri programmi.

Di seguito il comando, da inserire in un batch, che restituisce in una variabile di sistema il giorno della settimana. Variabile da utilizzare nel formare il nome del file.
for /F %%A in ('WMIC Path Win32_LocalTime Get DayOfWeek /format:list ^| findstr "=" ') DO (set %%A )
Il comando attribuisce alla variabile DayofWeek il giorno della settimana. Esempio mercoledi = 3.

Di seguito un semplice batch per la copia distinta per giorno della settimana di un database di SqlServer

-------------------------------

rd /s /q c:\backupSQL
md c:\backupSQL
sqlcmd -U user -P password -S server -i c:\backupSQL.txt

for /F %%A in ('WMIC Path Win32_LocalTime Get DayOfWeek /format:list ^| findstr "=" ') DO (set %%A )


echo > \\nas\backupSQL\SIGLAPP-%DayOfWeek:~0,1%.BAK

xcopy c:\backupSQL\SIGLAPP.BAK \\nas\backupSQL\SIGLAPP-%DayOfWeek:~0,1%.BAK /Y


----------------------------------

NB. La riga "echo > \\nas\backupSQL\SIGLAPP-%DayOfWeek:~0,1%.BAK" crea il file di destinazione perchè altrimenti l'xcopy non trovando la destinazione si ferma chiedendo se si tratta di file o directory.

Testato su Windows Server 2012 e Windows 8.

fonte : http://stackoverflow.com/questions/11364147/setting-a-windows-batch-file-variable-to-the-day-of-the-week