[comment]: # translation:outdated

[comment]: # ({e26480a0-e26480a0})
# 3 Actualització de la base de dades envers les claus primàries

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

[comment]: # ({70ef924c-53564572})
### Vista general

Aquesta secció proporciona instruccions per actualitzar manualment les taules de les instal·lacions existents a les claus primàries.

L'actualització a claus primàries optimitza la manera com s'indexen i s'accedeix a les dades, cosa que pot accelerar les consultes i estalviar espai.
També millora la gestió de dades i la sincronització en configuracions en clúster, ajudant a escalar i garantir que el sistema segueixi sent fiable encara que alguns servidors fallin.

::: noteimportant
Les instruccions proporcionades en aquesta pàgina estan dissenyades per a usuaris avançats i és possible que s'hagin d'ajustar a la vostra configuració específica.
L'actualització a les claus primàries pot suposar un consum de temps i de recursos.
Assegureu-vos que hi ha prou espai lliure disponible al disc; depenent de la mida de la base de dades i de les dades emmagatzemades, el procés pot menester fins a 2,5 vegades l'espai que empren actualment les taules d'historial.
:::

Les claus primàries s'empren per a totes les taules en instal·lacions noves des de Zabbix 6.0.

No hi ha cap actualització automàtica de la base de dades a les claus primàries; tanmateix, les instal·lacions existents es poden actualitzar manualment **després** d'actualitzar el servidor Zabbix a 6.0 o posterior.

::: noteimportant
Des de Zabbix 7.0, l'actualització manual de les taules a claus primàries també actualitza les taules per emprar tipus de dades de doble precisió.
<br><br>
Si teniu Zabbix 7.0, les taules ja empren doble precisió.
Tanmateix, encara es poden seguir les instruccions d'aquesta pàgina per actualitzar les taules a claus primàries sense afectar les taules que ja empren doble precisió.
<br><br>
Si teniu Zabbix 6.4 (o anterior), primer considereu actualitzar les taules per duplicar la precisió.
Per obtindre més informació, veieu [Actualització a valors numèrics d'interval estès](/manual/appendix/install/db_float_range).
:::

Les instruccions són disponibles per a:

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

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

[comment]: # ({a10a3240-980f7329})
### Notes importants

Per fer l'actualització de la base de dades:

1. Atureu el servidor Zabbix.

Es recomana aturar el servidor Zabbix durant el moment de l'actualització.
Tanmateix, si és absolutament necessari, podeu fer l'actualització mentre el servidor és engegat (només per a MySQL, MariaDB i PostgreSQL sense TimescaleDB).

2. Feu una còpia de seguretat de la vostra base de dades.

Si feu anar PostgreSQL/TimescaleDB, consulteu els [problemes coneguts](/manual/installation/known_issues#database-restore-error-with-postgresqltimescaledb-after-upgrade-from) per restaurar una còpia de seguretat de PostgreSQL/TimescaleDB creada a Zabbix 7.0.0-7.0.4.

3. Instal·leu el darrer paquet zabbix-sql-scripts compatible amb la vostra versió de Zabbix (p. ex., per a RHEL: `dnf install zabbix-sql-scripts`).
4. Executeu els scripts de la vostra base de dades.
5. Inicieu el servidor Zabbix.

::: notewarning
Executeu els scripts només per a la base de dades del servidor. El proxy no es beneficiarà d'aquesta actualització.
:::

Si la base de dades té particions, poseu-vos en contacte amb l'administrador de la base de dades o amb el suport de Zabbix per obtindre ajuda.

Els fitxers CSV es poden esborrar després d'una actualització correcta a les claus primàries.

Opcionalment, la interfície Zabbix es pot canviar a [mode de manteniment](/manual/web_interface/maintenance_mode).

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

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

La exportació i importació s'hauran de fer a tmux/screen per assegurar que la sessió no es perd pas.

Veieu també: [Notes importants](#important-notes)

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

[comment]: # ({382e4130-dc89d749})
#### MySQL 8.0+ amb mysqlsh

Aques mètode es pot emprar amb un servidor Zabbix en marxa, però es recomana aturar el servidor mentre s'actualitza.
La MySQL Shell (*mysqlsh*) ha d'ésser [instal·lada](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-install-linux-quick.html) i poder-se connectar amb la DB. 

* Entreu a la consola de MySQL com a root (recomanat) o qualsevol altre usuari amb privilegis FILE.

* Inicieu MySQL amb la variable [local_infile](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_local_infile) activa.

* Reanomeneu les taules antigues i creeu taules noves executant `history_pk_prepare.sql`.

```bash
mysql -uzabbix -p<password> zabbix < /usr/share/zabbix-sql-scripts/mysql/option-patches/history_upgrade_prepare.sql
```

* Exporteu i importeu la informació.

Connecteu via mysqlsh. Si empreu una connexió socket, és necessari especificar la ruta.

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

Passeu a mode JavaScript, fent:

```mysql
\js
```

I executeu (CSVPATH es pot canviar, si cal):

```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" });
```

Si rebeu el missatge "JavaScript no és compatible", la vostra instal·lació de MySQL Shell no és compatible amb JS. En aquest cas, instal·leu el [paquet MySQL Shell] oficial (https://dev.mysql.com/downloads/shell/) d'Oracle (o compileu-lo des del codi font) perquè el mode JavaScript sigui actiu.

* Seguiu les [instruccions de post-migració](#post-migration) per buidar les taules antigues.

[comment]: # ({/382e4130-dc89d749})

[comment]: # ({0a0da91d-b132f69b})
#### MariaDB/MySQL 8.0+ sense mysqlsh

Aquest mètode d'actualització pren més temps i s'ha d'emprar només si l'actualització amb *mysqlsh* no fos possible.

##### Actualització de la taula

* Entreu a la consola de MySQL com a root (recomanat) o qualsevol altre usuari amb privilegis FILE.

* Engegueu MySQL amb la variable [local_infile](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_local_infile) activa.

* Reanomeneu les taules antigues i creeu les noves executant `history_pk_prepare.sql`:

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

##### Migració amb el servidor aturat

S'ha de deshabilitar el `max_execution_time`(a MySQL) o `max_statement_time` (a MariaDB) abans de migrar la informació, per evitar que s'esgoti el temps d'espera durant la migració.

amb MySQL:

```sql
SET @@max_execution_time=0;
```

Amb MariaDB:

```sql
SET @@max_statement_time=0;
```

```sql
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;
```

Seguiu les [instruccions de post-migració](#post-migration) per buidar les taules antigues.

##### Migració amb el servidor en marxa

Reviseu per quines rutes import/export és activat:

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

Si el valor *secure_file_priv* és una ruta cap a un directori, export/import es farà per als arxius d'aquell directori. En aquest cas, editeu les rutes als arxius en consultes segons el valor *secure_file_priv* cap a una cadena buida per al temps d'actualització.

Si el valor *secure_file_priv* és buit, export/import pot fer-se des de qualsevol ubicació.

Si el valor *secure_file_priv* és NULL, establiu la ruta que conté la informació de la taula exportada ('/var/lib/mysql-files/' a l'exemple de més amunt). 

Per tindre més informació, veieu la [documentació de MySQL](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv) o de [MariaDB](https://mariadb.com/docs/server/ha-and-performance/optimization-and-tuning/system-variables/server-system-variables#secure_file_priv).

S'ha de deshabilitar el `max_execution_time`(a MySQL) o `max_statement_time` (a MariaDB)  abans d'exportar informació, per evitar que s'esgoti el temps d'espera durant la exportació.

Amb MySQL:
```sql
SET @@max_execution_time=0;
```
Amb MariaDB:
```sql
SET @@max_statement_time=0;
```

```sql
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';
```

Seguiu les [instruccions de post-migració](#post-migration) per buidar les taules antigues.

[comment]: # ({/0a0da91d-b132f69b})

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

Exportar i importar s'ha de fre des de la tmux/screen, per assegurar-nos que la sessió no es perd. Per instal·lacions amb TimescaleDB, salteu aquesta secció i procediu amb [PostgreSQL + TimescaleDB](#postgresql-timescaledb).

Veieu també: [Notes importants](#important-notes)

#### Actualització de la taula

* Reanomeneu les taules emprant `history_pk_prepare.sql`:

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

#### Migració amb el servidor aturat

* Exporteu l'historial actual, importeu-lo a la taula temporal, i després inseriu la informació a noves taules ignorant duplicitats:

``` {.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;
```

Veieu els consells per millorar el rendiment d'INSERT: [PostgreSQL: Bulk Loading Huge Amounts of Data](https://www.cybertec-postgresql.com/en/postgresql-bulk-loading-huge-amounts-of-data), [Checkpoint Distance and Amount of WAL](https://www.cybertec-postgresql.com/en/checkpoint-distance-and-amount-of-wal).

Seguiu les [instruccions de post-migració](#post-migration) per buidar les taules antigues.

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

[comment]: # ({8f70859a-7e590ff3})
#### Migrció amb el servidor en marxa

* Exporteu l'historial actual, importeu-lo a la taula temporal, i inseriu la informació a les noves taules ignorant duplicitats:

```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;
```
* Seguiu les [instruccions de post-migració](#post-migration) per buidar les taules antigues.

[comment]: # ({/8f70859a-7e590ff3})

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

La exportació i importació s'ha de fer amb tmux/screen per assegurar que la sessió no es tanca.
El servidor de Zabbix ha d'ésser aturat durant l'actualització.

Veieu també: [Notes importants](#important-notes)

* Reanomeneu les taules emprant `history_pk_prepare.sql`.
  * Si la compressió és activa (instal·lació per defecte), correu l'script des de `/usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/with-compression`:
    ```bash
    cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/with-compression/history_upgrade_prepare.sql | sudo -u zabbix psql zabbix
    ```
  * Si la compressió és desactivada, correu l'script des de `/usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/without-compression`:
    ```bash
    cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/without-compression/history_upgrade_prepare.sql | sudo -u zabbix psql zabbix
    ```

* Executeu els scripts de migració d'hipertaula TimescaleDB en base a la configuració de compressió:
  * Si la compressió és activa (a les instal·lacions per defecte), executeu els scripts des de `database/postgresql/tsdb_history_pk_upgrade_with_compression`:
    ```bash
    cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/with-compression/history_upgrade.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/with-compression/history_upgrade_uint.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/with-compression/history_upgrade_log.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/with-compression/history_upgrade_str.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/with-compression/history_upgrade_text.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/with-compression/trends_upgrade.sql | sudo -u zabbix psql zabbix
    ```
  * Si la compressió és desactivada, executeu els scripts des de `database/postgresql/tsdb_history_pk_upgrade_no_compression`:
    ``` bash
    cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/without-compression/history_upgrade.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/without-compression/history_upgrade_uint.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/without-compression/history_upgrade_log.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/without-compression/history_upgrade_str.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/without-compression/history_upgrade_text.sql | sudo -u zabbix psql zabbix
    cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/without-compression/trends_upgrade.sql | sudo -u zabbix psql zabbix
    ```

Veieu també: [Consells](https://www.tigerdata.com/blog/13-tips-to-improve-postgresql-insert-performance/) per millorar el rendiment de l'INSERT.

* Seguiu les [instruccions de post-migració](#post-migration) per buidar les taules antigues.

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

[comment]: # ({5bbab9b5-4b428c7c})
### Oracle

::: noteimportant
El suport d'Oracle DB és obsolet des de Zabbix 7.0.
:::

La exportació i importació s'ha de fer amb tmux/screen per assegurar que la sessió no es tanca pas. El servidor de Zabbix ha d'ésser aturat durant l'actualització.

Veieu també: [Notes importants](#important-notes)

#### Actualització de la taula

* Instal·leu Oracle Data Pump (disponible al [paquet Instant Client Tools](https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html)). 

Veieu els consells de rendiment de l'Oracle Data Pump a la [documentació](https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump-performance-tips.html).

* Reanomeneu les taules emprant `history_upgrade_prepare.sql`.

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

[comment]: # ({/5bbab9b5-4b428c7c})

[comment]: # ({cd255687-0dd33561})
#### Migració amb Batch de les taules d'històric

* Prepareu els directoris per Data Pump.

Data Pump ha de tindre permisos de lectura i escriptura a aquests directoris.

Exemple:

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

* Creeu un objecte directori i doneu-hi permisos de lectura i escriptura a l'usuari d'autenticació de Zabbix ('zabbix', a l'exemple de més avall). Amb el rol *sysdba*, executeu:

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

* Exporteu les taules. Substituïu N amb el comptador que vulgueu.

``` 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
```

* Importeu les taules. Substituïu N amb el comptador que vulgueu.

```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
```

* Seguiu les [instruccions de post-migració](#post-migration) per buidar les taules antigues.

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

[comment]: # ({a88ef874-f0426f06})
#### Migració individual de la taula d'històric

* Prepareu els directoris per Data Pump per cada taula d'històric.
Data Pump ha de tindre permisos de lectura i escriptura en aquests directoris.

Exemple:

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

* Creeu un directori i doneu-hi permisos de lectura i escriptura a l'usuari que empreu per l'autenticació de Zabbix ('zabbix', a l'exemple de més avall). Sota el rol *sysdba*, executeu:

```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;
```

* Exporteu i importeu cada taula. Substituïu N amb el comptador que empreu.

```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
```

* Seguiu les [instruccions de post-migració](#post-migration) per buidar les taules antigues.

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

[comment]: # ({e73536ae-b041e427})
### Post-migració

Per a totes les bases de dades, una vegada hagueu enllestit la migració, procediu així:

* Verifiqueu que tot funciona com hagueu previst.

* Esborreu les taules antigues:

```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;
```

* Per a TimescaleDB, també dropeu la taula antiga següent:
```sql
DROP TABLE trends_old;
```

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

[comment]: # ({16ed11f0-8ee7d9aa})
#### Veieu també

-   [Preparar la taula de registre d'auditoria per particionar](/manual/appendix/install/auditlog_primary_keys)

[comment]: # ({/16ed11f0-8ee7d9aa})
