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.
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?
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
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
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"