web-dev-qa-db-fra.com

Clonage d'une base de données DB2 dans une seule instance

J'ai besoin de créer une copie exacte d'une base de données DB2 (v11.1 +) sur le même serveur dans la même instance. (Ceci est un serveur de développement qui ne gère pas de bases de données de production.)

C'est comme ça que je le fais maintenant.

  1. Tables de vidage à l'aide d'un script écrit à la main
  2. Créer une nouvelle base de données
  3. Fonctions de service d'importation spécifiques à mon application à la base de données
  4. Créer un schéma dans la nouvelle base de données
  5. Importer des données d'un vidage dans la nouvelle base de données
  6. Définir les paramètres de configuration de la base de données pour la nouvelle base de données

I l qu'il est possible de copier un schéma de base de données avec db2move. Existe-t-il une approche simple qui pourrait être utilisée pour effectuer une copie complète?

2
Alexander Pozdneev

Ceci est un exemple monôme de copier une base de données (test) dans une nouvelle base de données (test 2)

db2 create database test
db2 backup database test to /tmp
db2 restore database test from /tmp into test2
db2 connect to test2


   Database Connection Information

 Database server        = DB2/LINUXX8664 11.1.3.3
 SQL authorization ID   = DB2INST1
 Local database alias   = TEST2
2
Paul Vernon

Il s'agit d'un autre exemple de copie d'une base de données, cette fois en utilisant des tuyaux nommés pour éviter d'atterrir l'image de sauvegarde sur le système de fichiers.

$ db2 create database test
$ mkfifo /tmp/pipe1 /tmp/pipe2
$ db2 restore database test from /tmp/pipe1, /tmp/pipe2 into test2 &
[1] 20744
$ bash
$ db2 backup database test to /tmp/pipe1, /tmp/pipe2

Backup successful. The timestamp for this backup image is : 20180815161749

DB20000I  The RESTORE DATABASE command completed successfully.

[1]+  Done                    db2 restore database test from /tmp/pipe1, /tmp/pipe2 into test2

Notez que la sauvegarde doit être exécutée dans une session de shell différente car le DB2 CLP ne peut pas exécuter deux choses à l'aide du même processus de backend CLP. Notez également que si vous n'êtes pas le propriétaire de l'instance, vous aurez besoin de chmod o+w Les tuyaux aussi, vous pouvez bien sûr ssh les données de la conduite à une autre machine! Et cela fonctionne aussi pour des sauvegardes en ligne (ci-dessus est une sauvegarde hors ligne)

Vous pouvez utiliser autant de tuyaux ou aussi peu de tuyaux que vous le souhaitez. Voir ceci pour une analyse des avantages de la performance de l'utilisation de plus d'un https://www.ibm.com/developerworks/community/blogs/imsupport/db2_backup_performance_imbormense?lang=fen

1
Paul Vernon

Un exemple utilisant SSH pour envoyer l'image de sauvegarde sur une machine distante

mkfifo /tmp/localpipe
chmod o+w /tmp/localpipe
ssh remotehost "mkfifo /tmp/remotepipe;chmod o+w /tmp/remotepipe"

db2 backup database test to /tmp/localpipe &
ssh remotehost "cat > /tmp/remotepipe" < /tmp/localpipe &
ssh remotehost "db2 restore database test from /tmp/remotepipe into test2" 
0
Paul Vernon