DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Database Zone»Migrer une base de données SQL Server vers CockroachDB
    Database Zone

    Migrer une base de données SQL Server vers CockroachDB

    novembre 23, 2021
    Migrer une base de données SQL Server vers CockroachDB
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    Le moyen le plus rapide de démarrer avec SQL Server consiste à utiliser les conteneurs Docker disponibles. J’utilise le didacticiel suivant pour déployer SQL Server sur Ubuntu à partir de mon Mac. Mon SQL Server-Fu est un peu rouillé et j’ai opté pour suivre ce tutoriel pour restaurer WideWordImportersexemple de base de données dans mon conteneur Docker. Vous pouvez également avoir besoin d’outils SQL Server installés sur votre hôte et vous pouvez trouver des instructions pour Mac OS et Linux sur le site suivant, les utilisateurs de Windows sont assez familiers avec un emplacement de téléchargement pour leur système d’exploitation.

    J’ai également utilisé les instructions suivantes pour installer les outils SQL Server sur mon Mac, mais j’ai rencontré des problèmes de compatibilité avec les pilotes de mon conteneur Docker. Ce sera une session de débogage pour un autre jour.

    Exécuter SQL Server dans Docker

    Extrayez l’image SQL Server :

    docker pull mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04

    Exécutez le conteneur :

    docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Cockroach!1' 
     -p 1433:1433 --name sql1 
     -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04

    Changer le mot de passe:

    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd 
     -S localhost -U SA -P 'Cockroach!1' 
     -Q 'ALTER LOGIN SA WITH PASSWORD="CockroachDB1!"'

    Restaurer un fichier de sauvegarde de la base de données WideWorldImporters dans le conteneur

    Créez un répertoire de sauvegarde :

    docker exec -it sql1 mkdir /var/opt/mssql/backup

    Télécharger la base de données WideWorldImporters :

    curl -L -o wwi.bak 'https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak'

    Copiez le fichier de sauvegarde dans le conteneur :

    docker cp wwi.bak sql1:/var/opt/mssql/backup

    Répertoriez les noms et chemins logiques de la sauvegarde :

    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S localhost 
       -U SA -P 'CockroachDB1!' 
       -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/wwi.bak"' 
       | tr -s ' ' | cut -d ' ' -f 1-2

    Exécutez la commande de restauration :

    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd 
       -S localhost -U SA -P 'CockroachDB1!' 
       -Q 'RESTORE DATABASE WideWorldImporters FROM DISK = "/var/opt/mssql/backup/wwi.bak" WITH MOVE "WWI_Primary" TO "/var/opt/mssql/data/WideWorldImporters.mdf", MOVE "WWI_UserData" TO "/var/opt/mssql/data/WideWorldImporters_userdata.ndf", MOVE "WWI_Log" TO "/var/opt/mssql/data/WideWorldImporters.ldf", MOVE "WWI_InMemory_Data_1" TO "/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1"'

    Vérifiez la base de données restaurée :

    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd 
       -S localhost -U SA -P 'CockroachDB1!' 
       -Q 'SELECT Name FROM sys.Databases'

    Accédez au conteneur Docker SQL Server à partir de votre hôte à l’aide de mssql-cli

    mssql-cli est un utilitaire CLI utilisé pour se connecter à SQL Server. Il est actuellement en plein développement et offre une expérience plus agréable sur sqlcmd, À mon avis. Dans la nouvelle mode typique de Microsoft, la page GitHub du projet peut être trouvée ici. Il est également plus facile à installer que sqlcmd sur mon Mac.

    Installez l’outil mssql-cli sur votre hôte :

    sudo pip install mssql-cli

    Dans mon cas, l’installation échoue à cause du package six étant disponible sur mon système, la solution de contournement est donc :

    sudo pip install mssql-cli --ignore-installed six

    Connectez-vous directement à votre instance SQL Server :

    mssql-cli -U SA -P 'CockroachDB1!' -S localhost,1433 -d WideWorldImporters

    Exécutez un exemple de requête :

    SELECT StockItemID, StockItemName FROM WideWorldImporters.Warehouse.StockItems WHERE StockItemID>=1

    Rediriger la sortie d’une requête vers un fichier que nous allons utiliser pour l’importation dans CockroachDB :

    mssql-cli -U SA -P 'CockroachDB1!' -S localhost,1433 -d WideWorldImporters -Q "SELECT * FROM WideWorldImporters.Warehouse.StockItemTransactions" -o StockItemTransactions.csv

    Utiliser l’utilitaire BCP pour l’exportation en bloc

    bcp est un utilitaire de copie en bloc qui est mieux servi pour exporter des données hors de SQL Server Vous pouvez essayer d’installer sqlcmd et mssqlodbc localement ou connectez-vous au conteneur et utilisez bcp qui est fourni avec SQL Server. D’après mon expérience, la mise en place bcp avec brew sur OSX était un défi, et j’ai plutôt choisi de l’exécuter dans un conteneur.

    docker exec -it sql1 bash
    /opt/mssql-tools/bin/bcp WideWorldImporters.Warehouse.StockItemTransactions out /var/opt/mssql/backup/StockItemTransactionsBCP.csv -S localhost,1433 -U sa -P 'CockroachDB1!' -c -t',' -r'n'

    Copiez le fichier sur votre hébergeur :

    docker cp sql1:/var/opt/mssql/backup/StockItemTransactionsBCP.csv .

    Décris StockItemTransactions table un équivalent de describe tablename dans SQL Server est une procédure stockée ci-dessous :

    exec sp_columns StockItemTransactions

    La sortie est longue, il est donc préférable de la sortir dans un fichier

    mssql-cli -U SA -P 'CockroachDB1!' -S localhost,1433 -d WideWorldImporters -Q "exec sp_columns StockItemTransactions" -o schema.sql
    +--------------------+---------------+-----------------------+-------------------------+-------------+-------------+-------------+----------+---------+---------+------------+-----------+----------------------------------------------+-----------------+--------------------+---------------------+--------------------+---------------+----------------+
    | TABLE_QUALIFIER    | TABLE_OWNER   | TABLE_NAME            | COLUMN_NAME             | DATA_TYPE   | TYPE_NAME   | PRECISION   | LENGTH   | SCALE   | RADIX   | NULLABLE   | REMARKS   | COLUMN_DEF                                   | SQL_DATA_TYPE   | SQL_DATETIME_SUB   | CHAR_OCTET_LENGTH   | ORDINAL_POSITION   | IS_NULLABLE   | SS_DATA_TYPE   |
    |--------------------+---------------+-----------------------+-------------------------+-------------+-------------+-------------+----------+---------+---------+------------+-----------+----------------------------------------------+-----------------+--------------------+---------------------+--------------------+---------------+----------------|
    | WideWorldImporters | Warehouse     | StockItemTransactions | StockItemTransactionID  | 4           | int         | 10          | 4        | 0       | 10      | 0          | NULL      | (NEXT VALUE FOR [Sequences].[TransactionID]) | 4               | NULL               | NULL                | 1                  | NO            | 56             |
    | WideWorldImporters | Warehouse     | StockItemTransactions | StockItemID             | 4           | int         | 10          | 4        | 0       | 10      | 0          | NULL      | NULL                                         | 4               | NULL               | NULL                | 2                  | NO            | 56             |
    | WideWorldImporters | Warehouse     | StockItemTransactions | TransactionTypeID       | 4           | int         | 10          | 4        | 0       | 10      | 0          | NULL      | NULL                                         | 4               | NULL               | NULL                | 3                  | NO            | 56             |
    | WideWorldImporters | Warehouse     | StockItemTransactions | CustomerID              | 4           | int         | 10          | 4        | 0       | 10      | 1          | NULL      | NULL                                         | 4               | NULL               | NULL                | 4                  | YES           | 38             |
    | WideWorldImporters | Warehouse     | StockItemTransactions | InvoiceID               | 4           | int         | 10          | 4        | 0       | 10      | 1          | NULL      | NULL                                         | 4               | NULL               | NULL                | 5                  | YES           | 38             |
    | WideWorldImporters | Warehouse     | StockItemTransactions | SupplierID              | 4           | int         | 10          | 4        | 0       | 10      | 1          | NULL      | NULL                                         | 4               | NULL               | NULL                | 6                  | YES           | 38             |
    | WideWorldImporters | Warehouse     | StockItemTransactions | PurchaseOrderID         | 4           | int         | 10          | 4        | 0       | 10      | 1          | NULL      | NULL                                         | 4               | NULL               | NULL                | 7                  | YES           | 38             |
    | WideWorldImporters | Warehouse     | StockItemTransactions | TransactionOccurredWhen | -9          | datetime2   | 27          | 54       | NULL    | NULL    | 0          | NULL      | NULL                                         | -9              | NULL               | NULL                | 8                  | NO            | 0              |
    | WideWorldImporters | Warehouse     | StockItemTransactions | Quantity                | 3           | decimal     | 18          | 20       | 3       | 10      | 0          | NULL      | NULL                                         | 3               | NULL               | NULL                | 9                  | NO            | 55             |
    | WideWorldImporters | Warehouse     | StockItemTransactions | LastEditedBy            | 4           | int         | 10          | 4        | 0       | 10      | 0          | NULL      | NULL                                         | 4               | NULL               | NULL                | 10                 | NO            | 56             |
    | WideWorldImporters | Warehouse     | StockItemTransactions | LastEditedWhen          | -9          | datetime2   | 27          | 54       | NULL    | NULL    | 0          | NULL      | (sysdatetime())                              | -9              | NULL               | NULL                | 11                 | NO            | 0              |
    +--------------------+---------------+-----------------------+-------------------------+-------------+-------------+-------------+----------+---------+---------+------------+-----------+----------------------------------------------+-----------------+--------------------+---------------------+--------------------+---------------+----------------+
    (11 rows affected)

    Importer des données de SQL Server dans CockroachDB

    Démarrez une instance à nœud unique de Cockroach ou utilisez votre propre environnement :

    cockroach start-single-node --insecure --host=localhost --port=26257 --background --external-io-dir $PWD

    Remarque : actuellement, Cockroach ne prend pas en charge les schémas, nous allons donc placer la table dans le schéma par défaut.

    Cet article couvre une ancienne version de CockroachDB et dans les versions récentes, nous avons ajouté la prise en charge des schémas personnalisés.

    select * from stockitemtransactions where supplierid is not null;

    Importer la sortie de bcp De SQL Server à CockroachDB

    Connectez-vous à votre instance de CockroachDB SQL Shell :

    cockroach sql --insecure

    Importez l’ensemble de données :

    root@:26257/defaultdb> CREATE DATABASE IF NOT EXISTS WideWorldImporters;
    USE WideWorldImporters;
    DROP TABLE IF EXISTS StockItemTransactions;
    IMPORT TABLE StockItemTransactions (
            StockItemTransactionID INT8 NOT NULL,
            StockItemID INT8 NOT NULL,
            TransactionTypeID INT8 NOT NULL,
            CustomerID STRING NULL, --INT8
            InvoiceID STRING NULL, --INT8
            SupplierID STRING NULL, --INT8
            PurchaseOrderID STRING NULL, --INT8
            TransactionOccurredWhen TIMESTAMP NOT NULL,
            Quantity DECIMAL NOT NULL,
            LastEditedBy INT8 NOT NULL,
            LastEditedWhen TIMESTAMP NOT NULL
    )
    CSV DATA ('nodelocal:///StockItemTransactionsBCP.csv');
    
    
    CREATE DATABASE
    
    Time: 572µs
    
    SET
    
    Time: 196µs
    
    DROP TABLE
    
    Time: 76.272ms
    
            job_id       |  status   | fraction_completed |  rows  | index_entries | system_records | ...
    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.