skip to main |
skip to sidebar
Il seguente script permette di effettuare il backup di tutti i database non di sistema, inserendo nel nome del file il giorno della settimana. In questo modo, con una schedulazione settimanale, avremo sempre sette backup distinti.
L'unica riga da variare è quella relativa al path di destinazione del backup.
DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name
-- specify database backup directory
SET @path = 'D:\ARCHIVIO\SIGLA\BackupSQL\'
-- specify filename format
SELECT @fileDate = DATEPART(DW, GETDATE())
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name NOT IN ('master','model','msdb','tempdb') -- exclude these databases
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '_G' + @fileDate + '.BAK'
BACKUP DATABASE @name TO DISK = @fileName WITH INIT ,
NOUNLOAD ,
NOSKIP ,
NOFORMAT
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
Il seguente script rinumera tutti i cespiti presenti in archivio
DECLARE @Codice CHAR(5)
DECLARE @Categoria CHAR(3)
DECLARE @cmd NVARCHAR(500)
DECLARE @Conta INT
DECLARE @ContaA CHAR(5)
DECLARE Categoria CURSOR FOR
SELECT distinct CATEGORIA FROM CESPITI
ORDER BY CATEGORIA
OPEN Categoria
FETCH NEXT FROM Categoria INTO @Categoria
WHILE @@FETCH_STATUS = 0 BEGIN
SET @Conta = 0
SET @cmd = 'DECLARE Cespiti CURSOR FOR ' +
' SELECT CODICE FROM CESPITI ' +
' WHERE CATEGORIA=' + '''' + @Categoria + '''' +
' ORDER BY CODICE';
EXEC (@cmd)
OPEN Cespiti
FETCH NEXT FROM Cespiti INTO @Codice
WHILE @@FETCH_STATUS = 0 BEGIN
SET @Conta = @Conta + 1
SET @ContaA = Right('00000'+RTrim(LTrim(CAST(@Conta as CHAR(5)))),5)
SET @cmd = 'UPDATE CESPITI SET CODICE=' + '''' + @ContaA + ''''+ ',' +
' CODPADRE=' + '''' + @ContaA + '''' +
' WHERE CATEGORIA=' + '''' + @Categoria + '''' +
' AND CODICE=' + '''' + @Codice + ''''
EXEC (@cmd)
SET @cmd = 'UPDATE MOVCE SET CODCESPITE=' + '''' + @ContaA + ''''+ ',' +
' CODPADRE=' + '''' + @ContaA + '''' +
' WHERE CATEGORIA=' + '''' + @Categoria + '''' +
' AND CODCESPITE=' + '''' + @Codice + ''''
EXEC (@cmd)
FETCH NEXT FROM Cespiti INTO @Codice
END
CLOSE Cespiti
DEALLOCATE Cespiti
-- Allinea il numeratore
SET @Conta = @Conta + 1
SET @ContaA = Right('00000'+RTrim(LTrim(CAST(@Conta as CHAR(5)))),5)
SET @cmd = 'UPDATE NUCESP SET NUMEROCESP=' + '''' + @ContaA + '''' +
' WHERE CATEGORIA=' + '''' + @Categoria + '''';
EXEC (@cmd)
FETCH NEXT FROM Categoria INTO @Categoria
end
CLOSE Categoria
DEALLOCATE Categoria
La formula per il ricarico è : (Ven-Acq)/Acq*100
La formula per il margine è : (Ven-Acq)/Ven*100
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
Sulle versioni Express di SqlServer non è presente la manutenzione del database dove è possibile fare un rebuild di tutti gli indici del database.
Di seguito uno script da eseguire manualmente o inserire nello script di backup.
Lo script fa un rebuild di tutti gli indici di tutti i database user, escludendo quindi i database di sistema.
fonte : http://www.mssqltips.com/sqlservertip/1367/sql-server-script-to-rebuild-all-indexes-for-all-tables-and-all-databases/
---------------------------------------------------
DECLARE @Database VARCHAR(255)
DECLARE @Table VARCHAR(255)
DECLARE @cmd NVARCHAR(500)
DECLARE @fillfactor INT
SET @fillfactor = 90
DECLARE DatabaseCursor CURSOR FOR
SELECT name FROM master.dbo.sysdatabases
WHERE name NOT IN ('master','msdb','tempdb','model','distribution')
ORDER BY 1
OPEN DatabaseCursor
FETCH NEXT FROM DatabaseCursor INTO @Database
WHILE @@FETCH_STATUS = 0
BEGIN
SET @cmd = 'DECLARE TableCursor CURSOR FOR SELECT ''['' + table_catalog + ''].['' + table_schema + ''].['' +
table_name + '']'' as tableName FROM [' + @Database + '].INFORMATION_SCHEMA.TABLES
WHERE table_type = ''BASE TABLE'''
-- create table cursor
EXEC (@cmd)
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @Table
WHILE @@FETCH_STATUS = 0
BEGIN
IF (@@MICROSOFTVERSION / POWER(2, 24) >= 9)
BEGIN
-- SQL 2005 or higher command
SET @cmd = 'ALTER INDEX ALL ON ' + @Table + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')'
EXEC (@cmd)
END
ELSE
BEGIN
-- SQL 2000 command
DBCC DBREINDEX(@Table,' ',@fillfactor)
END
FETCH NEXT FROM TableCursor INTO @Table
END
CLOSE TableCursor
DEALLOCATE TableCursor
FETCH NEXT FROM DatabaseCursor INTO @Database
END
CLOSE DatabaseCursor
DEALLOCATE DatabaseCursor
---------------------------------------------------
Quando viene creato un PDF da Microsoft Word è necessario prestare attenzione al font utilizzato all'interno del documento altrimenti il documento PDF generato avrà una dimensione maggiore del previsto.
Questo perchè se il font utilizzato non è fra quelli predefiniti dallo standard PDF, Word incorpora il font dentro il file PDF.
Come si può notare dalla tabella, utilizzando il font standard di Word ( Calibri ), il file PDF risultante ha una dimensione di 83 Kb.
Utilizzando il font Arial, il file PDF risultante ha una dimensione di soli 3 Kb.
| Font | Dim. Docx | Dim. PDF |
| Calibri | 13 Kb | 83 Kb |
| Arial | 13 Kb | 3 Kb |
La segnalazione "La connessione è occupata dai risultati di un altro comando/statement" è determinata dalla presenza di record con chiave duplicata in una o più tabelle della base dati di SIGLA (potrebbe anche accadere che la segnalazione non sia direttamente visibile e si ottenga solo un errore generico di protezione).
La prima cosa da fare in questo caso ("connessione occupata") è un'analisi approfondita dei dati al fine di determinare se in una certa tabella esistono dei duplicati (record doppi rispetto alla chiave univoca della tabella). Inoltre l'utilizzo di database con una collating sequence di tipo CASE INSENSITIVE può aumentare la probabilità di incorrere nella presenza di record doppi.
Per l'analisi è necessario operare direttamente sulla base dati con gli strumenti messi a disposizione dal DBMS.
Lo script sotto riportato permette di controllare tutte le tabelle dei dati comuni e ditta per verificare se ci sono dei record doppi.
Script per record doppi