Eksport i Import tabel w DB2

Dziś opowiem o tym jak wykonac kopię jednej tabeli i przenieść ja np na pendrive na inny serwer i tam odtworzyć za pomocą narzędzi DB2 EXPORT i IMPORT.

Najpierw zrobimy folder na nasze exporty.
[db2inst1@localhost exporty]$ mkdir exporty
[db2inst1@localhost exporty]$ cd exporty

Podłączamy się do naszego serwer i sprawdzamy nazwę naszej tabeli:

[db2inst1@localhost exporty]$ db2start
[db2inst1@localhost exporty]$ db2 list db directory

 System Database Directory

 Number of entries in the directory = 1

Database 1 entry:

 Database alias                       = TESTOWA
 Database name                        = TESTOWA
 Local database directory             = /db2/db2home/db2inst1
 Database release level               = d.00
 Comment                              =
 Directory entry type                 = Indirect
 Catalog database partition number    = 0
 Alternate server hostname            =
 Alternate server port number         =

[db2inst1@localhost exporty]$ db2 connect to TESTOWA

   Database Connection Information

 Database server        = DB2/LINUXX8664 9.7.6
 SQL authorization ID   = DB2INST1
 Local database alias   = TESTOWA

[db2inst1@localhost exporty]$ db2 list tables

Table/View                      Schema          Type  Creation time
------------------------------- --------------- ----- --------------------------
MYTABLE                         DB2INST1        T     2017-11-30-00.28.10.653120

  1 record(s) selected.

[db2inst1@localhost exporty]$ db2 "select * from mytable"

NAME       LASTNAME             PHONE
---------- -------------------- ---------
Robert     Badura               853964725
Robert     Badura               853964725
Robert     Badura               853964725
Robert     Badura               853964725
Robert     Badura               853964725
Robert     Badura               853964725

  6 record(s) selected.

EXPORT

Na początek wykonamy eksport danych znajdujących się w tabeli do pliku tekstowego. Do tego służy polecenie

[db2inst1@localhost exporty]$ db2 "export to file.del of del messages export1.msg select * from mytable"

Number of rows exported: 6

Tabela będzie wyeksportowana do pliki FILE.DEL którego format określamy po opcji „TO” (w naszym przykładzie to format DEL). W pliku EXPORT1.MSG zostaną zapisane komunikaty dotyczące exportu (jeśli nie wpiszemy polecenie „MESSAGES nazwa_pliku” to zostaną wyświetlone na ekranie). Na końcu umieszczamy składnię wyświetlającą nasze eksportowane dane. Można tu dowolnie korzystać z funkcji SELECT, warunków WHERE, i innych składni SQL.

Poniżej zawartość pliku EXPORT1.MSG i FILE.DEL z naszego przykładu

[db2inst1@localhost exporty]$ less export1.msg

SQL3104N  The Export utility is beginning to export data to file "file.del".

SQL3105N  The Export utility has finished exporting "6" rows.

[db2inst1@localhost exporty]$ less file.del

"Robert    ","Badura              ","853964725"
"Robert    ","Badura              ","853964725"
"Robert    ","Badura              ","853964725"
"Robert    ","Badura              ","853964725"
"Robert    ","Badura              ","853964725"
"Robert    ","Badura              ","853964725"

Innym formatem wykonywanych eksportów jest IXF. Jest to plik eksportu całej tabeli z nagłówkami, indeksami (całym kompletem danych pozwalającym na pełne odtworzenie tabeli).

[db2inst1@localhost exporty]$ db2 "export to file.ixf of ixf select * from mytable"

SQL3104N  The Export utility is beginning to export data to file "file.ixf".

SQL3105N  The Export utility has finished exporting "6" rows.

Number of rows exported: 6

Można też wyeksportować tylko wybrane kolumny korzystając z opcji METHOD (zarówno jako IFX jak i DEL)

[db2inst1@localhost exporty]$ db2 "export to file.del of del method N (Name,Lastname) select * from mytable"

SQL3104N  The Export utility is beginning to export data to file "file.ixf".

SQL3103W  The number of columns in the METHOD parameter is less than the
number of columns in the Action String (e.g. "REPLACE into ...") parameter.

SQL27984W  The export command completed successfully. Some recreate
information has not been saved to the PC/IXF file during Export. This file
will not be supported in Import CREATE mode. Reason code="8".

SQL3105N  The Export utility has finished exporting "6" rows.

Number of rows exported: 6

[db2inst1@localhost exporty]$ less file3.del

"Robert    ","Badura              "
"Robert    ","Badura              "
"Robert    ","Badura              "
"Robert    ","Badura              "
"Robert    ","Badura              "
"Robert    ","Badura              "

IMPORT

Na początek utworzymy sobie drugą bazę do której będziemy importować nasze dane (tabelę).

[db2inst1@localhost exporty]$ db2 create database mytable2

SQL1047N  The application is already connected to another database.


[db2inst1@localhost exporty]$ db2 terminate

DB20000I  The TERMINATE command completed successfully.


[db2inst1@localhost exporty]$ db2 create database mytable2

DB20000I  The CREATE DATABASE command completed successfully.

[db2inst1@localhost exporty]$ db2 connect to mytable2

   Database Connection Information

 Database server        = DB2/LINUXX8664 9.7.6
 SQL authorization ID   = DB2INST1
 Local database alias   = MYTABLE2

Import do bazy z utworzeniem nowej tabeli TABLE_COPY. Aby to wykonać eksport musi być wykonany w formacie IFX.
[db2inst1@localhost exporty]$ db2 "import from file.ixf of ixf create into table_copy"

SQL3150N  The H record in the PC/IXF file has product "DB2    02.00", date
"20171205", and time "190012".

SQL3153N  The T record in the PC/IXF file has name "file.ixf", qualifier "",
and source "            ".

SQL3109N  The utility is beginning to load data from file "file.ixf".

SQL3110N  The utility has completed processing.  "6" rows were read from the
input file.

SQL3221W  ...Begin COMMIT WORK. Input Record Count = "6".

SQL3222W  ...COMMIT of any database changes was successful.

SQL3149N  "6" rows were processed from the input file.  "6" rows were
successfully inserted into the table.  "0" rows were rejected.

Number of rows read         = 6
Number of rows skipped      = 0
Number of rows inserted     = 6
Number of rows updated      = 0
Number of rows rejected     = 0
Number of rows committed    = 6

W przypadku takiego importu do nowej tabeli wystąpi błąd
[db2inst1@localhost exporty]$ db2 "import from file.del of del messages import.msg create into table_copy"

SQL3303N  The file type must be IXF when using the CREATE or REPLACE_CREATE
keywords in the Action String parameter.

Import z opcją INSERT czyli wczytania do istniejącej tabeli. Jeśli jej nie ma musimy ją najpierw utworzyć.
[db2inst1@localhost exporty]$ db2 import from file.ixf of ixf messages msg.txt insert into table_copy2

SQL3304N  The table does not exist.

Jeśli wykonamy import z opcją INSERT INTO do istniejącej tabeli dane zostaną dopisane do tych które już są w tabeli. Warunkiem jest że muszą się zgadzać kolumny tabeli.
[db2inst1@localhost exporty]$ db2 import from file.ixf of ixf messages msg.txt insert into table_copy

Number of rows read         = 6
Number of rows skipped      = 0
Number of rows inserted     = 6
Number of rows updated      = 0
Number of rows rejected     = 0
Number of rows committed    = 6

Więcej informacji o składniach IMPORTU i EXPORTU znajdziecie na stronach IBM:
https://www.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0008303.html
https://www.ibm.com/support/knowledgecenter/en/SSEPGG_9.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0008304.html

Ten wpis został opublikowany w kategorii DB2 i oznaczony tagami . Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz