[comment]: # translation:outdated

[comment]: # ({e26480a0-e26480a0})
# 3 Aktualizacja bazy danych do kluczy głównych

[comment]: # ({/e26480a0-e26480a0})

[comment]: # ({da817d61-53564572})
### Przegląd

Od wersji Zabbix 6.0, klucze główne są używane dla wszystkich tabel w 
nowych instalacjach.

Ta sekcja zawiera instrukcje dotyczące ręcznej aktualizacji 
tabel historycznych w istniejących instalacjach do kluczy głównych.

Instrukcje są dostępne dla:

* [MySQL](#mysql)
* [PostgreSQL](#postgresql)
* [TimescaleDB](#postgresql-timescaledb)
* [Oracle](#oracle)

[comment]: # ({/da817d61-53564572})

[comment]: # ({99edd6cb-20fe197a})

::: noteimportant
Instrukcje zawarte na tej stronie są przeznaczone dla zaawansowanych użytkowników.
Należy pamiętać, że te instrukcje mogą wymagać dostosowania do konkretnej konfiguracji.
:::

[comment]: # ({/99edd6cb-20fe197a})

[comment]: # ({62ef1e0d-980f7329})

### Istotne informacje

- Upewnij się, że przed aktualizacją wykonano kopię zapasową bazy danych.
- Jeśli baza danych używa partycji, skontaktuj się z administratorem bazy danych lub zespołem wsparcia Zabbix po pomoc.
- Zaleca się zatrzymanie serwera Zabbix na czas aktualizacji. Jeśli jednak jest to absolutnie konieczne, można przeprowadzić aktualizację przy działającym serwerze (dotyczy tylko MySQL, MariaDB i PostgreSQL bez TimescaleDB).
- Pliki CSV mogą zostać usunięte po pomyślnej aktualizacji do kluczy głównych.
- Opcjonalnie, frontend Zabbix może zostać przełączony w [tryb konserwacji](/manual/web_interface/maintenance_mode).
- Aktualizację do kluczy głównych należy przeprowadzić po aktualizacji serwera Zabbix do wersji 6.0.
- Tabele historyczne na proxy, które nie są używane, mogą być zaktualizowane przez wykonanie skryptu history_pk_prepare.sql.

[comment]: # ({/62ef1e0d-980f7329})

[comment]: # ({4f99bcf1-1551eb55})
### MySQL

Eksport i import należy wykonać w tmux/screen, aby zapewnić, że sesja nie zostanie przerwana.

Zobacz także: [Instotne informacje](#important-notes)

[comment]: # ({/4f99bcf1-1551eb55})

[comment]: # ({7c80488a-dc89d749})

### MySQL 8.0+ z mysqlsh

Ta metoda może być użyta przy działającym serwerze Zabbix, ale zaleca się zatrzymanie serwera na czas aktualizacji.
MySQL Shell (*mysqlsh*), musi być [zainstalowany](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-install-linux-quick.html) i możliwe jest połączenie z bazą danych.

* Zaloguj się do konsoli MySQL jako root (zalecane) lub jako dowolny użytkownik z uprawnieniami FILE.

* Uruchom MySQL z włączoną zmienną [local_infile](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_local_infile).

* Zmień nazwy starych tabel i utwórz nowe tabele, uruchamiając `history_pk_prepare.sql`.

``` {.bash}
mysql -uzabbix -p<password> zabbix < /usr/share/zabbix-sql-scripts/mysql/history_pk_prepare.sql
```

* Eksportuj i importuj dane.

Połącz się za pomocą mysqlsh. Jeśli używasz połączenia do gniazda, może być konieczne określenie ścieżki.

    sudo mysqlsh -uroot -S /run/mysqld/mysqld.sock --no-password -Dzabbix

Uruchom (CSVPATH można zmienić według potrzeb):

``` {.javascript}
CSVPATH="/var/lib/mysql-files";

util.exportTable("history_old", CSVPATH + "/history.csv", { dialect: "csv" });
util.importTable(CSVPATH + "/history.csv", {"dialect": "csv", "table": "history" });

util.exportTable("history_uint_old", CSVPATH + "/history_uint.csv", { dialect: "csv" });
util.importTable(CSVPATH + "/history_uint.csv", {"dialect": "csv", "table": "history_uint" });

util.exportTable("history_str_old", CSVPATH + "/history_str.csv", { dialect: "csv" });
util.importTable(CSVPATH + "/history_str.csv", {"dialect": "csv", "table": "history_str" });

util.exportTable("history_log_old", CSVPATH + "/history_log.csv", { dialect: "csv" });
util.importTable(CSVPATH + "/history_log.csv", {"dialect": "csv", "table": "history_log" });

util.exportTable("history_text_old", CSVPATH + "/history_text.csv", { dialect: "csv" });
util.importTable(CSVPATH + "/history_text.csv", {"dialect": "csv", "table": "history_text" });
```

* Postępuj zgodnie z [instrukcjami po migracji](#post-migration), aby usunąć stare tabele.

[comment]: # ({/7c80488a-dc89d749})

[comment]: # ({3bb034ed-b132f69b})

#### MariaDB/MySQL 8.0+ bez mysqlsh

Ta metoda aktualizacji zajmuje więcej czasu i powinna być używana tylko wtedy, gdy aktualizacja za pomocą *mysqlsh* nie jest możliwa.

##### Aktualizacja tabel

* Zaloguj się do konsoli MySQL jako root (zalecane) lub jako dowolny użytkownik z uprawnieniami FILE.

* Uruchom MySQL z włączoną zmienną [local_infile](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_local_infile).

* Zmień nazwy starych tabel i utwórz nowe tabeli, uruchamiając `history_pk_prepare.sql`:

``` {.bash}
mysql -uzabbix -p<password> zabbix < /usr/share/zabbix-sql-scripts/mysql/history_pk_prepare.sql
```

##### Migracja przy zatrzymanym serwerze

Wartość *max_execution_time* musi zostać wyłączona przed migracją danych, aby uniknąć przekroczenia limitu czasu podczas migracji.

``` {.sql}
SET @@max_execution_time=0;

INSERT IGNORE INTO history SELECT * FROM history_old;
INSERT IGNORE INTO history_uint SELECT * FROM history_uint_old;
INSERT IGNORE INTO history_str SELECT * FROM history_str_old;
INSERT IGNORE INTO history_log SELECT * FROM history_log_old;
INSERT IGNORE INTO history_text SELECT * FROM history_text_old;
```

Postępuj zgodnie z [instrukcjami po migracji](#post-migration), aby usunąć stare tabele.

##### Migracja przy działającym serwerze

Sprawdź, dla których ścieżek import/eksport jest włączony:

``` {.sql}
mysql> SELECT @@secure_file_priv;
+-----------------------+
| @@secure_file_priv    |
+-----------------------+
| /var/lib/mysql-files/ |
+-----------------------+
```

Jeśli wartość *secure_file_priv* jest ścieżką do katalogu, eksport/import będzie przeprowadzony dla 
plików w tym katalogu. W tym przypadku należy odpowiednio zmienić ścieżki do plików w zapytaniach lub ustawić wartość *secure_file_priv* na pusty ciąg znaków na czas aktualizacji.

Jeśli wartość *secure_file_priv* jest pusta, eksport/import 
może być przeprowadzony z dowolnego miejsca.

Jeśli wartość *secure_file_priv* jest NULL, ustaw ją na ścieżkę zawierającą dane tabeli, które zostały wyeksportowane (np. '/var/lib/mysql-files/' w powyższym przykładzie).

Więcej informacji znajdziesz w 
[dokumentacji MySQL](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv).

*max_execution_time* musi być wyłączony przed eksportem danych, aby uniknąć przekroczenia czasu oczekiwania podczas eksportu.

``` {.sql}
SET @@max_execution_time=0;

SELECT * INTO OUTFILE '/var/lib/mysql-files/history.csv' FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n' FROM history_old;
LOAD DATA INFILE '/var/lib/mysql-files/history.csv' IGNORE INTO TABLE history FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n';

SELECT * INTO OUTFILE '/var/lib/mysql-files/history_uint.csv' FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n' FROM history_uint_old;
LOAD DATA INFILE '/var/lib/mysql-files/history_uint.csv' IGNORE INTO TABLE history_uint FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n';

SELECT * INTO OUTFILE '/var/lib/mysql-files/history_str.csv' FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n' FROM history_str_old;
LOAD DATA INFILE '/var/lib/mysql-files/history_str.csv' IGNORE INTO TABLE history_str FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n';

SELECT * INTO OUTFILE '/var/lib/mysql-files/history_log.csv' FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n' FROM history_log_old;
LOAD DATA INFILE '/var/lib/mysql-files/history_log.csv' IGNORE INTO TABLE history_log FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n';

SELECT * INTO OUTFILE '/var/lib/mysql-files/history_text.csv' FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n' FROM history_text_old;
LOAD DATA INFILE '/var/lib/mysql-files/history_text.csv' IGNORE INTO TABLE history_text FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n';
```

Postępuj zgodnie z [instrukcjami po migracji](#post-migration), aby usunąć stare tabele.

[comment]: # ({/3bb034ed-b132f69b})

[comment]: # ({cf73a939-1139207b})
### PostgreSQL

Eksport i import muszą być wykonane w tmux/screen, aby zapewnić, że sesja nie zostanie przerwana.
Dla instalacji z TimescaleDB, pomiń tę sekcję i przejdź do [PostgreSQL + TimescaleDB](#postgresql-timescaledb).

Zobacz także: [Istotne informacje](#important-notes)

#### Aktualizacja tabel

* Zmień nazwy tabel za pomocą `history_pk_prepare.sql`:

```bash
sudo -u zabbix psql zabbix < /usr/share/zabbix-sql-scripts/postgresql/history_pk_prepare.sql
```

#### Migracja przy zatrzymanym serwerze

* Eksportuj bieżącą historię, zaimportuj ją do tabeli tymczasowej, 
następnie wstaw dane do nowych tabel, ignorując duplikaty:

```sql
INSERT INTO history SELECT * FROM history_old ON CONFLICT (itemid,clock,ns) DO NOTHING;

INSERT INTO history_uint SELECT * FROM history_uint_old ON CONFLICT (itemid,clock,ns) DO NOTHING;

INSERT INTO history_str SELECT * FROM history_str_old ON CONFLICT (itemid,clock,ns) DO NOTHING;

INSERT INTO history_log SELECT * FROM history_log_old ON CONFLICT (itemid,clock,ns) DO NOTHING;

INSERT INTO history_text SELECT * FROM history_text_old ON CONFLICT (itemid,clock,ns) DO NOTHING;
```

Zobacz wskazówki dotyczące poprawy wydajności polecenia INSERT: [PostgreSQL: Wsadowe ładowanie dużych ilości danych](https://www.cybertec-postgresql.com/en/postgresql-bulk-loading-huge-amounts-of-data), [Odległość od checkpointu i ilość WAL](https://www.cybertec-postgresql.com/en/checkpoint-distance-and-amount-of-wal).

* Postępuj zgodnie z [instrukcjami po migracji](#post-migration), aby usunąć stare tabele.

[comment]: # ({/cf73a939-1139207b})

[comment]: # ({0f156e4c-7e590ff3})

#### Migracja przy uruchomionym serwerze

* Eksportuj bieżącą historię, zaimportuj ją do tabeli tymczasowej, 
następnie wstaw dane do nowych tabel, ignorując duplikaty: 

``` {.sql}
\copy history_old TO '/tmp/history.csv' DELIMITER ',' CSV
CREATE TEMP TABLE temp_history (
    itemid                   bigint                                    NOT NULL,
    clock                    integer         DEFAULT '0'               NOT NULL,
    value                    DOUBLE PRECISION DEFAULT '0.0000'          NOT NULL,
    ns                       integer         DEFAULT '0'               NOT NULL
);
\copy temp_history FROM '/tmp/history.csv' DELIMITER ',' CSV
INSERT INTO history SELECT * FROM temp_history ON CONFLICT (itemid,clock,ns) DO NOTHING;

\copy history_uint_old TO '/tmp/history_uint.csv' DELIMITER ',' CSV
CREATE TEMP TABLE temp_history_uint (
    itemid                   bigint                                    NOT NULL,
    clock                    integer         DEFAULT '0'               NOT NULL,
    value                    numeric(20)     DEFAULT '0'               NOT NULL,
    ns                       integer         DEFAULT '0'               NOT NULL
);
\copy temp_history_uint FROM '/tmp/history_uint.csv' DELIMITER ',' CSV
INSERT INTO history_uint SELECT * FROM temp_history_uint ON CONFLICT (itemid,clock,ns) DO NOTHING;

\copy history_str_old TO '/tmp/history_str.csv' DELIMITER ',' CSV
CREATE TEMP TABLE temp_history_str (
    itemid                   bigint                                    NOT NULL,
    clock                    integer         DEFAULT '0'               NOT NULL,
    value                    varchar(255)    DEFAULT ''                NOT NULL,
    ns                       integer         DEFAULT '0'               NOT NULL
);
\copy temp_history_str FROM '/tmp/history_str.csv' DELIMITER ',' CSV
INSERT INTO history_str (itemid,clock,value,ns) SELECT * FROM temp_history_str ON CONFLICT (itemid,clock,ns) DO NOTHING;

\copy history_log_old TO '/tmp/history_log.csv' DELIMITER ',' CSV
CREATE TEMP TABLE temp_history_log (
    itemid                   bigint                                    NOT NULL,
    clock                    integer         DEFAULT '0'               NOT NULL,
    timestamp                integer         DEFAULT '0'               NOT NULL,
    source                   varchar(64)     DEFAULT ''                NOT NULL,
    severity                 integer         DEFAULT '0'               NOT NULL,
    value                    text            DEFAULT ''                NOT NULL,
    logeventid               integer         DEFAULT '0'               NOT NULL,
    ns                       integer         DEFAULT '0'               NOT NULL
);
\copy temp_history_log FROM '/tmp/history_log.csv' DELIMITER ',' CSV
INSERT INTO history_log SELECT * FROM temp_history_log ON CONFLICT (itemid,clock,ns) DO NOTHING;

\copy history_text_old TO '/tmp/history_text.csv' DELIMITER ',' CSV
CREATE TEMP TABLE temp_history_text (
    itemid                   bigint                                    NOT NULL,
    clock                    integer         DEFAULT '0'               NOT NULL,
    value                    text            DEFAULT ''                NOT NULL,
    ns                       integer         DEFAULT '0'               NOT NULL
);
\copy temp_history_text FROM '/tmp/history_text.csv' DELIMITER ',' CSV
INSERT INTO history_text SELECT * FROM temp_history_text ON CONFLICT (itemid,clock,ns) DO NOTHING;
```
* Postępuj zgodnie z [instrukcjami po migracji](#post-migration), aby usunąć stare tabele.

[comment]: # ({/0f156e4c-7e590ff3})

[comment]: # ({955e9c73-589d2f09})
### PostgreSQL + TimescaleDB

Eksport i import muszą być wykonane w tmux/screen, aby zapewnić, że sesja nie zostanie przerwana.
Serwer Zabbix powinien być wyłączony podczas aktualizacji.

Zobacz także: [Istotne informacje](#important-notes)

* Zmień nazwy tabel za pomocą `history_pk_prepare.sql`.

```bash
sudo -u zabbix psql zabbix < /usr/share/zabbix-sql-scripts/postgresql/history_pk_prepare.sql
```

::: noteimportant
Ścieżka do `history_pk_prepare.sql` została [zmieniona](/manual/introduction/whatsnew609#packages) od wersji Zabbix 6.0.9.
Dla wersji starszych niż 6.0.9, należy użyć następującej komendy:<br><br>

```bash
sudo -u zabbix psql zabbix < /usr/share/doc/zabbix-sql-scripts/postgresql/history_pk_prepare.sql
```
:::

* Uruchom skrypty migracji hipertabel TimescaleDB (kompatybilne zarówno z wersją TSDB v2.x, jak i v1.x) na podstawie ustawień kompresji:
  * Jeśli kompresja jest włączona (w domyślnej instalacji), uruchom skrypty z `/usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_with_compression`:
    ```bash
    cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_with_compression/history_pk.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_with_compression/history_pk_uint.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_with_compression/history_pk_log.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_with_compression/history_pk_str.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_with_compression/history_pk_text.sql | sudo -u zabbix psql zabbix
    ```
  * Jeśli kompresja jest wyłączona, uruchom skrypty z `/usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_no_compression`:
    ```bash
    cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_no_compression/history_pk.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_no_compression/history_pk_uint.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_no_compression/history_pk_log.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_no_compression/history_pk_str.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_no_compression/history_pk_text.sql | sudo -u zabbix psql zabbix
    ```

Zobacz także: [Wskazówki](https://blog.timescale.com/blog/13-tips-to-improve-postgresql-insert-performance/) dotyczące poprawy wydajności polecenia INSERT.

* Postępuj zgodnie z [instrukcjami po migracji](#post-migration), aby usunąć stare tabele.

[comment]: # ({/955e9c73-589d2f09})

[comment]: # ({07c27add-4b428c7c})

### Oracle

Eksport i import muszą być wykonane w tmux/screen, aby zapewnić, że sesja nie zostanie przerwana.
Serwer Zabbix powinien być wyłączony podczas aktualizacji.

Zobacz także: [Istotne informacje](#important-notes)

#### Aktualizacja tabel

* Zainstaluj Oracle Data Pump (dostępny w pakiecie [Instant Client Tools](https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html)). 

Zobacz [dokumentację](https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump-performance-tips.html) Oracle Data Pump dla wskazówek dotyczących wydajności.

* Zmień nazwy tabel za pomocą `history_pk_prepare.sql`.

```bash
cd /usr/share/zabbix/zabbix-sql-scripts/database/oracle
sqlplus zabbix/password@oracle_host/service
sqlplus> @history_pk_prepare.sql
```

[comment]: # ({/07c27add-4b428c7c})

[comment]: # ({59c3de85-0dd33561})

#### Zbiorcza migracja tabel historii

* Przygotuj katalogi dla Data Pump.

Data Pump musi mieć uprawnienia do odczytu i zapisu do tych katalogów.

Przykład:

```bash
mkdir -pv /export/history
chown -R oracle:oracle /export
```

* Utwórz obiekt katalogu i udziel uprawnień do odczytu i zapisu temu obiektowi użytkownikowi używanemu do uwierzytelniania w Zabbix (w poniższym przykładzie 'zabbix'). Pod rolą *sysdba* wykonaj:

```sql
create directory history as '/export/history';
grant read,write on directory history to zabbix;
```

* Eksportuj tabele. Zastąp N żądaną liczbą wątków.

```bash
expdp zabbix/password@oracle_host/service \
    DIRECTORY=history \
    TABLES=history_old,history_uint_old,history_str_old,history_log_old,history_text_old \
    PARALLEL=N
```

* Importuj tabele. Zastąp N żądaną liczbą wątków.

```bash
impdp zabbix/password@oracle_host/service \
    DIRECTORY=history \
    TABLES=history_uint_old \
 REMAP_TABLE=history_old:history,history_uint_old:history_uint,history_str_old:history_str,history_log_old:history_log,history_text_old:history_text \
    data_options=SKIP_CONSTRAINT_ERRORS table_exists_action=APPEND  PARALLEL=N CONTENT=data_only
```

* Postępuj zgodnie z [instrukcjami po migracji](#post-migration), aby usunąć stare tabele.

[comment]: # ({/59c3de85-0dd33561})

[comment]: # ({91b4fc19-f0426f06})
#### Indywidualna migracja tabel historii

* Przygotuj katalogi dla Data Pump dla każdej tabeli historii.
Data Pump musi mieć uprawnienia do odczytu i zapisu do tych katalogów.

Przykład:

```bash
mkdir -pv /export/history /export/history_uint /export/history_str /export/history_log /export/history_text
chown -R oracle:oracle /export
```

* Utwórz obiekt katalogu i udziel uprawnień do odczytu i zapisu temu obiektowi użytkownikowi używanemu do uwierzytelniania w Zabbix (w poniższym przykładzie 'zabbix'). Pod rolą *sysdba* wykonaj:

```sql
create directory history as '/export/history';
grant read,write on directory history to zabbix;

create directory history_uint as '/export/history_uint';
grant read,write on directory history_uint to zabbix;

create directory history_str as '/export/history_str';
grant read,write on directory history_str to zabbix;

create directory history_log as '/export/history_log';
grant read,write on directory history_log to zabbix;

create directory history_text as '/export/history_text';
grant read,write on directory history_text to zabbix;
```

* Eksportuj i importuj każdą tabelę. Zastąp N żądaną liczbą wątków.

```bash
expdp zabbix/password@oracle_host:1521/xe DIRECTORY=history TABLES=history_old PARALLEL=N

impdp zabbix/password@oracle_host:1521/xe DIRECTORY=history TABLES=history_old REMAP_TABLE=history_old:history data_options=SKIP_CONSTRAINT_ERRORS table_exists_action=APPEND PARALLEL=N CONTENT=data_only

expdp zabbix/password@oracle_host:1521/xe DIRECTORY=history_uint TABLES=history_uint_old PARALLEL=N

impdp zabbix/password@oracle_host:1521/xe DIRECTORY=history_uint TABLES=history_uint_old REMAP_TABLE=history_uint_old:history_uint data_options=SKIP_CONSTRAINT_ERRORS table_exists_action=APPEND PARALLEL=N CONTENT=data_only

expdp zabbix/password@oracle_host:1521/xe DIRECTORY=history_str TABLES=history_str_old PARALLEL=N

impdp zabbix/password@oracle_host:1521/xe DIRECTORY=history_str TABLES=history_str_old REMAP_TABLE=history_str_old:history_str data_options=SKIP_CONSTRAINT_ERRORS table_exists_action=APPEND PARALLEL=N CONTENT=data_only

expdp zabbix/password@oracle_host:1521/xe DIRECTORY=history_log TABLES=history_log_old PARALLEL=N

impdp zabbix/password@oracle_host:1521/xe DIRECTORY=history_log TABLES=history_log_old REMAP_TABLE=history_log_old:history_log data_options=SKIP_CONSTRAINT_ERRORS table_exists_action=APPEND PARALLEL=N CONTENT=data_only

expdp zabbix/password@oracle_host:1521/xe DIRECTORY=history_text TABLES=history_text_old PARALLEL=N

impdp zabbix/password@oracle_host:1521/xe DIRECTORY=history_text TABLES=history_text_old REMAP_TABLE=history_text_old:history_text data_options=SKIP_CONSTRAINT_ERRORS table_exists_action=APPEND PARALLEL=N CONTENT=data_only
```

* Postępuj zgodnie z [instrukcjami po migracji](#post-migration), aby usunąć stare tabele.

[comment]: # ({/91b4fc19-f0426f06})

[comment]: # ({2c44ab4c-b041e427})

### Po migracji

Dla wszystkich baz danych, po zakończeniu migracji, wykonaj następujące czynności:

* Sprawdź, czy wszystko działa zgodnie z oczekiwaniami.

* Usuń stare tabele:

```sql
DROP TABLE history_old;
DROP TABLE history_uint_old;
DROP TABLE history_str_old;
DROP TABLE history_log_old;
DROP TABLE history_text_old;
```

[comment]: # ({/2c44ab4c-b041e427})
