Pular para o conteúdo

Alter Current Schema

Alter Current Schema

Olá pessoal,

Hoje vou falar um pouco da minha ultima implantação de sistema, onde foi utilizado o alter current schema para minimizar o tempo de indisponibilidade na Produção.

Segue um exemplo simples que criei. Acredito que possa ser útil.

--

-- Simulação de sistema em produção

CREATE USER atual IDENTIFIED BY atual;

GRANT RESOURCE TO atual;

User created

Grant succeeded

--

CREATE TABLE atual.tabela(ID NUMBER(2), valor VARCHAR2(20));

INSERT INTO atual.tabela VALUES(1, 'Sistema Atual!');

CREATE PUBLIC SYNONYM tabela FOR atual.tabela;

Table created

1 row inserted

Synonym created

--

-- Simulação de novo sistema

CREATE USER novo IDENTIFIED BY novo;

GRANT RESOURCE TO novo;

User created

Grant succeeded

--

CREATE TABLE novo.tabela(ID NUMBER(2), valor VARCHAR2(20), obs VARCHAR2(50));

INSERT INTO novo.tabela VALUES(1, 'Sistema Novo!', 'Novas funcionalidades...');

Table created

1 row inserted

--

-- Usuário do sistema

CREATE USER usuario IDENTIFIED BY usuario;

GRANT CREATE SESSION TO usuario;

GRANT SELECT ON atual.tabela TO usuario;

GRANT SELECT ON novo.tabela  TO usuario;

User created

Grant succeeded

Grant succeeded

Grant succeeded

--

-- Usuário utilizando o sistema atual

conn usuario/usuario

SELECT sys_context('USERENV', 'CURRENT_SCHEMA') sis FROM dual;

Connected as usuario

SIS

--------------------------------------------------------------------------------

USUARIO

--

-- Acesso via sinônimo público

SELECT * FROM tabela;

ID VALOR

--- --------------------

1 Sistema Atual!

--

-- Entrada do novo sistema em produção

ALTER SESSION SET current_schema=NOVO;

SELECT sys_context('USERENV', 'CURRENT_SCHEMA') sis FROM dual;

SELECT * FROM tabela;

Session altered

SIS

--------------------------------------------------------------------------------

NOVO

ID VALOR                OBS

--- -------------------- --------------------------------------------------

1 Sistema Novo!        Novas funcionalidades...

--

Com isso, o plano de retorno dessa implantação (que não gerou indisponibilidade do sistema antigo para entrar em Produção) é muito simples:

ALTER SESSION SET current_schema=ATUAL;

SELECT sys_context('USERENV', 'CURRENT_SCHEMA') sis FROM dual;

SELECT * FROM tabela;

Session altered

SIS

--------------------------------------------------------------------------------

ATUAL

ID VALOR

--- --------------------

1 Sistema Atual!

--

É possível automatizar esse “chaveamento” com trigger de logon, por exemplo:

CREATE OR REPLACE TRIGGER usuario.tg_al_current_schema

AFTER LOGON ON usuario.SCHEMA

BEGIN

EXECUTE IMMEDIATE 'ALTER SESSION SET current_schema=NOVO';

END tg_al_current_schema;

/

Para atender esse plano de implantação, é preciso espaço físico para suportar os dois ambientes, pelo menos até ter certeza que todo processo foi concluído com sucesso. Fora o controle para que apenas a nova aplicação seja utilizada, evitando movimentação de dados em duas estruturas diferentes. (no exemplo, owner ATUAL x NOVO).

Abraços

dcarvalho

dcarvalho

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Marcações:
plugins premium WordPress