Migração de cliente Local para GoGlobal - Nuvem

  1. Realizar backup das seguintes bases antes de iniciar

    • Base de dados do cliente, pode ser a de produção ou de homologação dependendo do que a Gestora solicitou.

    • Base Auth_Legacy_Integration

    • Arquivos do Storage

    A base de dados Auth_Legacy_Integration e os Arquivos do Storage deverão ser disponibilizados a Korp.

  2. Configurar licenciamento do cliente

    • Configurar aba Configurações de Infraestrutura

    • Configurar aba Unidade Organizacional

      • Adicionar ambiente de Produção e Homologação

        • Apontar para o database de Produção e Homologação do Cliente

  3. Ligar a VM com o nome SQLManager.

    • Acessa o painel da Oracle Cloud.

    • Localizar a instância SQLManager e garantir que está ligada.

    • Verificar a coluna de Public IP pois essa VM está com IP externo não fixo.

    • ATENÇÃO Essa VM deve ser desligada logo após o procedimento ser finalizado. Não utilizar o Windows para desligar, fazer pelo console da Oracle.

  4. Pegar backup da base do cliente

    • Exportar um backup (.bak) do database do cliente

    • Copiar o backup para o servidor SQLManager.

    • Se o backup for de produção: Copiar o backup para a pasta compartilhada \\172.30.0.9\backup. Essa pasta é a /opt/sql-backup/ do SQLServer-PRD.

    • Se o backup for de homologação: Copiar o backup para a pasta compartilhada \\172.30.0.8\backupdb. Essa pasta é a /opt/sql-backup/ do SQL Server.

    • Após criar os databases nos passos abaixo, apagar o .bak

  5. Restaurar a base do cliente

    • Se o backup for de produção: Criar base PRD no servidor SQLServer-PRD, com as seguintes configurações

      • Recovery model - full

      • Compatiblity level - máxima

    • Se o backup for de homologação: Criar base HMLG no servidor SQLServer, com as seguintes configurações

      • Recovery model - simple

      • Compatiblity level - máxima

    • Adicionar o database na linha abaixo, e depois executar o script. O script deve ser rodado no servidor de produção e também de homologação, trocando o nome da base.

      USE [master]
      
      IF OBJECT_ID('tempdb..#dbs') IS NOT NULL
        TRUNCATE TABLE #dbs
      else
        DECLARE @dbs TABLE (name VARCHAR(MAX))
      
      -- colocar as bases aqui, exemplo:
      -- INSERT INTO @dbs VALUES ('CLIENTE_PRD')
      INSERT INTO @dbs VALUES ('')
      
      DECLARE @nomedb VARCHAR(MAX)
      DECLARE @comando VARCHAR(MAX)
      DECLARE @usuario VARCHAR(MAX)
      DECLARE @owner VARCHAR(MAX)
      
      IF OBJECT_ID('tempdb..#usuarios') IS NOT NULL
        TRUNCATE TABLE #usuarios
      else
        DECLARE @usuarios TABLE (usuario VARCHAR(MAX), owner VARCHAR(MAX))
      
      INSERT INTO @usuarios VALUES ('Octopus', 'T'), ('KorpServices', 'T'), ('KorpReporting', 'F'), ('KorpScheduler', 'T')
      
      DECLARE cursor_databases CURSOR FOR
      SELECT [name] FROM @dbs
      OPEN cursor_databases
      FETCH NEXT FROM cursor_databases INTO @nomedb
      
      WHILE @@FETCH_STATUS = 0
      BEGIN
      
        DECLARE cursor_usuarios CURSOR FOR
        SELECT [usuario], [owner] FROM @usuarios
        OPEN cursor_usuarios
        FETCH NEXT FROM cursor_usuarios INTO @usuario, @owner
      
        WHILE @@FETCH_STATUS = 0
        BEGIN
      
          set @comando = '
            use ['+@nomedb+']
      
            DROP USER IF EXISTS ['+@usuario+']
            CREATE USER ['+@usuario+'] FOR LOGIN ['+@usuario+']
            ALTER USER ['+@usuario+'] WITH DEFAULT_SCHEMA=[dbo]
            IF '''+@owner+''' = ''T''
              ALTER ROLE [db_owner] ADD MEMBER ['+@usuario+']
            ELSE
              ALTER ROLE [db_datareader] ADD MEMBER ['+@usuario+']
          '
      
          exec (@comando)
          --print @comando
      
          FETCH NEXT FROM cursor_usuarios INTO @usuario, @owner
        END
      
        CLOSE cursor_usuarios
        DEALLOCATE cursor_usuarios
      
        FETCH NEXT FROM cursor_databases INTO @nomedb
      END
      
      CLOSE cursor_databases
      DEALLOCATE cursor_databases
      
  6. Na base do cliente, configurar os seguintes parâmetros

    SET NOCOUNT ON
    USE [CLIENTE_PRD]
    -- Configuração TenantId
    declare @tenantid varchar(max)
    declare @cnpj varchar(max)
    
    set @tenantid = ''
    -- PRECISA estar com pontuação
    set @cnpj = '00.000.000/0000-00'
    
    if (ISNULL(@tenantid, '') = '') or (ISNULL(@cnpj, '') = '') or (ISNULL(@cnpj, '') = '00.000.000/0000-00')
    begin
      RAISERROR('ATENÇÃO!!! Configurar as variáveis TenantId e Cnpj do Cliente', 16, 1)
    end
    else
    begin
        UPDATE EMPRESA SET IsDeleted = 0, TenantId = @tenantid, CreationTime = GETUTCDATE()
        UPDATE PARAMETROS set VALOR = 'F' where CHAVE = 'UseLegacyAuthMode'
    
        if ((select count(*) from EMPRESA) = 1)
        begin
            UPDATE EMPRESA SET CGC = @cnpj
        end
        else
        begin
          print 'ATENÇÃO!! Existe mais que uma empresa cadastrada e portanto não atualizaremos o CNPJ'
        end
    
        IF not exists(select valor from parametros where secao = 'REST' and chave = 'TenantId')
        begin
            insert into parametros (secao, chave, valor) values ('REST', 'TenantId', @tenantid)
        end
        else
        begin
            update parametros set valor = @tenantid where secao = 'REST' and chave = 'TenantId'
        end
    end
    
    -- Configuração autenticação
    IF not exists(select valor from parametros where secao = 'OCTOPUS' and chave = 'UseLegacyAuthMode')
    begin
        insert into parametros (secao, chave, valor) values ('OCTOPUS', 'UseLegacyAuthMode', 'F')
    end
    else
    begin
        update parametros set valor = 'F' where secao = 'OCTOPUS' and chave = 'UseLegacyAuthMode'
    end
    
    -- Configuração envio de e-mail
    declare @url_email varchar(max)
    declare @valor_parametro_atual varchar(max)
    
    set @url_email = 'https://api-erp.korp.com.br/'
    select @valor_parametro_atual = valor from parametros where secao = 'REST' and chave = 'Email'
    
    IF ISNULL(@valor_parametro_atual, '') = ''
    begin
        insert into parametros (secao, chave, valor) values ('REST', 'Email', @url_email)
    end
    else if (@valor_parametro_atual != @url_email)
    begin
        RAISERROR('O valor do parâmetro de email está diferente do esperado. Valor atual %s, valor esperado %s', 16, 1, @valor_parametro_atual, @url_email)
        --delete from parametros where secao = 'REST' and chave = 'Email'
    end
    
    -- Configuração TEF
    declare @caminho_tef_parametro_atual varchar(max)
    declare @caminho_tef varchar(max)
    set @caminho_tef = CONCAT('\\172.30.1.3\tef\', DB_NAME(), '\')
    
    select @caminho_tef_parametro_atual = valor from parametros where secao = 'Faturamento' and chave = 'DiretorioTrabalhoTef'
    
    IF ISNULL(@caminho_tef_parametro_atual, '') = ''
    begin
        insert into parametros (secao, chave, valor) values ('Faturamento', 'DiretorioTrabalhoTef', @caminho_tef)
    end
    else
    begin
        update parametros set valor = @caminho_tef where secao = 'Faturamento' and chave = 'DiretorioTrabalhoTef'
    end
    
  7. Configurar LegacyMode

    use [Viasoft_TenantManagement]
    
    declare @tenantid varchar(max)
    set @tenantid = ''
    
    if (ISNULL(@tenantid, '') = '')
    begin
      RAISERROR('ATENÇÃO!!! Configurar a variável TenantId do Cliente', 16, 1)
    end
    else
    begin
        update Tenant set LegacyModeEnabled = 1 where Id = @tenantid
    end
    
  8. Adicionar base ao config.json dos Serviços Delphi

    • Acessar o servidor Services,

    • Adicionar os novos databases aos config.json da pasta C:\ProgramData\Korp\{VERSÃO}\Services\, adicionando-os na versão instalada em diante.

    • Se existir serviços em versões maiores que a base sendo criada, será necessário adicionar as bases em ambos os config.json.

    • Reiniciar todos os serviços Delphi das versões alteradas. !! SÓ PODE SER FEITO APÓS AS 22 HORAS !!

  9. A partir do backup da base Auth_Legacy_Integration do cliente, gerar script de inserção das tabelas application_users e user_tenants. Esse script pode ser gerado pela opção Tasks -> Generate Scripts… do SSMS. Executar na base Auth_Legacy_Integration do servidor 172.30.0.8.

  10. Configurar TenantId no script abaixo, e executar no servidor 172.30.0.8

    USE [Auth_Legacy_Integration]
    GO
    
    DECLARE @TENANTID VARCHAR(MAX)
    
    SET @TENANTID = ''
    
    if (ISNULL(@tenantid, '') = '')
    begin
      RAISERROR('ATENÇÃO!!! Configurar a variável TenantId do Cliente', 16, 1)
    end
    else
    begin
      if not exists (select 1 from [dbo].[seed_histories] where [tenant_id] = @tenantid)
      begin
          INSERT INTO [dbo].[seed_histories]
                ([start_time]
                ,[end_time]
                ,[is_running]
                ,[forced_stopped]
                ,[error_during_seed]
                ,[problems]
                ,[serialized_errors]
                ,[tenant_id]
                ,[database_name])
          VALUES
                (GETUTCDATE()
                ,GETUTCDATE()
                ,0
                ,0
                ,0
                ,''
                ,''
                ,@tenantid
                ,NULL)
      end
    end
    GO
    
  11. Adicionar Korp IAC

    • No repositório https://bitbucket.org/viasoftkorp/korp-iac/, navegar até a pasta /Oracle/Services/configs/. Depois de realizar as alterações abaixo, precisa subir um pull request

      • No arquivo LicenseServerSettings.json adicionar o seguinte JSON a propriedade TenantLegacyDatabaseMapping

        {
          "TenantId": "",
          "LicensedDatabases": [
                ""
          ]
        }
        
    • No servidor 168.138.251.22 - (services no portainer), pegar o arquivo LicenseServerSettings.json e fazer o replace em /home/korp/configs/

    • Reiniciar o container viasoft.licenseserver-desktop em 168.138.251.22 - (services no portainer)

    • Ver nos logs se não há nenhum erro no console do serviço (dar um f5 na tela de containers do portainer pra ver se o container não parou logo depois)

  12. Configurar connection strings

  • Acessar AWX e executar template ‘Nova Empresa Nuvem’

  • Validar que job foi executado com sucesso