Desde o Zabbix 6.0, chaves primárias são usadas para todas as tabelas em novas instalações.
Esta seção fornece instruções para atualizar manualmente o tabelas de histórico em instalações existentes para chaves primárias.
As instruções estão disponíveis para:
The instructions provided on this page are designed for advanced users. Note that these instructions might need to be adjusted for your specific configuration.
A exportação e importação devem ser realizadas no tmux/screen, para que a sessão não seja descartada.
Veja também: Notas importantes
history_pk_prepare.sql
.mysql -uzabbix -p<senha> zabbix < /usr/share/doc/zabbix-sql-scripts/mysql/history_pk_prepare.sql
mysqlsh deve ser instalado. mysqlsh deve ser capaz de se conectar ao banco de dados. Se a conexão for feita através do socket, pode ser necessário indicar explicitamente um caminho para ele.
Conecte-se via mysqlsh:
Executar (CSVPATH deve/pode ser ajustado de acordo com as necessidades):
CSVPATH="/var/lib/mysql-files";
util.exportTable("history_old", CSVPATH + "/history.csv", { dialeto: "csv" });
util.importTable(CSVPATH + "/history.csv", {"dialect": "csv", "table": "history" });
util.exportTable("history_uint_old", CSVPATH + "/history_uint.csv", { dialeto: "csv" });
util.importTable(CSVPATH + "/history_uint.csv", {"dialect": "csv", "table": "history_uint" });
util.exportTable("history_str_old", CSVPATH + "/history_str.csv", { dialeto: "csv" });
util.importTable(CSVPATH + "/history_str.csv", {"dialect": "csv", "table": "history_str" });
util.exportTable("history_log_old", CSVPATH + "/history_log.csv", { dialeto: "csv" });
util.importTable(CSVPATH + "/history_log.csv", {"dialect": "csv", "table": "history_log" });
util.exportTable("history_text_old", CSVPATH + "/history_text.csv", { dialeto: "csv" });
util.importTable(CSVPATH + "/history_text.csv", {"dialect": "csv", "table": "history_text" });
Verifique se tudo funciona como esperado
Derrube tabelas antigas
DROP TABLE history_old;
DROP TABLE history_uint_old;
DROP TABLE history_str_old;
DROP TABLE history_log_old;
DROP TABLE history_text_old;
Esta opção é mais lenta e demorada, use somente se há uma razão para não usar o mysqlsh.
history_pk_prepare.sql
.mysql -uzabbix -p<senha> zabbix < /usr/share/doc/zabbix-sql-scripts/mysql/history_pk_prepare.sql
Verifique se a importação/exportação está habilitada apenas para arquivos no caminho específico:
mysql> SELECT @@secure_file_priv;
+-----------------------+
| @@secure_file_priv |
+-----------------------+
| /var/lib/mysql-files/ |
+-----------------------+
Se o valor for um caminho para o diretório, a exportação/importação poderá ser executada para arquivos nesse diretório. Neste caso, caminhos para arquivos em consultas devem ser editado em conformidade. Alternativamente, secure_file_priv pode ser desabilitado (definido como string vazia) durante a atualização. Se o valor estiver vazio, exportar/importar pode ser executado de/para arquivos que podem estar localizados em qualquer lugar.
max_execution_time deve ser desabilitado antes de exportar os dados para evitar o tempo limite durante a exportação.
SET @@max_execution_time=0;
SELECT * INTO OUTFILE '/var/lib/mysql-files/history.csv' CAMPOS TERMINADOS POR ',' ESCAPED POR '"' LINHAS TERMINADAS POR '\n' FROM history_old;
LOAD DATA INFILE '/var/lib/mysql-files/history.csv' IGNORE INTO TABLE history CAMPOS TERMINADOS POR ',' ESCAPED POR '"' LINHAS TERMINADAS POR '\n';
SELECT * INTO OUTFILE '/var/lib/mysql-files/history_uint.csv' CAMPOS TERMINADOS POR ',' ESCAPED POR '"' LINHAS TERMINADAS POR '\n' FROM history_uint_old;
LOAD DATA INFILE '/var/lib/mysql-files/history_uint.csv' IGNORE INTO TABLE history_uint CAMPOS TERMINADOS POR ',' ESCAPADO POR '"' LINHAS TERMINADAS POR '\n';
SELECT * INTO OUTFILE '/var/lib/mysql-files/history_str.csv' CAMPOS TERMINADOS POR ',' ESCAPED POR '"' LINHAS TERMINADAS POR '\n' FROM history_str_old;
LOAD DATA INFILE '/var/lib/mysql-files/history_str.csv' IGNORE INTO TABLE history_str CAMPOS TERMINADOS POR ',' ESCAPED POR '"' LINHAS TERMINADAS POR '\n';
SELECT * INTO OUTFILE '/var/lib/mysql-files/history_log.csv' CAMPOS TERMINADOS POR ',' ESCAPED POR '"' LINHAS TERMINADAS POR '\n' FROM history_log_old;
LOAD DATA INFILE '/var/lib/mysql-files/history_log.csv' IGNORE INTO TABLE history_log CAMPOS TERMINADOS POR ',' ESCAPED POR '"' LINHAS TERMINADAS POR '\n';
SELECT * INTO OUTFILE '/var/lib/mysql-files/history_text.csv' CAMPOS TERMINADOS POR ',' ESCAPED POR '"' LINHAS TERMINADAS POR '\n' FROM history_text_old;
LOAD DATA INFILE '/var/lib/mysql-files/history_text.csv' IGNORE INTO TABLE history_text CAMPOS TERMINADOS POR ',' ESCAPED POR '"' LINHAS TERMINADAS POR '\n';
Verifique se tudo funciona como esperado
Derrube tabelas antigas
DROP TABLE history_old;
DROP TABLE history_uint_old;
DROP TABLE history_str_old;
DROP TABLE history_log_old;
DROP TABLE history_text_old;
Dicas adicionais para melhorar o desempenho em ambos os casos:
[mysqld]
bulk_insert_buffer_size=256M
mysql cli > SET SESSION bulk_insert_buffer_size= 1024 * 1024 * 256;
mysql cli > ... importar consultas ...
Consulte "Otimizando o carregamento de dados em massa do InnoDB": (MySQL 5.7, MySQL 8.0)
Desabilite o log binário (não deve ser usado no caso de servidores escravos, uma vez que não irá replicar dados):
mysql cli > SET SESSION SQL_LOG_BIN=0;
mysql cli > ... importar consultas ...
This method can be used with a running Zabbix server, but it is recommended to stop the server for the time of the upgrade. The MySQL Shell (mysqlsh) must be installed and able to connect to the DB.
Log in to MySQL console as root (recommended) or as any user with FILE privileges.
Start MySQL with local_infile variable enabled.
Rename old tables and create new tables by running history_pk_prepare.sql
.
mysql -uzabbix -p<password> zabbix < /usr/share/doc/zabbix-sql-scripts/mysql/history_pk_prepare.sql
Connect via mysqlsh. If using a socket connection, specifying the path might be required.
Run (CSVPATH can be changed as needed):
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" });
This upgrade method takes more time and should be used only if an upgrade with mysqlsh is not possible.
Log in to MySQL console as root (recommended) or any user with FILE privileges.
Start MySQL with local_infile variable enabled.
Rename old tables and create new tables by running history_pk_prepare.sql
:
max_execution_time must be disabled before migrating data to avoid timeout during migration.
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;
Follow post-migration instructions to drop the old tables.
Check for which paths import/export is enabled:
mysql> SELECT @@secure_file_priv;
+-----------------------+
| @@secure_file_priv |
+-----------------------+
| /var/lib/mysql-files/ |
+-----------------------+
If secure_file_priv value is a path to a directory, export/import will be performed for files in that directory. In this case, edit paths to files in queries accordingly or set the secure_file_priv value to an empty string for the upgrade time.
If secure_file_priv value is empty, export/import can be performed from any location.
If secure_file_priv value is NULL, set it to the path that contains exported table data ('/var/lib/mysql-files/' in the example above).
For more information, see MySQL documentation.
max_execution_time must be disabled before exporting data to avoid timeout during export.
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';
Follow post-migration instructions to drop the old tables.
A exportação e importação devem ser realizadas no tmux/screen, para que a sessão não seja descartada.
Veja também: Notas importantes
history_pk_prepare.sql
.sudo -u zabbix psql zabbix < /usr/share/doc/zabbix-sql-scripts/postgresql/history_pk_prepare.sql
\copy history_old TO '/tmp/history.csv' DELIMITER ',' CSV
CRIAR TABELA TEMP temp_history (
itemid bigint NÃO NULO,
clock integer DEFAULT '0' NOT NULL,
valor PRECISÃO DUPLA PADRÃO '0.0000' NÃO NULO,
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) NÃO FAÇA NADA;
\copy history_uint_old TO '/tmp/history_uint.csv' DELIMITER ',' CSV
CRIAR TABELA TEMP temp_history_uint (
itemid bigint NÃO NULO,
clock integer DEFAULT '0' NOT NULL,
valor numérico(20) PADRÃO '0' NÃO NULO,
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) NÃO FAÇA NADA;
\copy history_str_old TO '/tmp/history_str.csv' DELIMITER ',' CSV
CRIAR TABELA TEMP temp_history_str (
itemid bigint NÃO NULO,
clock integer DEFAULT '0' NOT NULL,
valor varchar(255) DEFAULT '' NÃO NULO,
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) NÃO FAÇA NADA;
\copy history_log_old TO '/tmp/history_log.csv' DELIMITER ',' CSV
CRIAR TABELA TEMP temp_history_log (
itemid bigint NÃO NULO,
clock integer DEFAULT '0' NOT NULL,
timestamp integer DEFAULT '0' NOT NULL,
fonte varchar(64) DEFAULT '' NÃO NULO,
severidade integer DEFAULT '0' NOT NULL,
valor texto DEFAULT '' NÃO NULO,
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) NÃO FAÇA NADA;
\copy history_text_old TO '/tmp/history_text.csv' DELIMITER ',' CSV
CRIAR TABELA TEMP temp_history_text (
itemid bigint NÃO NULO,
clock integer DEFAULT '0' NOT NULL,
valor texto DEFAULT '' NÃO NULO,
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) NÃO FAÇA NADA;
Verifique se tudo funciona como esperado
Derrube tabelas antigas
DROP TABLE history_old;
DROP TABLE history_uint_old;
DROP TABLE history_str_old;
DROP TABLE history_log_old;
DROP TABLE history_text_old;
Considere usar as seguintes dicas para melhorar o desempenho da pastilha:
\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;
A exportação e importação devem ser realizadas no tmux/screen, para que a sessão não seja descartada.
Veja também: Notas importantes
history_pk_prepare.sql
.sudo -u zabbix psql zabbix < /usr/share/doc/zabbix-sql-scripts/postgresql/history_pk_prepare.sql
-- Verifique se há espaço suficiente para permitir a exportação de dados não compactados
selecione sum(before_compression_total_bytes)/1024/1024 como before_compression_total_mbytes, sum(after_compression_total_bytes)/1024/1024 como after_compression_total_mbytes FROM chunk_compression_stats('history_uint_old');
-- Exportar dados
\copy (selecione * from history_uint_old) TO '/tmp/history_uint.csv' DELIMITER ',' CSV
CRIAR TABELA TEMP temp_history_uint (
itemid bigint NÃO NULO,
clock integer DEFAULT '0' NOT NULL,
valor numérico(20) PADRÃO '0' NÃO NULO,
ns integer DEFAULT '0' NOT NULL
);
-- Importar dados
\copy temp_history_uint FROM '/tmp/history_uint.csv' DELIMITER ',' CSV
-- Criar hipertabela e preenchê-la
selecione create_hypertable('history_uint', 'clock', chunk_time_interval => 86400, migrate_data => true);
INSERT INTO history_uint SELECT * FROM temp_history_uint ON CONFLICT (itemid,clock,ns) NÃO FAÇA NADA;
-- Ativar a compactação
selecione set_integer_now_func('history_uint', 'zbx_ts_unix_now', true);
alter table history_uint set (timescaledb.compress,timescaledb.compress_segmentby='itemid',timescaledb.compress_orderby='clock,ns');
-- O ID do trabalho será retornado, deve ser passado para run_job
selecione add_compress_chunks_policy('history_uint', (
selecione (p.older_than).integer_interval de _timescaledb_config.bgw_policy_compress_chunks p
junção interna _timescaledb_catalog.hypertable h on (h.id=p.hypertable_id) onde h.table_name='history_uint'
)::inteiro
);
select alter_job((selecione job_id de timescaledb_information.jobs onde hypertable_schema='public' e hypertable_name='history_uint'), schedule => true);
-- Executar trabalho de compactação
chame run_job(<JOB_ID>);
-- Pode mostrar 'NOTICE: nenhum chunks for hypertable public.history_uint que satisfaça a política de compressão de chunks', tudo bem.
Verifique se tudo funciona como esperado
Derrube tabelas antigas
DROP TABLE history_old;
DROP TABLE history_uint_old;
DROP TABLE history_str_old;
DROP TABLE history_log_old;
DROP TABLE history_text_old;
Veja também: Dicas para melhorar o desempenho de inserção do PostgreSQL
A exportação e importação devem ser realizadas no tmux/screen, para que a sessão não seja descartada.
Veja também: Notas importantes
history_pk_prepare.sql
.sudo -u zabbix psql zabbix < /usr/share/doc/zabbix-sql-scripts/postgresql/history_pk_prepare.sql
-- Verifique se há espaço suficiente para permitir a exportação de dados não compactados
selecione sum(before_compression_total_bytes)/1024/1024 como before_compression_total_mbytes, sum(after_compression_total_bytes)/1024/1024 como after_compression_total_mbytes FROM chunk_compression_stats('history_uint_old');
-- Exportar dados
\copy (selecione * from history_uint_old) TO '/tmp/history_uint.csv' DELIMITER ',' CSV
CRIAR TABELA TEMP temp_history_uint (
itemid bigint NÃO NULO,
clock integer DEFAULT '0' NOT NULL,
valor numérico(20) PADRÃO '0' NÃO NULO,
ns integer DEFAULT '0' NOT NULL
);
-- Importar dados
\copy temp_history_uint FROM '/tmp/history_uint.csv' DELIMITER ',' CSV
-- Criar hipertabela e preenchê-la
selecione create_hypertable('history_uint', 'clock', chunk_time_interval => 86400, migrate_data => true);
INSERT INTO history_uint SELECT * FROM temp_history_uint ON CONFLICT (itemid,clock,ns) NÃO FAÇA NADA;
-- Ativar a compactação
selecione set_integer_now_func('history_uint', 'zbx_ts_unix_now', true);
alter table history_uint set (timescaledb.compress,timescaledb.compress_segmentby='itemid',timescaledb.compress_orderby='clock,ns');
-- Substitui seu esquema em hypertable_schema
-- O ID do trabalho será retornado, deve ser passado para run_job
selecione add_compression_policy('history_uint', (
selecione extract(epoch from (config::json->>'compress_after')::interval) de timescaledb_information.jobs onde application_name como 'Compression%%' e hypertable_schema='public' e hypertable_name='history_uint_old'
)::inteiro
);
select alter_job((selecione job_id de timescaledb_information.jobs onde hypertable_schema='public' e hypertable_name='history_uint'), schedule => true);
-- Executar trabalho de compactação
chame run_job(<JOB_ID>);
-- Pode mostrar 'NOTICE: nenhum chunks for hypertable public.history_uint que satisfaça a política de compressão de chunks', tudo bem.
Verifique se tudo funciona como esperado
Derrube tabelas antigas
DROP TABLE history_old;
DROP TABLE history_uint_old;
DROP TABLE history_str_old;
DROP TABLE history_log_old;
DROP TABLE history_text_old;
Veja também: Dicas para melhorar o desempenho de inserção do PostgreSQL
Data Pump must have read and write permissions to these directories.
Example:
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
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
A exportação e importação devem ser realizadas no tmux/screen, para que a sessão não seja descartada.
Veja também: Notas importantes
Além disso, considere dicas de desempenho para o Oracle Data Pump.
history_pk_prepare.sql
.shell> cd /path/to/zabbix-sources/database/oracle
shell> sqlplus zabbix/senha@oracle_host/ORCL
sqlplus> @history_pk_prepare.sql
Exemplo:
# mkdir -pv /exportar/histórico
# chown -R oracle: oracle /export
crie o histórico do diretório como '/export/history';
conceder leitura, gravação no histórico do diretório para o zabbix;
expdp zabbix/[email protected]:1521/z \
DIRETÓRIO=histórico \
TABLES=history_old,history_uint_old,history_str_old,history_log_old,history_text_old \
PARALELO=N
impdp zabbix/[email protected]:1521/z \
DIRETÓRIO=histórico \
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
Verifique se tudo funciona como esperado
Derrube tabelas antigas
DROP TABLE history_old;
DROP TABLE history_uint_old;
DROP TABLE history_str_old;
DROP TABLE history_log_old;
DROP TABLE history_text_old;
Além disso, considere dicas de desempenho para o Oracle Data Pump.
history_pk_prepare.sql
.shell> cd /path/to/zabbix-sources/database/oracle
shell> sqlplus zabbix/senha@oracle_host/ORCL
sqlplus> @history_pk_prepare.sql
Exemplo:
# mkdir -pv /export/history /export/history_uint /export/history_str /export/history_log /export/history_text
# chown -R oracle: oracle /export
crie o histórico do diretório como '/export/history';
conceder leitura, gravação no histórico do diretório para o zabbix;
crie o diretório history_uint como '/export/history_uint';
concede leitura, gravação no diretório history_uint para zabbix;
crie o diretório history_str como '/export/history_str';
conceder leitura, gravação no diretório history_str para zabbix;
crie o diretório history_log como '/export/history_log';
conceder leitura, gravação no diretório history_log para zabbix;
crie o diretório history_text como '/export/history_text';
conceder leitura, gravação no diretório history_text para zabbix;
expdp zabbix/[email protected]:1521/xe DIRECTORY=histórico TABLES=history_old PARALLEL=N
impdp zabbix/[email protected]: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/[email protected]:1521/xe DIRECTORY=history_uint TABLES=history_uint_old PARALLEL=N
impdp zabbix/[email protected]: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/[email protected]:1521/xe DIRECTORY=history_str TABLES=history_str_old PARALLEL=N
impdp zabbix/[email protected]: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/[email protected]:1521/xe DIRECTORY=history_log TABLES=history_log_old PARALLEL=N
impdp zabbix/[email protected]: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/[email protected]:1521/xe DIRECTORY=history_text TABLES=history_text_old PARALLEL=N
impdp zabbix/[email protected]: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
Verifique se tudo funciona como esperado
Derrube tabelas antigas
DROP TABLE history_old;
DROP TABLE history_uint_old;
DROP TABLE history_str_old;
DROP TABLE history_log_old;
DROP TABLE history_text_old;
For all databases, once the migration is completed, do the following:
Verify that everything works as expected.
Drop old tables: