DBAtlas · Atlas für Datenbankbetrieb

Import ins Ziel

Oracle

# Import with Data Pump; remap schema and tablespace
impdp system/password directory=DIR_DMP dumpfile=shop_%U.dmp \
  logfile=shop_imp.log \
  remap_schema=shop:shop_new \
  remap_tablespace=USERS:DATA parallel=4

# For existing objects: TABLE_EXISTS_ACTION=TRUNCATE|APPEND|REPLACE

impdp lädt die mit expdp erstellte .dmp-Datei ins Ziel. REMAP_SCHEMA verschiebt die Quelle in ein anderes Schema, REMAP_TABLESPACE in einen anderen Tablespace; beides wird bei Migrationen zwischen Umgebungen häufig genutzt. Das Verhalten bei vorhandenen Tabellen wird mit TABLE_EXISTS_ACTION gesteuert, die Geschwindigkeit mit PARALLEL.

PostgreSQL

# Parallel restore (from custom/directory format)
pg_restore -j4 -d targetdb --no-owner --clean --if-exists shop.dump

# A specific table only: pg_restore -d targetdb -t customer shop.dump
# For a plain .sql dump:  psql -d targetdb -f shop.sql

Mit pg_restore -j werden Dumps im custom-/directory-Format parallel (mehrere Prozesse) geladen; bei großen Datenbanken beschleunigt das den Ladevorgang erheblich. --clean --if-exists löscht die Objekte im Ziel zuerst, --no-owner passt sich an eine andere Rollenstruktur an. Plain-SQL-Dumps werden mit psql -f geladen (nicht parallel).

MySQL

# Load a plain SQL dump
mysql --binary-mode shop < shop.sql

# Parallel/fast load (if taken with mydumper):
myloader --directory=./backup --database=shop --threads=4 --overwrite-tables

# Tip: SET FOREIGN_KEY_CHECKS=0; unique_checks=0 before loading speeds it up.

Ein SQL-Dump von mysqldump wird geladen, indem er an den mysql-Client umgeleitet wird (mysql shop < dump.sql). Für paralleles und deutlich schnelleres Laden wird ein mit mydumper erstelltes Verzeichnis mit myloader --threads wiederhergestellt. FOREIGN_KEY_CHECKS und UNIQUE_CHECKS während des Ladens zu deaktivieren verbessert die Performance.

SQL Server

-- Restore from a physical backup (move file paths to the new environment)
RESTORE DATABASE shop FROM DISK = 'C:\backup\shop.bak'
WITH MOVE 'shop_data' TO 'D:\data\shop.mdf',
     MOVE 'shop_log'  TO 'D:\log\shop.ldf', REPLACE;

-- Import from a BACPAC (schema+data):
-- sqlpackage /Action:Import /TargetConnectionString:"..." /SourceFile:shop.bacpac

Ein .bak-Backup wird mit RESTORE DATABASE geladen; bei einem anderen Plattenlayout leitet WITH MOVE die Daten-/Logdateien auf neue Pfade um. Für ein versionsunabhängiges Ziel/Azure SQL legt SqlPackage /Action:Import die .bacpac-Datei (Schema + Daten) als neue Datenbank an.

MongoDB

# Restore the BSON backup; replay the oplog to land on a single point in time
mongorestore --uri="mongodb://target:27017" --oplogReplay \
  --numParallelCollections=4 ./backup

# Renaming: --nsFrom='shop.*' --nsTo='shop_new.*'
# Drop existing data before loading: --drop

mongorestore lädt die BSON-Ausgabe von mongodump ins Ziel. --oplogReplay spielt die Oplog-Änderungen eines mit --oplog erstellten Backups nach und bringt den Dump so auf einen einzigen konsistenten Zeitpunkt. Datenbank-/Collection-Namen werden mit --nsFrom/--nsTo geändert, vorhandene Daten lassen sich mit --drop leeren.

Redis

# Stop the server, place dump.rdb in the data directory, start it again
# 1) systemctl stop redis  (or SHUTDOWN NOSAVE)
# 2) cp dump.rdb  <path found with CONFIG GET dir>/dump.rdb
# 3) systemctl start redis   -> Redis loads the RDB into memory at startup

# Alternative (live): feed a RESP command stream with redis-cli --pipe

Redis lädt die RDB nur beim Start. Daher wird der Zielserver gestoppt, die migrierte dump.rdb ins Datenverzeichnis (CONFIG GET dir) gelegt und der Server neu gestartet; beim Start wird der Speicher aus der RDB befüllt. Um ohne Stoppen des Servers zu laden, streame die Schlüssel im RESP-Format mit redis-cli --pipe.

Elasticsearch

# Register the same repository on the target cluster, then restore the snapshot
PUT _snapshot/migration_repo
{ "type": "fs", "settings": { "location": "/mnt/es_backup" } }

POST _snapshot/migration_repo/migration_1/_restore
{ "indices": "customer,orders",
  "rename_pattern": "(.+)", "rename_replacement": "restored_$1" }

Registriere auf dem Zielcluster dasselbe Snapshot-Repository wie auf der Quelle (die Dateien müssen erreichbar sein) und stelle dann die Indizes mit _snapshot/.../_restore wieder her. Indexnamen lassen sich mit rename_pattern/rename_replacement ändern. Vorhandene Indizes können nicht im geöffneten Zustand wiederhergestellt werden; schließe oder benenne sie zuerst um.

In DBAtlas öffnen →