[SQL Server] Migrar Logins

Posted: 17/06/2020 in Dicas
USE master
GO
IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
  DROP PROCEDURE sp_hexadecimal
GO
CREATE PROCEDURE sp_hexadecimal
    @binvalue varbinary(256),
    @hexvalue varchar (514) OUTPUT
AS
DECLARE @charvalue varchar (514)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH (@binvalue)
SELECT @hexstring = '0123456789ABCDEF'
WHILE (@i <= @length)
BEGIN
  DECLARE @tempint int
  DECLARE @firstint int
  DECLARE @secondint int
  SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
  SELECT @firstint = FLOOR(@tempint/16)
  SELECT @secondint = @tempint - (@firstint*16)
  SELECT @charvalue = @charvalue +
    SUBSTRING(@hexstring, @firstint+1, 1) +
    SUBSTRING(@hexstring, @secondint+1, 1)
  SELECT @i = @i + 1
END

SELECT @hexvalue = @charvalue
GO

IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL
  DROP PROCEDURE sp_help_revlogin
GO
CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
DECLARE @name sysname
DECLARE @type varchar (1)
DECLARE @hasaccess int
DECLARE @denylogin int
DECLARE @is_disabled int
DECLARE @PWD_varbinary  varbinary (256)
DECLARE @PWD_string  varchar (514)
DECLARE @SID_varbinary varbinary (85)
DECLARE @SID_string varchar (514)
DECLARE @tmpstr  varchar (1024)
DECLARE @is_policy_checked varchar (3)
DECLARE @is_expiration_checked varchar (3)

DECLARE @defaultdb sysname

IF (@login_name IS NULL)
  DECLARE login_curs CURSOR FOR

      SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM 
sys.server_principals p LEFT JOIN sys.syslogins l
      ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'
ELSE
  DECLARE login_curs CURSOR FOR


      SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM 
sys.server_principals p LEFT JOIN sys.syslogins l
      ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name
OPEN login_curs

FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
IF (@@fetch_status = -1)
BEGIN
  PRINT 'No login(s) found.'
  CLOSE login_curs
  DEALLOCATE login_curs
  RETURN -1
END
SET @tmpstr = '/* sp_help_revlogin script '
PRINT @tmpstr
SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'
PRINT @tmpstr
PRINT ''
WHILE (@@fetch_status <> -1)
BEGIN
  IF (@@fetch_status <> -2)
  BEGIN
    PRINT ''
    SET @tmpstr = '-- Login: ' + @name
    PRINT @tmpstr
    IF (@type IN ( 'G', 'U'))
    BEGIN -- NT authenticated account/group

      SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']'
    END
    ELSE BEGIN -- SQL Server authentication
        -- obtain password and sid
            SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )
        EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT
        EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT

        -- obtain password policy state
        SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
        SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name

            SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']'

        IF ( @is_policy_checked IS NOT NULL )
        BEGIN
          SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked
        END
        IF ( @is_expiration_checked IS NOT NULL )
        BEGIN
          SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked
        END
    END
    IF (@denylogin = 1)
    BEGIN -- login is denied access
      SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )
    END
    ELSE IF (@hasaccess = 0)
    BEGIN -- login exists but does not have access
      SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name )
    END
    IF (@is_disabled = 1)
    BEGIN -- login is disabled
      SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE'
    END
    PRINT @tmpstr
  END

  FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
   END
CLOSE login_curs
DEALLOCATE login_curs
RETURN 0
GO



--- Execute a proc
 para gerar os logins

EXEC sp_help_revlogin

Olá Pessoal,

Gostaria de compartilhar esse procedimento feito pelo mestre Portilho da NERV Informática, achei muito interessante.

Este é o procedimento para remover o uso de todas as Features de Enterprise Edition de um banco de dados, para deixá-lo compatível com a Standard Edition, Standard Edition One, ou Standard Edition Two.

– Remover índices BITMAP.
– Remover DEGREE de objetos.
– Retirar compressão de objetos.
– Remover compressão de configurações do RMAN.
– Remover compressão de procedimentos de backup.
– Remover SQL Profiles.
– Remover SQL Baselines.
– Remover Partições.
– Executar DUMP apenas do(s) OWNER(s) da aplicação, e não FULL.
– Instalar o Oracle da Edition correta (SE1 / SE / SE2).
– Nas SE e SE1 (= 12.1.0.2), o instalador é separado.
– Remover opções após a instalação (via chopt).
– Criar um novo banco de dados, via Template “Custom Database” do DBCA. Ainda no DBCA, alterar estes parâmetros:
AUDIT_TRAIL = NONE
CONTROL_MANAGEMENT_PACK_ACCESS = NONE
DEFERRED_SEGMENT_CREATION = FALSE
JOB_QUEUE_PROCESSES = 0
OPTIMIZER_USE_SQL_PLAN_BASELINES = FALSE
OPTIMIZER_ADAPTIVE_FEATURES = FALSE — Apenas 12c.
PARALLEL_MAX_SERVERS = 0
RESOURCE_LIMIT = FALSE

– Imediatamente após a criação do banco, executar:
EXEC DBMS_AUTO_TASK_ADMIN.DISABLE (CLIENT_NAME => ‘auto optimizer stats collection’, OPERATION => NULL, WINDOW_NAME => NULL);
EXEC DBMS_AUTO_TASK_ADMIN.DISABLE (CLIENT_NAME => ‘sql tuning advisor’, OPERATION => NULL, WINDOW_NAME => NULL);
EXEC DBMS_AUTO_TASK_ADMIN.DISABLE (CLIENT_NAME => ‘auto space advisor’, OPERATION => NULL, WINDOW_NAME => NULL);
— Em 12c, executar as alterações acima também em PDBs.
SELECT NAME, DETECTED_USAGES, CURRENTLY_USED, FIRST_USAGE_DATE, LAST_USAGE_DATE FROM DBA_FEATURE_USAGE_STATISTICS ORDER BY LAST_USAGE_DATE DESC;
— Executar novamente a verificação acima 8 dias depois.

– Adequar o parâmetro JOB_QUEUE_PROCESSES de acordo com o ambiente.
– Importar o DUMP.

Fonte: http://nervinformatica.com.br/blog/index.php/2016/10/07/migracao-de-ee-para-se-se1-se2/

Olá, pessoal!

Abaixo o procedimento para atualizar bundle patch no Oracle 12c – Single Tenant (non-CDB/PDB).

Procedimento retirado do “Read Me” no suporte da oracle, segue o link para fazer o download “metalink.oracle.com”

Download do Patch 21821214: WINDOWS DB BUNDLE PATCH 12.1.0.2.10

download_patch_12c

search_patch_12c

Pré requisitos:

OPatch Utility

How to install the utility:
---------------------------

To install this patch, Please extract the file "zipped file" using unzip or winzip,
depending upon the platform. You should extract the zip file directly under the
ORACLE_HOME. Please follow the following steps for extracting the zip file of OPatch.

(1)  Please take a backup of ORACLE_HOME/OPatch into a dedicated backup
location.
(2) Please make sure no directory ORACLE_HOME/OPatch exist.
(3) Please unzip the OPatch downloaded zip into ORACLE_HOME directory.

To check the version of the opatch utility installed in the above step,
go to the OPatch directory and run "opatch version".

– Próximo passo aplicar o patch 12.1.0.2.10 (Recomendo fazer o backup antes de executar o procedimento)

1. Shut down all instances and listeners associated with the Oracle home that you are updating

sqlplus / as sysdba
shutdown immediate

2. Explicitly stop the Distributed Transaction Coordinator service (which is not an Oracle service) if it is running.

net stop msdtc

3. Set the ORACLE_HOME environment variable pointing to your Database Home, go to the directory where the patch is located and then run the OPatch utility by entering the following commands:

set ORACLE_HOME=c:\oracle\orcl\1210
set PATH=%ORACLE_HOME%\OPatch;%PATH%
set PATH=%ORACLE_HOME%\perl\bin;%PATH%

cd C:\install_ora

unzip p21821214_121020_MSWIN-x86-64.zip

cd C:\install_ora\21821214

%ORACLE_HOME%\OPatch\opatch apply

4. Steps to Run the datapatch Utility for Single

sqlplus / as sysdba
startup

datapatch_patch_12c

5. Check Patch

select patch_id, patch_uid, version, status, bundle_series, description from dba_registry_sqlpatch;

SELECT comp_id, status from dba_registry;

%ORACLE_HOME%\OPatch\opatch lsinventory

É isso ai pessoal, espero ter ajudado!

Fonte: https://support.oracle.com

Ativar autoextend on – Oracle

Posted: 07/04/2016 in Dicas
O DBA hoje em dia não precisa mais se preocupar com o overhead causado pela 
extensão automática dos datafiles. Soluções como gerenciamento local das 
tablespaces e infraestrutura de hardware mais competentes absorvem quase que 
totalmente o impacto. Sendo assim, habilitar esse recurso ajuda a deixar a 
administração do banco mais fácil.
Ex.:
alter database datafile '+DATA/dr/datafile/users.dbf' autoextend on next 256M;

Nesse exemplo estou habilitado a extensão automática para o datafile 
(autoextend on) e estou informando de quantos em quantos megas eu quero que 
isso aconteça (next 256M).

Para habilitar para todos os datafiles:

spool runts.sql

select
'alter database datafile '||
file_name||
' '||
' autoextend on;'
from
dba_data_files;

@runts
Fonte: http://www.dba-oracle.com/t_alter_autoextend_on.htm
##### --- Deixe seu comentário ou sugestão e até a próxima. --- #####

Backup e Restore – SQL Server

Posted: 05/04/2016 in Dicas
Olá, iremos fazer um simples backup e restore do banco de dados TESTE.

# ---------------------------------
# - Fazendo backup full banco TESTE
# ---------------------------------
BACKUP DATABASE TESTE TO DISK='M:\SQLSERVER\Backup\TESTE.bak'
GO

# ---------------------------------
# - Deletando banco TESTE
# ---------------------------------
DROP DATABASE TESTE
GO

# ---------------------------------
# - Restore backup full banco TESTE
# ---------------------------------
RESTORE DATABASE TESTE FROM DISK='M:\SQLSERVER\Backup\TESTE.bak'
GO

##### --- Deixe seu comentário ou sugestão e até a próxima. --- #####
Olá, iremos ativar o modo archive no oracle, muito fácil e importante.

# ---------------------------
# Desligando o banco de dados.
# ---------------------------
shutdown immediate;

# -------------------------------------
# Iniciando o banco de dados em modo mount.
# -------------------------------------
startup mount;

# ---------------------------
# Ativando o archive mode.
# ---------------------------
alter database archivelog;

# ---------------------------
# Abrindo o banco de dados.
# ---------------------------
alter database open;

# ---------------------------
# Verificando o archivemode.
# ---------------------------
archive log list;

Modo log de banco de dados Modo de Arquivamento
Arquivamento automático Ativado
##### --- Deixe seu comentário ou sugestão e até a próxima. --- #####



 

Olá, iremos aprender como mover os datafiles de um Standby, para outro diretório no mesmo servidor linux.

# -------------------------------------------
# Verifique o $ORACLE_HOME do banco standby.
# -------------------------------------------
cat /etc/oratab

# ----------------------------------
# Setar as variáveis do banco standby.
# ----------------------------------
export ORACLE_HOME=/u01/app/oracle/db_home1
export ORACLE_SID=orcl

# --------------------
# Conectar no sqlplus
# --------------------
sqlplus /nolog
conn / as sysdba

# --------------------------
# Listar todos os datafiles 
# --------------------------
col FILE# format 999;
col NAME format A64;
select file#, name from v$datafile;

# --------------------------
# Baixar o banco standby.
# --------------------------
shutdown immediate;

# ------------------------------------------------------------------
# Copiar os datafiles necessários da origem para o diretório destino.
# ------------------------------------------------------------------
cp -rv /oracle/oradata/orcl/system.dbf /oradata/orcl/

# --------------------
# Conectar no sqlplus
# --------------------
sqlplus /nolog
conn / as sysdba

# --------------------------
# Montar o banco standby.
# --------------------------
startup mount;

# -------------------------------------------------------
# Alterar gerenciamento de arquivos do standby para MANUAL.
# -------------------------------------------------------
show parameter standby;
alter system set standby_file_management=MANUAL scope=both;

# ---------------------------------------
# Realizar o rename dos datafiles copiados.
# ---------------------------------------
alter database rename file '/oracle/oradata/orcl/system.dbf' to '/oradata/orcl/system.dbf';

# -------------------------------------------------------
# Voltar gerenciamento de arquivos do standby valor antigo.
# -------------------------------------------------------
alter system set standby_file_management=AUTO scope=both;

# ---------------------------------------
# Montar novamente a base em modo standby.
# ---------------------------------------
shutdown immdiate;
startup nomount;
alter database mount standby database;

##### --- Deixe seu comentário ou sugestão e até a próxima. --- #####


Olá, neste artigo iremos mostrar como criar uma nova tablespace undo e deletar a tablespace undo antiga.
# ------------------
# Conectar sqlplus
# ------------------
sqlplus /nolog
conn sys/suasenha as sysdba
# -------------------------------------------------
# Comando para criar tablespace UNDO no +ASM
# -------------------------------------------------
CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '+DATA' SIZE 50M AUTOEXTEND ON NEXT 500M;
# --------------------------------------------------------------------
# Setar tbs undotbs2 como default
# --------------------------------------------------------------------
alter system set undo_tablespace=UNDOTBS2 scope=both;
# --------------------------------------------------------------------
# Verificar se existem transações na tbs antiga
# --------------------------------------------------------------------
column username format a6
SELECT a.name,b.status , d.username , d.sid , d.serial#
 FROM v$rollname a,v$rollstat b, v$transaction c , v$session d
  WHERE a.usn = b.usn
   AND a.usn = c.xidusn
   AND c.ses_addr = d.saddr
   AND a.name IN (
SELECT segment_name
 FROM dba_segments
  WHERE tablespace_name = 'UNDOTBS1'
 );
# --------------------------------------------------------------------
# Comando para finalizar as sessões caso necessário
# --------------------------------------------------------------------
alter system kill session 'sid,serial';
# --------------------------------------------------------------------
# Deletando a tbs UNDOTBS1
# --------------------------------------------------------------------
DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;
##### --- Deixe seu comentário ou sugestão e até a próxima. --- #####