Páginas filhas
  • PROCESSO DE MIGRAÇÃO NIMBVS PARA T-CLOUD (SQL SERVER)

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

O processo de migração do banco de dados tem como objetivo principal viabilizar a transferência dos dados atualmente armazenados no ambiente Nimbus NIMBVS (TCloudT-Cloud), no formato Database, para a plataforma T-Cloud, no formato Database Schema.

O foco específico deste processo é migrar alterar a base do TOTVS Agro Multicultivo, que atualmente está no nível de database com um schema padrão denominado dbo, para um schema personalizado, que será nomeado nesse artigo como MULTICULTIVO. Essa migração permitirá transformar /  Este processo permitirá alterar, de forma simples, a estrutura que está em um schema padrão (dbo) para um schema customizado (MULTICULTIVO). Além disso, a mudança possibilitará também permite que o database receba novos produtos a nível de schema, garantindo maior organização e flexibilidade.Este processo é direcionado especificamente ao TOTVS Agro Multicultivo. No entanto, outros produtos, como , por exemplo, PIMS Connector,   TOTVS Agro Connector Client entre outros, precisarão ser reinstalados, uma vez que serão necessárias reconfigurações nos processos de integração.

A seguir, descreveremos as etapas necessárias para alterar o schema dbo para um novo schema:

  • Realizar um backup (export) da base do TOTVS Agro Multicultivo do ambiente atual no Nimbus, que será importada para o ambiente do T-Cloud;
  • Ao realizar a importação dessa base de dados no ambiente do T-Cloud, ela já deve ser importada com um novo nome para a Database, refletindo as características de uma estrutura que passará a suportar múltiplos produtos a nível de schema.
  • Após a importação da base de dados, é necessário realizar os procedimentos abaixo, que incluem a criação de um novo schema e a concessão das permissões adequadas ao usuário para acessá-lo. O usuário e o schema serão denominados como MULTICULTIVO.

(TCC), TOTVS Agro Conecta Dados (Agro Data Client), TOTVS Agro LGPD e TOTVS Agro T-Provider (provedor de segurança para Smart View e Multicultivo).


Aviso
titlePontos de Atenção
  • As etapas descritas neste documento visam possibilitar a reestruturação do banco de dados do TOTVS Agro Multicultivo, que está no modelo Database, para o modelo Schema. Não é uma ferramenta de migração, mas sim um procedimento que deve ser realizado de forma manual;
  • Este processo é direcionado especificamente ao TOTVS Agro Multicultivo. No entanto, outros produtos, como PIMS Connector, TOTVS Connector Client entre outros não contempla nesse processo e precisarão ser reinstalados, uma vez que serão necessárias reconfigurações nos processos de integração;


A seguir, descreveremos as etapas necessárias para alterar o schema dbo para um novo schema. O processo é dividido em duas partes: a primeira será realizada no ambiente NIMBVS, e a segunda, no ambiente do T-Cloud.


1. Preparação no Ambiente NIMBVS

    • Realizar um backup (export) da base do TOTVS Agro Multicultivo do ambiente atual no NIMBVS, que será importada para o ambiente do T-Cloud;


2. Implementação no T-Cloud

    • Ao realizar a importação dessa base de dados no ambiente do T-Cloud, ela já deve ser importada com um novo nome para a Database, refletindo as características de uma estrutura que passará a suportar múltiplos produtos a nível de schema;
    • Após a importação da base de dados, é necessário realizar os procedimentos abaixo, que incluem a criação de um novo schema e a concessão das permissões adequadas ao usuário para acessá-lo. O usuário e o schema serão denominados como MULTICULTIVO, e o banco de dados será o TOTVS. No entanto, esses valores podem ser personalizados conforme a necessidade;


Bloco de código
languagesql
themeEclipse
titleCriação da estrutura
-- Criação do Usuário do MULTICULTIVO
CREATE LOGIN MULTICULTIVO WITH PASSWORD = 'TOTVS@123';

-- Utilizando o Banco de Dados TOTVS
USE [TOTVS];
GO

-- Criar Usuário no Banco de Dados TOTVS
CREATE USER MULTICULTIVO FOR LOGIN MULTICULTIVO;

-- Concedendo as Permissões ao Usuário MULTICULTIVO
GRANT SELECT, INSERT, UPDATE, DELETE
Bloco de código
languagesql
themeEclipse
titleCriação da estrutura
-- Criação do Usuário do MULTICULTIVO
CREATE LOGIN MULTICULTIVO WITH PASSWORD = 'TOTVS@123';

-- Utilizando o Banco de Dados FAZENDA_TOTVS
USE [TOTVS];
GO

-- Criar Usuário no Banco de Dados PCONNECTOR
CREATE USER MULTICULTIVO FOR LOGIN MULTICULTIVO;

-- Concedendo as Permissões ao Usuário MULTICULTIVO
GRANT SELECT, INSERT, UPDATE, DELETE TO MULTICULTIVO;
GRANT CREATE TABLE TO MULTICULTIVO;
GRANT EXECUTE TO MULTICULTIVO;
GRANT CONNECT TO MULTICULTIVO;
GRANT ALTER TO MULTICULTIVO;
GRANT VIEW DEFINITION TO MULTICULTIVO;
GRANT CREATE SYNONYM TO MULTICULTIVO;
GRANT CREATE PROCEDURE TO MULTICULTIVO;
GRANT CREATE VIEW TO MULTICULTIVO;
GRANT CREATE FUNCTION TO MULTICULTIVO;
GRANT CREATE SCHEMATABLE TO MULTICULTIVO;


--Atribuição do Schema Default do MULTICULTIVO
USE [TOTVS]
GO

ALTER USER [MULTICULTIVO] WITH DEFAULT_SCHEMA=[MULTICULTIVO]
GO


Iniciamos os procedimentos pré migração / alteração do Schema, pois alguns objetos precisam  ser ajustados 

GRANT EXECUTE TO MULTICULTIVO;
GRANT CONNECT TO MULTICULTIVO;
GRANT ALTER TO MULTICULTIVO;
GRANT VIEW DEFINITION TO MULTICULTIVO;
GRANT CREATE SYNONYM TO MULTICULTIVO;
GRANT CREATE PROCEDURE TO MULTICULTIVO;
GRANT CREATE VIEW TO MULTICULTIVO;
GRANT CREATE FUNCTION TO MULTICULTIVO;
GRANT CREATE SCHEMA TO MULTICULTIVO;

--Criando o Schema e definindo o Schema Default
USE [TOTVS]
GO

CREATE SCHEMA [MULTICULTIVO] AUTHORIZATION [MULTICULTIVO]
GO

ALTER USER [MULTICULTIVO] WITH DEFAULT_SCHEMA=[MULTICULTIVO]
GO


Precisaremos ajustar alguns objetos antes de executar a alteração do Schema, uma vez que alguns objetos precisam ser ajustados; 


Será necessário realizar ajustes na View EVENTO_EMBALAGEM. Para isso, precisaremos recriá-la, utilizando o comando abaixo. A alteração consiste na remoção da instrução WITH SCHEMABINDING, pois ela impede a modificação do schema padrão desse objeto. Essa restrição impacta diretamente na mudança de outras entidades que estão vinculadas a essa view.


Bloco de código
languagesql
themeEclipse
USE [TOTVS]
GO  

DROP VIEW [dbo].[EVENTO_EMBALAGEM];
GO

CREATE VIEW [dbo].[EVENTO_EMBALAGEM]
AS

SELECT EM.ID_UNIDADEADM, EVT.ID_APEMBALAGEM,EVT.DT_EVENTO, EM.ID_INSUMO, EVT.ID_EVENTO_EMB, 
INS.ID_GRPINSUMO, INS.ID_PRINCATIVO, EVT.ID_PERIODOSAFRA, PS.ID_SAFRA, 
EQ.ID_EQUIPE, EQ.CD_EQUIPE, 
APOS.ID_APORDSERVICO,
CC.ID_CCUSTO, OP.ID_OPERACAO, EVT.ID_APEMBALAGEM_EVT
FROM dbo.APEMBALAGEM_EVT  EVT 
JOIN dbo.APEMBALAGEM      EM      ON (EVT.ID_APEMBALAGEM = EM.ID_APEMBALAGEM)
JOIN dbo.EVENTO_EMB       EVTEMB  ON (EVT.ID_EVENTO_EMB  = EVTEMB.ID_EVENTO_EMB)
JOIN dbo.INSUMO           INS     ON (EM.ID_INSUMO       = INS.ID_INSUMO)
JOIN dbo.GRPINSUMO        GRP     ON (INS.ID_GRPINSUMO   = GRP.ID_GRPINSUMO)
LEFT JOIN dbo.PRINCATIVO  PATIV   ON (INS.ID_PRINCATIVO  = PATIV.ID_PRINCATIVO)

LEFT JOIN 
( SELECT DISTINCT D.ID_PERIODOSAFRA, D.ID_APEMBALAGEM  
FROM dbo.APEMBALAGEM_EVT D
  JOIN
    (SELECT  D1.ID_APEMBALAGEM, MAX(D1.DT_EVENTO) DT_EVENTO 
    FROM dbo.APEMBALAGEM_EVT D1 
    WHERE D1.ID_PERIODOSAFRA IS NOT NULL 
    GROUP BY D1.ID_APEMBALAGEM
    ) D1 ON (D.ID_APEMBALAGEM = D1.ID_APEMBALAGEM AND D.DT_EVENTO = D1.DT_EVENTO) 
) EVT_PERIODOSAFRA  ON (EVT_PERIODOSAFRA.ID_APEMBALAGEM = EVT.ID_APEMBALAGEM)

LEFT JOIN dbo.PERIODOSAFRA PS     ON (EVT_PERIODOSAFRA.ID_PERIODOSAFRA= PS.ID_PERIODOSAFRA)
LEFT JOIN dbo.SAFRA        S      ON (PS.ID_SAFRA        = S.ID_SAFRA)


LEFT JOIN 
( SELECT DISTINCT D.ID_APORDSERVICO
Bloco de código
languagesql
themeEclipse
---
SELECT o.name AS Object_Name, o.type_desc
FROM sys.objects o
JOIN sys.schemas s ON s.schema_id = o.schema_id
WHERE s.name = 'ssma_oracle' -- Replace with your schema name
ORDER BY o.type_desc, s.name, o.name

-- ### Passos antes de mudar de schema
-- Corrigir a view EVENTO_EMBALAGEM e retirar o "WITH NO SCHEMABINDING" do código
CREATE VIEW EVENTO_EMBALAGEM
WITH SCHEMABINDING AS

-- Retirar a referencia da sequence na tabela APABASTEC_TMP
SELECT c.name, c.definition
FROM sys.default_constraints c
JOIN sys.objects o ON o.object_id = c.parent_object_id
WHERE o.name = 'APABASTEC_TMP';

BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
ALTER TABLE dbo.APABASTEC_TMP
	DROP CONSTRAINT DF_APABASTEC_TMP_CD_APABASTEC_TMP;
GO
ALTER TABLE dbo.APABASTEC_TMP SET (LOCK_ESCALATION = TABLE)
GO
COMMIT

-- Depois que mudar o schema, voltar a sequencia para tabela
ALTER TABLE [MULTICULTIVO].[APABASTEC_TMP] ADD  CONSTRAINT [DF_APABASTEC_TMP_CD_APABASTEC_TMP]  DEFAULT (NEXT VALUE FOR [MULTICULTIVO].[SEQ_CD_APABASTEC_TMP]) FOR [CD_APABASTEC_TMP]
GO

--Colocar este código na coluna CD_APABASTEC_TMP na tabela APABASTEC_TMP
(NEXT VALUE FOR dbo.SEQ_CD_APABASTEC_TMP)

------------------------------------------------------
USE [PIMSMC_CLAIDES_PROD_POCDEV]
GO

DROP VIEW [dbo].[EVENTO_EMBALAGEM]
GO
/****** Object:  View [dbo].[EVENTO_EMBALAGEM]    Script Date: 10/03/2025 14:16:07 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE VIEW [dbo].[EVENTO_EMBALAGEM]
AS

SELECT EM.ID_UNIDADEADM, EVT.ID_APEMBALAGEM,EVT.DT_EVENTO, EM.ID_INSUMO, EVT.ID_EVENTO_EMB, 
INS.ID_GRPINSUMO, INS.ID_PRINCATIVO, EVT.ID_PERIODOSAFRA, PS.ID_SAFRA, 
EQ.ID_EQUIPE, EQ.CD_EQUIPE, 
APOS.ID_APORDSERVICO,
CC.ID_CCUSTO, OP.ID_OPERACAO, EVT.ID_APEMBALAGEM_EVT
FROM dbo.APEMBALAGEM_EVT  EVT 
JOIN dbo.APEMBALAGEM      EM      ON (EVT.ID_APEMBALAGEM = EM.ID_APEMBALAGEM)
JOIN dbo.EVENTO_EMB       EVTEMB  ON (EVT.ID_EVENTO_EMB  = EVTEMB.ID_EVENTO_EMB)
JOIN dbo.INSUMO           INS     ON (EM.ID_INSUMO       = INS.ID_INSUMO)
JOIN dbo.GRPINSUMO        GRP     ON (INS.ID_GRPINSUMO   = GRP.ID_GRPINSUMO)
LEFT JOIN dbo.PRINCATIVO  PATIV   ON (INS.ID_PRINCATIVO  = PATIV.ID_PRINCATIVO)

LEFT JOIN 
( SELECT DISTINCT D.ID_PERIODOSAFRA, D.ID_APEMBALAGEM  
FROM dbo.APEMBALAGEM_EVT D
  JOIN
    (SELECT  D1.ID_APEMBALAGEM, MAX(D1.DT_EVENTO) DT_EVENTO 
    FROM dbo.APEMBALAGEM_EVT D1 
    WHERE D1.ID_PERIODOSAFRAAPORDSERVICO IS NOT NULL 
    GROUP BY D1.ID_APEMBALAGEM
    ) D1 ON (D.ID_APEMBALAGEM = D1.ID_APEMBALAGEM AND D.DT_EVENTO = D1.DT_EVENTO) 
) EVT_PERIODOSAFRAAPOS  ON (EVT_PERIODOSAFRAAPOS.ID_APEMBALAGEM = EVT.ID_APEMBALAGEM)

LEFT JOIN dbo.PERIODOSAFRAAPORDSERVICO PS  APOS   ON (EVT_PERIODOSAFRAAPOS.ID_PERIODOSAFRAAPORDSERVICO= PSAPOS.ID_PERIODOSAFRAAPORDSERVICO)


LEFT JOIN dbo.SAFRA
(        S      ON (PS.ID_SAFRA        = S.ID_SAFRA)


LEFT JOIN 
( SELECT SELECT DISTINCT D.ID_APORDSERVICOCCUSTO, D.ID_APEMBALAGEM  FROM dbo.APEMBALAGEM_EVT D
  JOIN
    (SELECT  D1.ID_APEMBALAGEM, MAX(D1.DT_EVENTO) DT_EVENTO 
    FROM dbo.APEMBALAGEM_EVT D1 
    WHERE D1.ID_APORDSERVICOCCUSTO IS NOT NULL 
    GROUP BY D1.ID_APEMBALAGEM
    ) D1 ON (D.ID_APEMBALAGEM = D1.ID_APEMBALAGEM AND D.DT_EVENTO = D1.DT_EVENTO) 
) EVT_APOSCCUSTO  ON (EVT_APOSCCUSTO.ID_APEMBALAGEM = EVT.ID_APEMBALAGEM)

LEFT JOIN dbo.APORDSERVICOCCUSTO  APOS   ON (EVT_  CC     ON (ISNULL(EVT_CCUSTO.ID_CCUSTO, APOS.ID_APORDSERVICOCCUSTO)     = APOSCC.ID_APORDSERVICOCCUSTO)


LEFT JOIN 
( SELECT DISTINCT D.ID_CCUSTOOPERACAO, D.ID_APEMBALAGEM  FROM dbo.APEMBALAGEM_EVT D
  JOIN
    (SELECT  D1.ID_APEMBALAGEM, MAX(D1.DT_EVENTO) DT_EVENTO 
    FROM dbo.APEMBALAGEM_EVT D1 
    WHERE D1.ID_CCUSTOOPERACAO IS NOT NULL 
    GROUP BY D1.ID_APEMBALAGEM
    ) D1 ON (D.ID_APEMBALAGEM = D1.ID_APEMBALAGEM AND D.DT_EVENTO = D1.DT_EVENTO) 
) EVT_CCUSTOOPERACAO  ON (EVT_CCUSTOOPERACAO.ID_APEMBALAGEM = EVT.ID_APEMBALAGEM)

LEFT JOIN dbo.CCUSTOOPERACAO       CCOP     ON (ISNULL(EVT_CCUSTOOPERACAO.ID_CCUSTOOPERACAO, APOS.ID_CCUSTOOPERACAO)     = CCOP.ID_CCUSTOOPERACAO)


LEFT JOIN 
( SELECT DISTINCT D.ID_OPERACAOEQUIPE, D.ID_APEMBALAGEM  FROM dbo.APEMBALAGEM_EVT D
  JOIN
    (SELECT  D1.ID_APEMBALAGEM, MAX(D1.DT_EVENTO) DT_EVENTO 
    FROM dbo.APEMBALAGEM_EVT D1 
    WHERE D1.ID_OPERACAOEQUIPE IS NOT NULL 
    GROUP BY D1.ID_APEMBALAGEM
    ) D1 ON (D.ID_APEMBALAGEM = D1.ID_APEMBALAGEM AND D.DT_EVENTO = D1.DT_EVENTO) 
) EQ_EVT_OPERACAO  ON (EQ_EVT_OPERACAO.ID_APEMBALAGEM = EVT.ID_APEMBALAGEM)

LEFT JOIN dbo.OPERACAOEQUIPE       OPEQ     ON (EQ.ID_EQUIPE=  ISNULL(EQ_EVT_OPERACAO.ID_OPERACAOEQUIPE, APOS.ID_OPERACAOEQUIPE) = OP.ID_OPERACAO)


LEFT JOIN 
( SELECT DISTINCT D.ID_EQUIPE, D.ID_APEMBALAGEM  FROM dbo.APEMBALAGEM_EVT D
  JOIN
    (SELECT  D1.ID_APEMBALAGEM, MAX(D1.DT_EVENTO) DT_EVENTO 
    FROM dbo.APEMBALAGEM_EVT D1 
    WHERE D1.ID_EQUIPE IS NOT NULL 
    GROUP BY D1.ID_APEMBALAGEM
    ) D1 ON (D.ID_APEMBALAGEM = D1.ID_APEMBALAGEM AND D.DT_EVENTO = D1.DT_EVENTO) 
) EQ_EVT  ON (EQ_EVT.ID_APEMBALAGEM = EVT.ID_APEMBALAGEM)
LEFT JOIN dbo.EQUIPE       EQ     ON (EQ.ID_EQUIPE=  ISNULL(EQ_EVT.ID_EQUIPE,APOS.ID_EQUIPE) )


-----------------------------------------------------------------------------
SELECT
	schema_name(o.schema_id) dono_objeto,
    o.name AS view_name,
    m.definition AS view_definition,
	o.type_desc tipo_objeto
	
FROM 
    sys.objects o
INNER JOIN 
    sys.sql_modules m ON o.object_id = m.object_id
WHERE  upper(m.definition) LIKE '%DBO%'
order by schema_name(o.schema_id), o.type_desc, o.name
	
	
	
DECLARE @sql NVARCHAR(MAX)
DECLARE @obj_name NVARCHAR(255)
DECLARE @obj_type NVARCHAR(2)

-- Cursor para iterar sobre todos os objetos que possuem "dbo."
DECLARE cur CURSOR FOR
SELECT 
    o.name,
    o.type
FROM 
    sys.objects o
INNER JOIN 
    sys.sql_modules m;

GO


Na próxima etapa, precisaremos verificar se existe uma referência à sequência na tabela APABASTEC_TMP. Para isso, execute o comando abaixo. Caso sejam encontradas informações, a instrução SQL removerá a sequência automaticamente.

Ponto de atenção: Após a conclusão do processo de migração, será necessário restabelecer a referência à sequência. Portanto, nas etapas seguintes, retornaremos a referência que foi removida.


Bloco de código
languagesql
themeEclipse
DECLARE @ConstraintName NVARCHAR(255);

SELECT @ConstraintName = c.name
FROM sys.default_constraints c
JOIN sys.objects o ON o.object_id = mc.parent_object_id
WHERE  upper(m.definition) LIKE '%DBO%'  -- Procurando o prefixo dbo.
 AND o.type IN ('P', 'V', 'FN', 'TR')  -- Types: P = Stored Procedures, V = Views, FN = Functions, TR = Triggers
 AND schema_name(o.schema_id) = 'MULTICULTIVO'
order by schema_name(o.schema_id), o.type_desc, o.name;

OPEN cur
FETCH NEXT FROM cur INTO @obj_name, @obj_type

WHILE @@FETCH_STATUS = 0
BEGIN
    -- Gerar o script de alteração
    SET @sql = 'ALTER ' + 
               CASE 
                   WHEN @obj_type = 'P' THEN 'PROCEDURE '
                   WHEN @obj_type = 'V' THEN 'VIEW '
                   WHEN @obj_type = 'FN' THEN 'FUNCTION '
                   WHEN @obj_type = 'TR' THEN 'TRIGGER '
               END + @obj_name + ' AS '
               
    -- Substitui "dbo." por nada no código do objeto
    SET @sql = @sql + REPLACE((SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID(@obj_name)), 'dbo.', '')

    -- Comando executado
    print 'Comando: '+@sql+ ' Tipo objeto:> ' + @obj_type
	
    -- Executa o script de atualização
    EXEC sp_executesql @sql

    FETCH NEXT FROM cur INTO @obj_name, @obj_type
END

CLOSE cur
DEALLOCATE curo.name = 'APABASTEC_TMP';

IF @ConstraintName IS NOT NULL
BEGIN
    EXEC('ALTER TABLE dbo.APABASTEC_TMP DROP CONSTRAINT ' + @ConstraintName);
END

ALTER TABLE dbo.APABASTEC_TMP SET (LOCK_ESCALATION = TABLE)
GO



DECLARE @ConstraintNameLubr NVARCHAR(255);

SELECT @ConstraintNameLubr  = c.name
FROM sys.default_constraints c
JOIN sys.objects o ON o.object_id = c.parent_object_id
WHERE o.name = 'APLUBRIF_TMP';

IF @ConstraintNameLubr IS NOT NULL
BEGIN
    EXEC('ALTER TABLE dbo.APLUBRIF_TMP DROP CONSTRAINT ' + @ConstraintNameLubr  );
END

ALTER TABLE dbo.APLUBRIF_TMP SET (LOCK_ESCALATION = TABLE)
GO


Com os devidos ajustes realizados nos objetos, a estrutura está pronta para ter seu schema alterado. O script a seguir será responsável por migrar os objetos e os dados presentes no schema DBO para o novo schema, que denominamos MULTICULTIVO.


Bloco de código
languagesql
themeEclipse
DECLARE @name NVARCHAR(256)
DECLARE @typedesc NVARCHAR(256)
DECLARE @sql NVARCHAR(MAX)

-- Cursor para selecionar todos os objetos do banco de dados
DECLARE object_cursor CURSOR FOR
SELECT d.name, d.type_desc
FROM sys.objects d
WHERE d.type IN ('U', 'V', 'P', 'FN', 'IF', 'TF','SO')
order by d.type_desc, d.name

/*
 U: Tabelas 
 V: Views
 P: Procedures 
 FN: Funções escalares
 IF: Funções de tabela inline
 TF: Funções de tabela
 SO: Sequencias
*/

OPEN object_cursor
FETCH NEXT FROM object_cursor INTO @name, @typedesc

WHILE @@FETCH_STATUS = 0
BEGIN
    -- Monta o comando ALTER SCHEMA
    SET @sql = 'ALTER SCHEMA MULTICULTIVO TRANSFER dbo.' + QUOTENAME(@name)
    
	-- Mostra o comando
	print 'Instrucao: '+@sql+' Tipo objeto: '+ @typedesc
    -- Executa o comando
    EXEC sp_executesql @sql
    
    FETCH NEXT FROM object_cursor INTO @name, @typedesc
END

CLOSE object_cursor
DEALLOCATE object_cursor


Nesta etapa, será necessário percorrer manualmente as Views e Funções para remover as referências ao schema DBO e ao acesso à base de dados SYSDB. A instrução abaixo lista os objetos que contêm uma dessas referências. Nesses casos, as referências precisarão ser removidas e os objetos recompilados manualmente.


Bloco de código
languagesql
themeEclipse
SELECT 
    OBJECT_NAME(m.object_id) AS object_name,
    o.type_desc AS object_type,
    SCHEMA_NAME(o.schema_id) AS schema_name,
    m.definition AS object_definition
FROM 
    sys.sql_modules m
INNER JOIN 
    sys.objects o ON m.object_id = o.object_id
WHERE 
    (UPPER(m.definition) LIKE '%DBO.%' OR UPPER(m.definition) LIKE '%SYSDB.%')   
	AND o.type IN (
Bloco de código
languagesql
themeEclipse
DECLARE @name NVARCHAR(256)
DECLARE @typedesc NVARCHAR(256)
DECLARE @sql NVARCHAR(MAX)

-- Cursor para selecionar todos os objetos do banco de dados
DECLARE object_cursor CURSOR FOR
SELECT d.name, d.type_desc
FROM sys.objects d
WHERE d.type IN ('U', 'V', 'P', 'FN', 'IF', 'TF', 'SOV')  
order by d.type_desc, d.name

/*
 U: Tabelas 
 V: Views
 P: Procedures 
 FN: Funções escalares
 IF: Funções de tabela inline
 TF: Funções de tabela
 SO: Sequencias
*/

OPEN object_cursor
FETCH NEXT FROM object_cursor INTO @name, @typedesc

WHILE @@FETCH_STATUS = 0
BEGIN
    -- Monta o comando ALTER SCHEMA
    SET @sql = 'ALTER SCHEMA MULTICULTIVO TRANSFER dbo.' + QUOTENAME(@name)
    
	-- Mostra o comando
	print 'Instrucao: '+@sql+' Tipo objeto: '+ @typedesc
    -- Executa o comando
    EXEC sp_executesql @sql
    
    FETCH NEXT FROM object_cursor INTO @name, @typedesc
END

CLOSE object_cursor
DEALLOCATE object_cursor	AND SCHEMA_NAME(o.schema_id) = 'MULTICULTIVO'
	AND  OBJECT_NAME(m.object_id) <> 'fn_diagramobjects'
ORDER BY 
    o.type_desc, 
    OBJECT_NAME(m.object_id);


A seguir, iremos reativar as sequências que foram desabilitadas para as tabelas APABASTEC_TMP e APLUBRIF_TMP. Para isso, execute o comando abaixo para adicionar as sequências novamente.


Bloco de código
languagesql
themeEclipse
ALTER TABLE [MULTICULTIVO].[APABASTEC_TMP] ADD  CONSTRAINT [DF_APABASTEC_TMP_CD_APABASTEC_TMP]  DEFAULT (NEXT VALUE FOR [MULTICULTIVO].[SEQ_CD_APABASTEC_TMP]) FOR [CD_APABASTEC_TMP]
GO


ALTER TABLE [MULTICULTIVO].[APLUBRIF_TMP] ADD  CONSTRAINT [DF_APLUBRIF_TMP_CD_APLUBRIF_TMP]  DEFAULT (NEXT VALUE FOR [MULTICULTIVO].[SEQ_CD_APLUBRIF_TMP]) FOR [CD_APLUBRIF_TMP]
GO


Precisaremos nessa etapa criar a estrutura do schema SSMA_ORACLE (também conhecido como SYSDB), é necessário substituir a propriedade {{DB_NAME}} pelo nome do banco de dados que será utilizado no ambiente. O script está disponível no arquivo totvs-agro-template_ssma_oracle.sql.


Informações
iconfalse

Devido ao extenso número de linhas, o conteúdo não será exibido diretamente nesta página, mas estará disponível como um arquivo anexo. Após realizar o download, substitua a propriedade {{DB_NAME}} pelo nome do banco de dados criado na seção anterior.


View file
nametotvs-agro-template_ssma_oracle.sql
height250



A última etapa do processo de migração consiste em conceder permissão ao usuário MULTICULTIVO para acessar o schema SSMA_ORACLE. Para isso, execute o comando abaixo:


Eclipse
Bloco de código
languagesql
themeEclipse
Bloco de código
languagesql
themeEclipse
Bloco de código
languagesql
theme
USE [TOTVS]
GO
ALTER AUTHORIZATION ON SCHEMA::[ssma_oracle] TO [MULTICULTIVO]