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

Deixe um comentário

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detectado !

Verificamos que está usando alguma extensão para bloquear os anúncios. O GPO (Grupo de Profissionais Oracle) obtém a sua renda através dos anúncios, para assim manter toda a estrutura dedicada a universalização do conhecimento.

Se você gosta de nosso trabalho, pedimos por gentileza que desabilite o ads blocker. Trabalhamos somente com o Google Adsense e tentamos ao máximo exibir apenas o necessário.

Agradecemos de antemão ! :)

Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock