Immagini nella consolle Ordini

In questo articolo vedremo come inserire delle immagini nella griglia ordini della desktop consolle di Business Cube. In questo caso particolare gli ordini provengono da un’importazione da una piattaforma e-commerce e le immagini vengono prelevate direttamente dal sito tramite l’url dell’immagine stessa.

immagini in consolle

La prima operazione è stata quella di aggiungere il campo testo mo_hhimg alla tabella movord. In questo memorizzeremo il link al file proveniente dalla procedura di importazione. (Non stò a dilungarmi sulla procedura di import dal sito poichè si tratta di un sito costruito ad hoc. In pratica c’è un oggetto WebClient che richiama i dati da un link del sito che restituisce un elenco di ordini)

Dopo aver ereditato la DLL BNDKKONS, tramite le funzioni di editing aggiungiamo la colonna di griglia tipo text agganciandola alla colonna xx_hhimg.

Nell’ovveride della funzione Apri all’interno della BFDKKONS aggiungiamo la colonna xx_hhimg insieme all’aggiunta dell’Handler sulla ColumnChanged per caricare le immagini su ogni riga della griglia ordini della consolle.

funzione apri
aggiunta immagine e ridimensionamento

Nella funzione inseriamo il ridemensionamento dell’immagine impostando una larghezza massima di 120px facendo in modo di mantere le proporzioni.

In questa verticalizzazione è stata inoltre effettuata un’integrazione con il corriere BRT per la stampe delle etichette di spedizione alla creazione del documento di vendita generato dall’evasione dell’ordine.

Database in modalità Restoring

Cosa fare quando il database è in modalità RESTORING?

Durante il ripristino di un backup di un database SQL Server, probabilmente vi è capitato che il questo rimanesse in modalità RESTORING.

Questa modalità indica che il database è in fase di ripristino da un backup o da una serie di backup. Questa fase può durare da pochi minuti a diverse ore a seconda della dimensione del database, del numero e del tipo di backup da applicare, e delle prestazioni del sistema.

In questa modalità il database non è accessibile e non è possibile eseguire altre operazioni di backup o ripristino sullo stesso database.

Perché il database è in modalità RESTORING?

Quando si ripristina un backup completo del database, il processo di ripristino copia i dati dal backup al database e applica le transazioni registrate nel log delle transazioni. Questo garantisce che il database sia consistente e rifletta lo stato al momento del backup.

Tuttavia, se si vuole ripristinare anche uno o più backup differenziali o del log delle transazioni, è necessario specificare l’opzione WITH NORECOVERY nel comando RESTORE DATABASE. Questa opzione impedisce al processo di ripristino di terminare e di rendere il database accessibile. In questo modo, si può applicare il backup successivo nella sequenza senza perdere le modifiche registrate nel log delle transazioni.

Database in modalità Restoring -RESTORE DATABASE WITH RECOVERY

Quando si applica l’ultimo backup della sequenza, si deve specificare l’opzione WITH RECOVERY nel comando RESTORE DATABASE. Questa opzione segnala al processo di ripristino di terminare e di rendere il database accessibile. Se non si specifica questa opzione, il database rimane in modalità RESTORING finché non si esegue manualmente il comando RESTORE DATABASE WITH RECOVERY.

Come uscire dalla modalità RESTORING?

Se il database è in modalità RESTORING perché si sta applicando una sequenza di backup, basta eseguire il comando RESTORE DATABASE WITH RECOVERY sull’ultimo backup della sequenza per uscire dalla modalità RESTORING e rendere il database accessibile.

Se invece il database è in modalità RESTORING perché si è interrotto il processo di ripristino o perché si è verificato un errore, si possono seguire due strade:

  • Riprendere il processo di ripristino applicando il backup successivo nella sequenza con l’opzione WITH NORECOVERY, fino a raggiungere l’ultimo backup con l’opzione WITH RECOVERY.
  • Annullare il processo di ripristino eseguendo il comando RESTORE DATABASE WITH RECOVERY. Questa operazione riporta il database allo stato precedente al ripristino, ma può causare la perdita dei dati modificati dopo l’ultimo backup.

In conclusione, la modalità RESTORING indica che il database è in fase di ripristino da uno o più backup. Per uscire da questa modalità e rendere il database accessibile, è necessario specificare l’opzione WITH RECOVERY nell’ultimo comando RESTORE DATABASE della sequenza. Se invece si vuole annullare il processo di ripristino, si può eseguire lo stesso comando senza specificare alcun backup.

Database in stato di Recovery

Se avete mai lavorato con SQL Server, probabilmente vi siete imbattuti in una situazione in cui un database ha lo stato RECOVERING. Questo significa che il database è in fase di ripristino dopo un’operazione di backup, restore, failover o altro evento che richiede la ricostruzione dei dati. In questo post, vedremo cosa succede durante il processo di ripristino, come verificare lo stato di un database e come risolvere eventuali problemi.

Database in stato Recovery

Il processo di ripristino

Quando un database SQL Server ha lo stato RECOVERING, significa che il motore di database sta eseguendo una serie di passaggi per riportare il database in uno stato consistente e pronto per l’uso. Questi passaggi sono:

  • Analysis: il database ha completato le transazioni e le ha analizzate nel log del motore di database per determinare quali erano valide e quali no. Questo passaggio serve a preparare i passaggi successivi e a stimare il tempo necessario per il ripristino.
  • Redo: il motore di database applica le modifiche al database che sono state registrate nel log delle transazioni ma non ancora scritte sul disco. Questo passaggio serve a ripristinare il database allo stato in cui si trovava prima dell’evento che ha causato il ripristino.
  • Undo: il motore di database annulla le modifiche al database che sono state registrate nel log delle transazioni ma non ancora confermate. Questo passaggio serve a eliminare le transazioni incomplete o non valide che potrebbero compromettere l’integrità del database.

Durante il processo di ripristino, il database non è accessibile agli utenti o alle applicazioni. Il tempo necessario per il ripristino dipende da diversi fattori, come la dimensione del log delle transazioni, il numero e la complessità delle transazioni da ripetere o annullare, le prestazioni del sistema e altri eventi concorrenti.

Tuttavia, in alcuni casi, il database può rimanere bloccato nello stato RECOVERING per un tempo eccessivo o indefinito, impedendo l’accesso ai dati. Questo può accadere per vari motivi, come ad esempio:

  • Il backup è incompatibile con la versione del server SQL Server.
  • Il backup è corrotto o incompleto.
  • Il database ha subito un arresto anomalo o una perdita di energia durante il ripristino.
  • Altri database hanno delle dipendenze sul database che non hanno ripristinato.
  • Il database ha delle opzioni di configurazione che impediscono il ripristino completo.

Per risolvere questi problemi, si possono provare le seguenti soluzioni:

  • Verificare la compatibilità del backup con la versione del server SQL Server e usare un backup adeguato o un server diverso.
  • Verificare l’integrità del backup e ripetere l’operazione di ripristino con un backup valido.
  • Interrompere e riavviare il servizio SQL Server per forzare il ripristino del database.
  • Eliminare il database con problemi e ripristinarlo nuovamente.
  • Ripristinare tutti i database correlati al database con problemi, mantenendo la stessa sequenza temporale dei backup.
  • Modificare le opzioni di configurazione del database, come ad esempio il recovery model o l’opzione RESTRICTED_USER, per consentire il ripristino completo.

Queste sono alcune delle possibili soluzioni per risolvere i problemi se un database SQL Server ha lo stato RECOVERING. Si consiglia di eseguire sempre un backup dei dati prima di effettuare qualsiasi operazione di ripristino e di consultare la documentazione ufficiale di SQL Server per maggiori dettagli e istruzioni.

Database in modalità Emergency

Se il vostro database SQL Server è danneggiato o non avviabile, potete provare a ripristinarlo usando la modalità EMERGENZA. Questa modalità consente di accedere al database anche se è in uno stato inconsistente, e di eseguire operazioni di riparazione o di recupero dei dati.

La modalità EMERGENZA si attiva impostando lo stato del database a 1 con il comando ALTER DATABASE. Ad esempio:

ALTER DATABASE MioDatabase SET EMERGENCY;

SQL Server in modalità EMERGENZA-

Una volta attivata la modalità EMERGENZA, il database diventa accessibile solo ai membri del ruolo sysadmin. Inoltre, il database viene aperto in sola lettura e non viene eseguita alcuna operazione di rollback o di recupero.

Per ripristinare il database, è necessario eseguire i seguenti passi:

1) Verificare l’integrità fisica del file di dati e del file di log del database con il comando DBCC CHECKDB. Questo comando restituisce un report con gli eventuali errori rilevati e le possibili azioni di riparazione. Ad esempio:

DBCC CHECKDB (MioDatabase) WITH NO_INFOMSGS, ALL_ERRORMSGS;

SQL Server in modalità EMERGENZA- DBCC CHECKDB

2) Se il comando DBCC CHECKDB non restituisce errori, significa che il database è integro e può essere riportato in modalità normale con il comando ALTER DATABASE. Ad esempio:

ALTER DATABASE MioDatabase SET ONLINE;

SQL Server in modalità EMERGENZA- SET ONLINE

3) Se invece il comando DBCC CHECKDB restituisce errori, significa che il database è danneggiato e richiede una riparazione. La riparazione può essere eseguita con il comando DBCC CHECKDB con l’opzione REPAIR_ALLOW_DATA_LOSS. Questa opzione consente di eliminare le pagine o le righe corrotte dal database, ma comporta una perdita di dati. Ad esempio:

DBCC CHECKDB (‘MioDatabase’, REPAIR_ALLOW_DATA_LOSS);

4) Dopo aver eseguito la riparazione, è necessario verificare nuovamente l’integrità del database con il comando DBCC CHECKDB. Se il comando non restituisce errori, significa che la riparazione è stata effettuata con successo e il database può essere riportato in modalità normale con il comando ALTER DATABASE. Ad esempio:

ALTER DATABASE MioDatabase SET ONLINE;

SQL Server in modalità EMERGENZA- SET ONLINE

5) Se invece il comando DBCC CHECKDB restituisce ancora errori, significa che la riparazione non è stata sufficiente e il database è irrecuperabile. In questo caso, l’unica soluzione è ripristinare il database da un backup valido.

La modalità EMERGENZA è un’ultima risorsa per tentare di recuperare un database SQL Server danneggiato. Si raccomanda di usarla solo dopo aver esaurito tutte le altre opzioni e di essere consapevoli dei rischi di perdita di dati. Inoltre, si raccomanda di effettuare sempre dei backup regolari del database e di verificarne la validità.

Avviare un programma automaticamente in una sessione di Desktop Remoto

In una sessione di Desktop Remoto può essere moto utile far avviare un programma automaticamente. Ciò permette agli utenti remoti di trovarsi il programma già avviato nel momento in cui si connettono ad un server tramite Desktop Remoto senza dover accedere al desktop del server. Fino alla versione Windows Server 2012, questa possibilità era facilmente configurabile specificando il programma da avviare nella sezione “Ambiente” delle proprietà dell’utente abilitato alla connessione in Desktop Remoto. Ad esempio, per avviare il Blocco note, si può inserire C:\Windows\System32\notepad.exe.

Ambiente desktop remoto


Non è una questione di comodità ma un amministratore di sistema potrebbe volere che un utente remoto, utilizzi quel programma e non possa fare altro. Nel momento in cui chiude il programma si chiude anche la connessione al server. Questo impedisce ad un utente smaliziato o poco esperto di far danni al server. Ovviamente parliamo di Windows Server. Nelle versioni client di Windows, ad esempio Windows 10, l’opzione di avvio automaticamente di un programma all’avvio di una sessione di Desktop Remoto, almeno nativamente non è prevista.

Tuttavia, coma anticipato in apertura, ci sono alcuni casi in cui questa funzionalità potrebbe non funzionare correttamente, come per le versioni più recenti di Windows Server oppure, ad esempio, se il server fa parte di un dominio e si utilizza un account di dominio per accedere. In questi casi potrebbe essere necessario modificare una chiave di registro sul server

Per fare questo, dobbiamo seguire questi passi:

  • Aprire l’editor del Registro di sistema (regedit) sul controller di dominio e navigare alla seguente chiave: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
  • Creare un nuovo valore DWORD (32 bit) chiamato fQueryUserConfigFromDC e impostarlo a 1.
  • Chiudere l’editor del Registro di sistema e riavviare il controller di dominio.
regedit

Questo valore consente al server di Desktop Remoto di interrogare il controller di dominio per ottenere le impostazioni del programma iniziale dell’utente.

Database in modalità Suspect

Ora vedremo come ripristinare un database sql server in suspect mode. Un database sospetto è un database ritenuto compromesso da SQL Server che, per ragioni di sicurezza, imposta il flag “sospetto” ed impedisce l’accesso ai dati. Le possibili possono essere:

  1. file fisici sul file system corrotti (i motivi potrebbero essere di natura software (virus) o hardware (hard disk danneggiato))
  2. spazio libero su disco insufficiente
  3. Memoria RAM insufficiente
  4. i file risultano aperti da un altro software quindi con accesso negato
  5. uno spegnimento inaspettato del computer o l’arresto inaspettato dei servizi di SQL Server
  6. Il sistema non riesce ad aprire il dispositivo in cui risiedono i dati o il file di registro del server SQL
  7. Il server SQL si arresta in modo anomalo o si riavvia nel mezzo di una transazione, risultando in un file di registro delle transazioni corrotto o inaccessibile
  8. SQL Server tenta di aprire un database e il file appartenente a quel database è già aperto dal software antivirus installato sul sistema
  9. SQL non può completare un’operazione di rollback o rollforward.

Per eseguire le operazioni di ripristino utilizzeremo Microsoft Sql Server Managment Studio con i comandi T-SQL. Il primo tentativo è quello di togliere il flag di sospetto al database. Dopo aver effettuato la connessione al motore di database, apriamo la finestra per eseguire una nuova query e digitiamo il seguente coamndo :

exec sp_resetstatus DBNAME

Questa operazione, purtroppo, difficilmente risolve il nostro problema, pertanto sarà necessario compiere altre operazioni. Il passo successivo è impostare il database in emergenza. In questa modalità i dati del database, se non corrotti, torneranno ad essere accessibili, poi, tramite il comando DBCC, sarà possibile effettuare un check degli oggetti del database. Lanciare i comandi sotto indicati uno alla volta in modo da analizzare sempre l’output restituito.

alter database DBNAME set emergency

dbcc checkdb(‘DBNAME’) alter database DBNAME set SINGLE_USER with ROLLBACK IMMEDIATE

dbcc checkdb(‘DBNAME’,REPAIR_ALLOW_DATA_LOSS)

alter database DBNAME set MULTI_USER

Come ripristinare un database

Database in Recovery Pending

Ripristinare un database in modalità’ “Ripristino in sospeso”

Ora vedremo come ripristinare un database SQL Server in modalità’ “Ripristino in sospeso”. La modalità “Ripristino in sospeso” è uno dei vari stati in cui può trovarsi un database e indica che questo non può avviare il processo di ripristino in caso di arresto anomalo del sistema.

Ciò è dovuto al fatto che SQL Server non è in grado di accedere alla pagina di avvio nel file di dati primario (MDF) per determinare se è necessario un ripristino in caso di arresto anomalo del sistema ma non è stato possibile avviare il processo di ripristino (ad esempio, perché il file di registro delle transazioni è mancante o danneggiato).

Cause e soluzioni


Altre cause possono essere lo spazio di archiviazione su disco o memoria insufficiente, o il danneggiamento del file MDF. I motivi potrebbero essere problemi del sottosistema del disco, problemi della piattaforma, un guasto hardware oppure un attacco di virus e così via.


Nel caso in cui il ripristino del database non può essere avviato a causa di spazio di archiviazione su disco insufficiente bisogna innanzitutto, aumenta lo spazio su disco, dopodiché impostare il database in modalità “Online” ed eseguire il comando CheckDB.

ALTER DATABASE [DBNAME] SET ONLINE;
DBCC CHECKDB(‘DBNAME’) WITH NO_INFOMSGS;

ripristinare un database in “Ripristino in sospeso”

Il log degli errori può mostrare che il database non è stato ripristinato correttamente.

La causa porebbe essere un file di registro mancante del database che potrebbe essere eliminato, rinominato o danneggiato. In questo caso metti il database in modalità di emergenza, poi scollega il database (metti in modalità OFFLINE) dopodiché allegalo di nuovo (portalo online).


I comandi da eseguire sono i seguenti:

ALTER DATABASE [DBNAME] SET EMERGENCY;
ALTER DATABASE [DBNAME] set multi_user;
EXEC sp_detach_db ‘DBNAME’;
EXEC sp_attach_single_file_db @DBName = ‘DBNAME’, @physname = N’MDF_FILE_FULL_PATCH’;

Questa immagine ha l'attributo alt vuoto; il nome del file è EMERGENCY.jpg

In alcuni casi è possibile risolvere errori di database utilizzando le opzioni Repair, ma solo come ultima risorsa.
Microsoft consiglia sempre un ripristino utente dall’ultimo backup valido noto come metodo principale per il ripristino da errori segnalati da DBCC CHECKDB.

Problemi del database

Un database di Microsoft SQL Server si trova sempre in uno stato specifico dal sistema. Ora vedremo i vari stati e problemi di SQL SERVER.

Stati di un database SQL Server

Il database SQL Server può assumere diversi stati in base alle attività in esecuzione. Ecco un elenco completo dei possibili stati di un database SQL Server:

  1. Online – il database è in esecuzione e disponibile per le connessioni.
  2. Offline – il database non è disponibile per le connessioni e non può essere utilizzato.
  3. In riparazione – il database è in fase di riparazione a causa di problemi di integrità dei dati.
  4. In ripristino – il database è in fase di ripristino da un backup.
  5. In recupero – il database è in fase di recupero dopo un incidente di sistema.
  6. In ripristino di emergenza – il database è in fase di ripristino di emergenza per recuperare i dati in caso di problemi critici.
  7. In ripristino di transazioni – il database è in fase di ripristino di transazioni per ripristinare i dati alle transazioni precedenti.
  8. In stato di sospensione – il database è in stato di sospensione e non può essere utilizzato
  9. In stato di sospensione con rollback – il database è in stato di sospensione e sta eseguendo un rollback di transazioni.
  10. In stato di sospensione con ripristino – il database è in stato di sospensione e sta eseguendo un ripristino.

Modificare lo stato del database

Per modificare lo stato del database, è possibile utilizzare i comandi ALTER DATABASE per impostare lo stato di connessione o di ripristino. Ad esempio, per portare un database offline, si utilizzerebbe il comando ALTER DATABASE “nome_database” SET OFFLINE.

Per verificare lo stato attuale del database, è possibile utilizzare il comando SELECT state_desc FROM sys.databases WHERE name = ‘nome_database’.

Possiamo controllare rapidamente lo stato corrente di un database SQL che esegue la query riportata di seguito. Lo stato corrente di un database può essere verificato tramite state_desc.

Andiamo nel Management Studio di Sql Server dove, dopo avere selezionato “Nuova Query”, andremo a digitare i seguenti comandi:

SELECT name, state_desc from sys.databases

come conoscere gli stati e problemi dstati e problemi di SQL SERVER

Come risultato della query otterremo l’elenco dei database collegati ed il loro stato

In generale, è importante prestare attenzione allo stato del database e gestirlo correttamente per garantire la disponibilità e l’integrità dei dati.

L’identificazione dello stato del database e del modo in cui un database può essere spostato tra questi diversi stati consente di risolvere i problemi del database.

Questi stati includono ONLINE, OFFLINE, RESTORING, RECOVERING, SUSPECT, EMERGENCY e RECOVERY PENDING.

Dopo aver individuato i vari stati e soprattutto i problemi di SQL SERVER, vedremo come risolverli.

Sql Server e Linux

Installare Sql Server in ambiente Linux

In questo articolo vedremo come installare Sql Server in ambiente Linux, in particolare la versione 2022 di Sql Server in una distribuzione Ubuntu

Per prima cosa importiamo la chiave di sicurezza GPG del repository pubblico digitando il seguente comando :

$ wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add –

repository pubblico

dopodiché registriamo SQL Server 2022 nel repository Ubuntu e scriviamo :

sudo add-apt-repository “$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-preview.list)”

registrare SQL Server 2022 nel repository Ubuntu

ora aggiornarniamo i repository di Ubuntu.

sudo apt-get update

aggiornamento del repository di Ubuntu

Installazione di Sql Server

A questo punto scarichiamo e andiamo ad installare Sql Server in ambiente Linux. Questo passaggio potrebbe richiedere del tempo poiché installerà pacchetti di dipendenze come gawk, libatomicl , libc++1. Scaricherà anche l’installazione di SQL Server 2022 dal registro Microsoft e avvierà il processo di installazione.

sudo apt-get install -y mssql-server

Installazione Sql Server
Installazione Sql Server

L’installazione di SQL una volta completata richiede di eseguire l’utilità mssql-conf per la configurazione. Questa utility mssql-conf richiede input utente specifici.

sudo /opt/mssql/bin/mssql-conf setup

Edizione SQL Server : inserire il numero di serie dell’edizione SQL Server 2022 che si desidera utilizzare. Per questa demo, sceglierò la prima opzione, Valutazione

  1. Evaluation
  2. Developer
  3. Express
  4. Web
  5. Standard
  6. Enterprise
  7. Enterprise Core
  8. BYOB (richiede la tua licenza)

Accetta i termini della licenza di SQL Server e scegli la lingua di SQL Server. Inserisco il valore 5 per l’installazione in italiano.

termini della licenza di SQL Server

Una volta installato SQL Server 2022, viene visualizzato il messaggio: l’installazione è stata completata correttamente. SQL Server è ora in fase di avvio ed è consigliabile controllare lo stato del servizio.

systemctl status mssql-server –no-pager

controllare lo stato del servizio

Per la connessione a SQL Server 2022 Linux, sono necessari strumenti da riga di comando come SQLCMD o Azure Data Studio, SQL Server Management Studio. Se desideri connetterti in remoto da un computer Windows, puoi installare SSMS dal collegamento.

SSMS è un’applicazione basata su Windows. Pertanto, è possibile scegliere Azure Data Studio per l’installazione nel computer Linux stesso. È possibile fare riferimento alla guida per la configurazione di Azure Data Studio in Linux.