Verifica di consistenza
Opzioni di distribuzione: IBM Netezza Appliance
Imparate a conoscere il controllo di coerenza.
utilità di checksum dei dati nz_md5_qsum
Il comando nz_md5_qsum calcola un checksum univoco per una query su una tabella. Il comando offre un modo pratico per confrontare i dati tra i nodi e determinare se i contenuti delle tabelle sono sincronizzati. Utilizzare l'utilità quando la vista _v_replication_sync mostra che il subordinato ha applicato tutte le transazioni impegnate dal primario, indicando che i nodi sono sincronizzati.
L'utilità nz_md5_qsum è implementata come una funzione UDF che deve essere eseguita sul database
SYSTEM. L'input per l'utility è una dichiarazione SELECT.SELECT <col_list> FROM <database>..<user_table>[WHERE ...]La clausola WHERE è facoltativa. La tabella utenti fornita alla query SELECT può avere un massimo di 64 colonne.Esempio:
SELECT nz_md5_qsum ('SELECT * FROM test..table1');
L'output dell'utilità nz_md5_qsum è una tabella con le seguenti colonne.
Poiché calcola il checksum sul set di dati restituito dalla query, l'utilità nz_md5_qsum ha un impatto variabile sulle prestazioni del nodo Netezza quando viene invocata per una tabella di grandi dimensioni.
| Nome colonna | Tipo di dati | Valore |
|---|---|---|
| DATASO | char(32) | checksum a 32 cifre esadecimali dei dati della tabella. |
| SCHEMA | char(32) | checksum a 32 cifre esadecimali del layout della tabella. |
| NUMROWS | BIGINT | Numero di righe. |
| NUMCOLS | int | Numero di colonne. |
Installazione dell'utilità nz_md5_qsum
È necessario installare l'utility nz_md5_qsum sia sul sistema primario che su quello subordinato. Il programma di installazione si trova nel seguente percorso: /nz/kit/bin/adm/tools/nzqsum.
- Eseguire il comando riportato di seguito:
tar xvf nz_md5_qsum.tar - Come
admineseguire lo script installQsum.pl con un nome utente e una password validi.Se si vuole installare l'utilità nz_md5_qsum come utente non amministratore, utilizzare un flag aggiuntivo-fenced=1.Esempio:$ ./installQsum.pl -u testuser -pw password@123 -fenced=1 Installing QSUM to database system DonePer installare correttamente questa utility come utente non amministratore, è necessario disporre dei seguenti permessi minimi.
Utilizzate questo comando SQL per concedere tutti questi permessi:YSTEM.ADMIN(ADMIN)=> \dpu testuser User object permissions for user 'TESTUSER' Database Name | Schema Name | Object Name | L S I U D T L A D B L G O E C R X A | D G U S T E X Q Y V M I B R C S H F A L P N S R ---------------+-------------+-------------+-------------------------------------+------------------------------------------------- GLOBAL | GLOBAL | TABLE | X X | GLOBAL | GLOBAL | PROCEDURE | X | GLOBAL | GLOBAL | GLOBAL | | X X X X X X (3 rows) Object Privileges (L)ist (S)elect (I)nsert (U)pdate (D)elete (T)runcate (L)ock (A)lter (D)rop a(B)ort (L)oad (G)enstats Gr(O)om (E)xecute Label-A(C)cess Label-(R)estrict Label-E(X)pand Execute-(A)s Administration Privilege (D)atabase (G)roup/Role (U)ser (S)chema (T)able T(E)mp E(X)ternal Se(Q)uence S(Y)nonym (V)iew (M)aterialized View (I)ndex (B)ackup (R)estore va(C)uum (S)ystem (H)ardware (F)unction (A)ggregate (L)ibrary (P)rocedure U(N)fence (S)ecurity Scheduler (R)ule\c drop user testuser; create user testuser with password 'password1'; grant create table to testuser; grant create function to testuser; grant create procedure to testuser; grant create temp table to testuser; grant create view to testuser; grant create aggregate to testuser; grant execute on procedure to testuser; grant list, select on table to testuser;
utilizzo dello script installQsum.pl
| Immissione | Descrizione |
|---|---|
| -u | Specifica l'ID utente utilizzato per connettersi al database SYSTEM. L'utente predefinito è NZ_USER. |
| -pw | Specifica la password utilizzata per connettersi al database SYSTEM. La password predefinita è NZ_PASSWORD. |
| -disinstallare | Disinstalla l'utilità. |
| -fenced=1 | -f=1 | Installa le funzioni intermedie, aggrega in modalità recintata. |
\c
drop database db1;
create database db1;
\c db1
create table table1(c1 int, c2 varchar(10));
insert into table1 values(1, 'asdf');
\c system testuser password1
SELECT NZ_MD5_QSUM('SELECT * FROM db1..table1');Output:SYSTEM.ADMIN(TESTUSER)=> SELECT NZ_MD5_QSUM('SELECT * FROM db1..table1');
DATASUM | SCHEMASUM | NUMROWS | NUMCOLS
----------------------------------+----------------------------------+---------+---------
0D030E080C00090104080D0605040D0E | 060E0D09090000000808070D0A070303 | 1 | 2
(1 row)