Como utilizar o Pg::Snapshots
Aqui está como utilizar o PostgreSQL::Snapshots:
Como superusuário do banco de dados (normalmente postgres, mas cheque no seu sistema), faça o seguinte:
INSTALAÇÃO
1. Carregue o PL/Perlu no seu banco de dados. Veja a
documentação do comando createlang para detalhes em como
fazer isso;
2. Certifique-se que o DBI está instalado no seu sistema Perl e que o DBD do banco de dados escolhido também está instalado;
3. Edite o arquivo Makefile.sh, alterando a variável KEY para um valor "secreto" e a variável BASE_SCHEMA para o esquema onde serão colocadas as tabelas internas do Pg::Snapshot. Lembre-se também de configurar as demais variáveis como: SUPERUSER.
4. Execute no diretório raiz do PostgreSQL::Snapshots:
# ./Makefile.sh
5. Carregue o driver para o banco de dados:
- No PostgreSQL:
# psql -d <database> -h <host> -U <user> -f ./drivers/pg/snapshot.sql
- No Oracle, dento do SQL+:
SQL> @./drivers/oracle/snapshot.sql
6. Carregue o arquivo pgsnapshots.sql:
# psql -d <database> -h <host> -U <user> -f pgsnapshots.sql
7. Autorize o acesso da sua estação(ou do seu servidor remoto) a uma ou mais tabelas master para cada banco de dados:
- Dentro do psql, conectado como usuário POSTGRES:
db=# select snapshot_do('<key>', 'ALLOW', '<masterschema>', '<mastername>', '<ip>');
- ou dentro do SQL+, conectado como usuário SYS:
SQL> begin
snapshot_do('<key>', 'ALLOW', '<masterschema>', '<mastername>', '<ip>');
end;
/
Onde:
<key> é o valor "secreto" colocado na variável KEY do arquivo Makefile.sh.
<masterschema> é o esquema da tabela master que você deseja liberar
<mastername> é o nome da tabela master que você deseja liberar
<ip> é o endereço IP da estação/servidor para a qual você deseja liberar o acesso
8. Use as funções abaixo conforme necessário.
FUNÇÕES DISPONÍVEIS
1. create_dblink (implementação de "CREATE DBLINK")
Essa função cria uma
ligação entre banco de dados. Recebe como parâmetro
o nome do DBLINK a ser criado, além dos dados necessários
para o estabelecimento da conexão remota.
Sintaxe:
create_dblink(dblinkname text, datasource text, username text, password text, attributes text)
dblinkname: nome do DBLINK a ser criado
datasource: string de CONEXÃO Perl:DBI para o banco de dados remoto
username: NOME do usuário no banco de dados remoto
password: SENHA do usuário no banco de dados remoto
attributes: atributos da conexão, tal como AutoCommit, RaiseErrors, etc.
2. drop_dblink (implementação de "DROP DBLINK")
Essa função remove uma
ligação entre banco de dados, recebendo como
parâmetro apenas o nome do DBLink.
Sintaxe:
drop_dblink(dblinkname text)
dblinkname: nome do DBLINK a ser removido
3. create_snapshot (implementação de "CREATE SNAPSHOT" ou "CREATE MATERIALIZED VIEW")
Essa função cria uma visão materializada (MATERIALIZED VIEW ou SNAPSHOT) baseada em um consulta. Essa consulta pode, ou não, estar referenciando um DBLink.
Sintaxe:
create_snapshot(schemaname text, snapshotname text,
query text, dblink text, refresh_method text, prebuilt_table text)
schemaname: nome do esquema onde será criado o snapshot
snapshotname: nome do snapshot a ser criado. Se prebuilt_table for fornecido, esse nome é apenas um nome fantasia, caso contrário, será o nome da tabela-resultado criada.
query: consulta que será executada no servidor remoto e cujo resultado preencherá o snapshot no banco de dados local
dblink: informação opcional que contém o nome do dblink a ser utilizado. Caso seja informado NULL, a consulta será enviada ao banco de dados local.
refresh_method: pode ser COMPLETE, FAST ou FORCE.
prebuilt_table: nome da tabela existente, no mesmo esquema do snapshot, sobre a qual o snapshot será criado (dados existentes são preservados). Este parâmetro é opcional.
IMPORTANTE: a tabela não será preenchida por esse comando.
4. drop_snapshot (implementação de "DROP SNAPSHOT" ou "DROP MATERIALIZED VIEW")
Essa função remove uma visão
materializada (MATERIALIZED VIEW ou SNAPSHOT) recebendo como
parâmetro o nome do Esquema e do Snapshot.
Sintaxe:
drop_snapshot (schemaname text, snapshotname text)
schemaname: nome do esquema onde está o snapshot a ser removido
snapshotname: nome do snapshot a ser removido
5. create_snapshot_log (implementação de "CREATE MATERIALIZED VIEW LOG" ou "CREATE SNAPSHOT LOG")
Essa função cria uma tabela de logs acoplada a uma tabela master. Essa tabela de logs permite a criação de snapshots com atualização rápida (FAST REFRESH).
Sintaxe:
create_snapshot_log (schemaname text, mastername text, withwhat text)
schemaname: nome do esquema onde está a tabela master
mastername: nome da tabela master
withwhat: indica se o snapshot log deve salvar a chave primária, o OID do registro ou ambos quando registros da tabela master forem atualizados(INSERT, UPDATE, DELETE). Esta cláusula também especifica se colunas adicionais para futura filtragem de sincronização, as quais não fazem parte da chave primária e são referenciadas pelo snapshot, devem ser salvas. A sintaxe é a seguinte:
1) "PRIMARY KEY": indica que a chave primária de todos os registros atualizados na tabela master devem ser gravados no snapshot log;
2) "OID": indica que o OID de todos os registros atualizados na tabela master devem ser gravados no snapshot log;
3) "(<filter-columns>)" : uma lista separada por vírgulas e delimitada por parênteses especificando colunas de filtro adicionais a serem gravadas no snapshot log. Para snapshots atualizáveis pelo método FAST, definidos com subconsultas, todas as colunas referenciadas pela subconsulta devem ser gravadas no snapshot log;
4) Qualquer combinação das opções acima, em qualquer ordem.
6. drop_snapshot_log (implementação de "DROP MATERIALIZED VIEW LOG" ou "DROP SNAPSHOT LOG")
Essa função remove uma tabela de logs acoplada a uma tabela master.
Sintaxe:
drop_snapshot_log (schemaname text, mastername text)
schemaname: nome do esquema onde está a tabela master
mastername: nome da tabela master
7. refresh_snapshot (implementação de "DBMS_SNAPSHOTS.REFRESH")
Essa função atualiza os dados de uma
visão materializada (MATERIALIZED VIEW ou SNAPSHOT) recebendo
como parâmetro o nome do esquema e do Snapshot.
Sintaxe:
refresh_snapshot (schemaname text, snapshotname text)
schemaname: nome do esquema onde está o snapshot
snapshotname: nome do snapshot a ser atualizado