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: DATABASE_NAME, CONNSTR e 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/snapsho
t.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:
# 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, username text, password text, datasource text, attributes text)
dblinkname = nome do DBLINK a ser criado
username = NOME do usuário no banco de dados remoto
password = SENHA do usuário no banco de dados remoto
datasource = string de CONEXÃO Perl:DBI para o 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)
schemaname: nome do esquema onde está a tabela master
mastername: nome da tabela master
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