SQL Server in Linux: problemi noti

Le sezioni seguenti descrivono i problemi noti di SQL Server in Linux.

Generali

Nella tabella seguente sono elencati i problemi più comuni relativi ad SQL Server in Linux.

Problema Risoluzione
La lunghezza del nome host in cui è installato SQL Server non deve superare i 15 caratteri. Modificare il nome in /etc/hostname in un valore lungo al massimo 15 caratteri.
Portando manualmente indietro l'ora di sistema, SQL Server smette di aggiornare l'ora del sistema interna nel motore di database. Riavviare SQL Server.
Sono supportate solo le installazioni a istanza singola. Se si vuole avere più di un'istanza in un determinato host, valutare di usare le macchine virtuali o i contenitori Linux.
Gestione configurazione SQL Server non è in grado di connettersi a SQL Server in Linux. Nessuno.
La lingua predefinita dell'account di accesso sa è l'inglese. Cambiare la lingua dell'account di accesso sa con l'istruzione ALTER LOGIN.
Il provider OLE DB registra l'avviso seguente:

Failed to verify the Authenticode signature of 'C:\binn\msoledbsql.dll'. Signature verification of SQL Server DLLs will be skipped. Genuine copies of SQL Server are signed. Failure to verify the Authenticode signature might indicate that this isn't an authentic release of SQL Server. Install a genuine copy of SQL Server or contact customer support.
Non è necessaria alcuna azione. Il provider OLE DB viene firmato con SHA256. Il motore di database di SQL Server non convalida correttamente il file .dll firmato.
Il comando Reset password che utilizza mssql-conf genera l'errore seguente:

Unable to set the system administrator password. Please consult the ERRORLOG in /path for more information.
Il messaggio di errore è un falso negativo. La reimpostazione della password ha avuto esito positivo ed è possibile continuare a usare la nuova password.

Si applica a: solo immagini del contenitore di SQL Server 2022 (16.x).

Database

  • Non è possibile spostare il database master con l'utilità mssql-conf. Si possono invece spostare altri database di sistema con mssql-conf.

  • Quando si ripristina un database di cui è stato eseguito un backup in SQL Server in Windows, è necessario usare la clausola WITH MOVE nell'istruzione Transact-SQL. Per maggiori informazioni, vedere Eseguire la migrazione di un database di SQL Server da Windows a Linux usando il backup e ripristino.

  • Alcuni algoritmi (pacchetti di crittografia) per Transport Layer Security (TLS) non funzionano correttamente con SQL Server in Linux. Ne derivano errori di connessione quando si prova a connettersi a SQL Server, oltre a problemi a stabilire connessioni tra repliche nei gruppi di disponibilità elevata.

    Per risolvere questo problema, modificare lo script di configurazione mssql.conf per SQL Server in Linux per disabilitare i pacchetti di crittografia problematici, seguendo questa procedura:

    1. Aggiungere la sezione riportata di seguito a /var/opt/mssql/mssql.conf. Il simbolo esclamativo (!) nega l'espressione. Questo indica a OpenSSL di non usare il pacchetto di crittografia successivo.

      [network]
      tlsciphers=AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:!ECDHE-RSA-AES128-GCM-SHA256:!ECDHE-RSA-AES256-GCM-SHA384:!ECDHE-ECDSA-AES256-GCM-SHA384:!ECDHE-ECDSA-AES128-GCM-SHA256:!ECDHE-ECDSA-AES256-SHA384:!ECDHE-ECDSA-AES128-SHA256:!ECDHE-ECDSA-AES256-SHA:!ECDHE-ECDSA-AES128-SHA:!ECDHE-RSA-AES256-SHA384:!ECDHE-RSA-AES128-SHA256:!ECDHE-RSA-AES256-SHA:!ECDHE-RSA-AES128-SHA:!DHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA:!DHE-DSS-AES256-SHA256:!DHE-DSS-AES128-SHA256:!DHE-DSS-AES256-SHA:!DHE-DSS-AES128-SHA:!DHE-DSS-DES-CBC3-SHA:!NULL-SHA256:!NULL-SHA
      
    2. Riavviare SQL Server con il comando seguente.

      sudo systemctl restart mssql-server
      
  • I database di SQL Server 2014 (12.x) in Windows che usano OLTP in memoria non possono essere ripristinati in SQL Server in Linux. Se il database di SQL Server 2014 (12.x) usa OLTP in memoria, aggiornare prima i database a una versione più recente di SQL Server in Windows. È quindi possibile spostarlo su SQL Server in Linux, con backup/ripristino o con rendere non visibile/rendere visibile.

  • L'autorizzazione utente ADMINISTER BULK OPERATIONS non è attualmente supportata in Linux.

  • I backup compressi con TDE eseguiti usando SQL Server 2019 (15.x) CU 16 e versioni successive non possono essere ripristinati a versioni CU precedenti di SQL Server 2019 (15.x). Per altre informazioni, vedere CORREZIONE: si verifica l'errore 3241 durante l'esecuzione di RESTORE DATABASE o RESTORE LOG.

    I backup compressi con Transparent Data Encryption (TDE) eseguiti mediante versioni CU precedenti di SQL Server 2019 (15.x) possono ancora essere ripristinati usando SQL Server 2019 (15.x) CU 16 e versioni successive.

  • Quando si installa SQL Server 2022 (16.x) in Ubuntu 22.04, è possibile che venga visualizzato il messaggio di errore seguente: Failed to start Microsoft SQL Server Database Engine. Se si esamina il log degli errori, viene visualizzato un percorso errato per i database di sistema.

    Per aggirare questo problema, avviare l'istanza in modalità utente singolo e usare ALTER DATABASE ... MODIFY FILE per spostare il percorso configurato dei database di sistema nel percorso predefinito /var/opt/mssql/data. Dopo aver apportato questa modifica, riavviare il servizio.

Rete

Le funzionalità che coinvolgono le connessioni TCP in uscita dal processo sqlservr, ad esempio i server collegati, PolyBase o i gruppi di disponibilità, potrebbero non funzionare se vengono soddisfatte entrambe le condizioni seguenti:

  • Il server di destinazione è specificato come nome host e non come indirizzo IP.

  • L'istanza di origine ha IPv6 disabilitato nel kernel. Per verificare se il sistema ha IPv6 abilitato nel kernel, è necessario che vengano superati tutti i test seguenti:

    • cat /proc/cmdline stampa la riga di comando di avvio del kernel corrente. L'output non deve contenere ipv6.disable=1.
    • La directory /proc/sys/net/ipv6/ deve esistere.
    • Un programma C che chiama socket(AF_INET6, SOCK_STREAM, IPPROTO_IP) deve avere esito positivo. Syscall deve restituire fd != -1 e non deve verificarsi l'errore EAFNOSUPPORT.

L'errore esatto dipende dalla funzionalità. Per i server collegati, viene visualizzato un errore di timeout di accesso. Per i gruppi di disponibilità, il DDL ALTER AVAILABILITY GROUP JOIN nel database secondario avrà esito negativo dopo 5 minuti con un errore download configuration timeout.

Per aggirare il problema, optare per una delle seguenti possibilità:

  • Usare gli IP invece dei nomi host per specificare la destinazione della connessione TCP.

  • Abilitare IPv6 nel kernel rimuovendo ipv6.disable=1 dalla riga di comando di avvio. Il metodo dipende dalla distribuzione di Linux e dal bootloader, ad esempio grub. Se si vuole disabilitare IPv6, si può comunque farlo impostando net.ipv6.conf.all.disable_ipv6 = 1 nella configurazione sysctl (ad esempio, /etc/sysctl.conf). Anche se questa operazione impedisce alla scheda di rete del sistema di ottenere un indirizzo IPv6, consente comunque di usare le funzionalità di sqlservr.

TLS 1.3 non supportato

Si applica a: solo SQL Server 2022 (16.x).

Anche se TLS 1.3 è supportato nell'anteprima di SQL Server 2022 (16.x) per Windows, è necessario usare TLS 1.2 in Linux.

File system di rete (NFS)

Se si usano condivisioni di rete NFS (Network File System, file system di rete) nell'ambiente di produzione, tenere presenti i requisiti di supporto seguenti:

  • Usare NFS versione 4.2 o versioni successive. Le versioni precedenti di NFS non supportano le funzionalità necessarie, ad esempio fallocate e la creazione di file sparse, comuni ai file system moderni.

  • Individuare solo le directory /var/opt/mssql nel montaggio NFS. Non sono supportati altri file, ad esempio i file binari di sistema di SQL Server.

  • Assicurarsi che i client NFS usino l'opzione nolock per il montaggio della condivisione remota.

Localizzazione

  • Se le impostazioni locali non sono in inglese (en_us) durante l'installazione, è necessario usare la codifica UTF-8 nella sessione o nel terminale Bash. Se si usa la codifica ASCII, potrebbe essere visualizzato un errore simile all’output seguente:

    UnicodeEncodeError: il codec “ascii” non può codificare il carattere u'\xf1' nella posizione 8: ordinale non compreso nell'intervallo(128)

    Se non è possibile usare la codifica UTF-8, eseguire il programma di installazione usando la variabile di ambiente MSSQL_LCID per specificare la lingua scelta.

    sudo MSSQL_LCID=<LcidValue> /opt/mssql/bin/mssql-conf setup
    
  • Quando si eseguono mssql-conf setup e un'installazione non in inglese di SQL Server, possono essere visualizzati caratteri estesi non corretti dopo il testo "Configurazione di SQL Server..." localizzato. Invece, per le installazioni non basate sull'alfabeto latino, la frase potrebbe mancare completamente. La frase mancante dovrebbe corrispondere alla stringa localizzata seguente:

    Il PID di licenze è stato elaborato. La nuova edizione è [edizione <Nome>].

    Questa stringa è l’output a solo scopo informativo, non influisce in alcun modo sull'installazione corretta di SQL Server.

Non tutti i filtri sono disponibili con questa versione, inclusi i filtri per i documenti di Microsoft Office. Per un elenco di filtri supportati, vedere Installare la ricerca full-text di SQL Server in Linux.

SQL Server Integration Services (SSIS)

Il pacchetto mssql-server-is non è supportato in SUSE Linux Enterprise Server (SLES). Il pacchetto è supportato in Ubuntu e Red Hat Enterprise Linux (RHEL).

I pacchetti di Integration Services possono usare connessioni ODBC in Linux. Questa funzionalità è stata testata con i driver ODBC di SQL Server e MySQL, ma è previsto che funzioni anche con i driver ODBC Unicode che osservano la specifica ODBC. In fase di progettazione è possibile specificare un DSN o una stringa di connessione per la connessione ai dati ODBC. È anche possibile usare l'autenticazione di Windows. Per altre informazioni, vedere il post di blog che annuncia il supporto ODBC in Linux.

Le funzionalità seguenti non sono supportate in questa versione quando si eseguono pacchetti SSIS in Linux:

  • Database del catalogo di Integration Services
  • Esecuzione pianificata dei pacchetti tramite SQL Server Agent
  • Autenticazione di Windows
  • Componenti di terze parti
  • Change Data Capture (CDC)
  • Integration Services Scale Out
  • Feature Pack di Azure per SSIS
  • Supporto di Hadoop e HDFS
  • Microsoft Connector per SAP BW

Per un elenco di componenti SSIS predefiniti non attualmente supportati oppure supportati con limitazioni, vedere Limitazioni e problemi noti di SSIS in Linux.

Per altre informazioni su SSIS in Linux, vedere gli articoli seguenti:

SQL Server Management Studio (SSMS)

Le limitazioni seguenti si applicano a SQL Server Management Studio in Windows connesso a SQL Server in Linux.

  • I piani di manutenzione non sono supportati.

  • Il data warehouse di gestione e l'agente di raccolta dati in SQL Server Management Studio non sono supportati.

  • I componenti dell'interfaccia utente di SQL Server Management Studio con le opzioni Autenticazione di Windows o Registro eventi di Windows non funzionano con Linux. È comunque possibile usare queste funzionalità con altre opzioni, ad esempio gli account di accesso SQL Server.

  • Non è possibile modificare il numero di file di log da conservare.

Disponibilità elevata e ripristino di emergenza

Si applica a: solo SQL Server 2022 (16.x).

Per i pacchetti di SQL Server 2022 (16.x) per RHEL 9 e Ubuntu 22.04, quando si abilita lo stack di disponibilità elevata/ripristino di emergenza con Pacemaker, è possibile riscontrare problemi con il failover automatico e manuale. Questi problemi sono attualmente limitati allo stack a disponibilità elevata di Pacemaker. Altri stack a disponibilità elevata, tra cui HPE Serviceguard e DH2i DxEnterprise, non presentano questi problemi.

Il gruppo di disponibilità commuta continuamente il ruolo primario

Quando si lavora con i gruppi di disponibilità in SQL Server 2022 (16.x) in RHEL 8, Ubuntu 20.04 e versioni successive, è possibile riscontrare una situazione in cui il ruolo primario nel gruppo di disponibilità passa da un nodo a un altro in modo continuo. Attualmente, è possibile risolvere il problema con questi passaggi:

  1. Aggiornare la proprietà ag_cluster della risorsa failure-timeout impostandola su 0s:

    pcs resource update ag_cluster meta failure-timeout=0s
    

    Per altre informazioni, vedere Configurare un cluster Pacemaker per i gruppi di disponibilità di SQL Server.

  2. Reimpostare il numero di errori nel cluster Pacemaker:

    crm_failcount -r ag_resource_name -delete
    

Machine Learning Services

Si applica a: solo SQL Server 2022 (16.x).

Per i pacchetti di SQL Server 2022 (16.x) per RHEL 9 e Ubuntu 22.04, esistono alcuni prerequisiti da tenere in considerazione con cgroup-v1, prima di installare i servizi di Machine Learning.

  1. Come prerequisito, cgroup-v1 deve essere abilitato in base all'uso di cgroupfs per gestire manualmente i cgroup Red Hat Enterprise Linux 9 da Red Hat.

  2. Seguire quindi le istruzioni per installare i servizi di Machine Learning SQL come documentato.

  3. Disabilitare l'isolamento dello spazio dei nomi di rete.

    sudo /opt/mssql/bin/mssql-conf set extensibility outboundnetworkaccess 1
    
  4. Riavviare quindi il servizio mssql-launchpadd per applicare le modifiche.

    sudo systemctl restart mssql-launchpadd