/* 1º Parte */
SP_DROPUSER SYSDBA
GO
EXEC SP_CHANGEDBOWNER sa
GO
/* 2º Parte */
/* Criação dos usuários RM e SYSDBA */
IF NOT EXISTS(SELECT * FROM MASTER.DBO.SYSLOGINS WHERE NAME = 'rm')
CREATE LOGIN rm WITH PASSWORD = 'rm',CHECK_POLICY=OFF
GO
EXEC SP_CHANGEDBOWNER rm
GO
IF NOT EXISTS(SELECT * FROM MASTER.DBO.SYSLOGINS WHERE NAME = 'sysdba')
CREATE LOGIN sysdba WITH PASSWORD = 'masterkey',CHECK_POLICY=OFF
GO
sp_adduser sysdba,sysdba
GO
GRANT SELECT ON GPARAMS TO sysdba
GO
GRANT SELECT , UPDATE ON GUSUARIO TO sysdba
GO
GRANT SELECT ON GPERMIS TO sysdba
GO
GRANT SELECT ON GACESSO TO sysdba
GO
GRANT SELECT ON GSISTEMA TO sysdba
GO
GRANT SELECT ON GCOLIGADA TO sysdba
GO
GRANT SELECT ON GUSRPERFIL TO sysdba
GO
GRANT SELECT ON GSERVICO TO sysdba
GO
GRANT SELECT ON GPARAMETROSSISTEMA TO sysdba
GO
GRANT SELECT,INSERT ON GDATALOG TO sysdba
GO
GRANT SELECT ON GMAILPARAMS TO sysdba
GO
GRANT SELECT ON GUPGATUALIZACAO TO sysdba
GO
GRANT SELECT,INSERT,DELETE,UPDATE ON GSESSAOFLUIG TO sysdba
GO
GRANT SELECT,INSERT,DELETE,UPDATE ON GULTIMOCONTEXTOUSUARIO TO sysdba
GO
SP_DEFAULTLANGUAGE 'RM','ENGLISH'
GO
SP_DEFAULTLANGUAGE 'SYSDBA','ENGLISH'
GO
Mostrando postagens com marcador SQL. Mostrar todas as postagens
Mostrando postagens com marcador SQL. Mostrar todas as postagens
domingo, 6 de agosto de 2017
Totvs - RM - Usuários - MSSQL 2012
/* 1º Parte */
SP_DROPUSER SYSDBA
GO
EXEC SP_CHANGEDBOWNER sa
GO
/* 2º Parte */
/* Criação dos usuários RM e SYSDBA */
IF NOT EXISTS(SELECT * FROM MASTER.DBO.SYSLOGINS WHERE NAME = 'rm')
CREATE LOGIN rm WITH PASSWORD = 'rm',CHECK_POLICY=OFF
GO
EXEC SP_CHANGEDBOWNER rm
GO
IF NOT EXISTS(SELECT * FROM MASTER.DBO.SYSLOGINS WHERE NAME = 'sysdba')
CREATE LOGIN sysdba WITH PASSWORD = 'masterkey',CHECK_POLICY=OFF
GO
sp_adduser sysdba,sysdba
GO
GRANT SELECT ON GPARAMS TO sysdba
GO
GRANT SELECT , UPDATE ON GUSUARIO TO sysdba
GO
GRANT SELECT ON GPERMIS TO sysdba
GO
GRANT SELECT ON GACESSO TO sysdba
GO
GRANT SELECT ON GSISTEMA TO sysdba
GO
GRANT SELECT ON GCOLIGADA TO sysdba
GO
GRANT SELECT ON GUSRPERFIL TO sysdba
GO
GRANT SELECT ON GSERVICO TO sysdba
GO
GRANT SELECT ON GPARAMETROSSISTEMA TO sysdba
GO
SP_DROPUSER SYSDBA
GO
EXEC SP_CHANGEDBOWNER sa
GO
/* 2º Parte */
/* Criação dos usuários RM e SYSDBA */
IF NOT EXISTS(SELECT * FROM MASTER.DBO.SYSLOGINS WHERE NAME = 'rm')
CREATE LOGIN rm WITH PASSWORD = 'rm',CHECK_POLICY=OFF
GO
EXEC SP_CHANGEDBOWNER rm
GO
IF NOT EXISTS(SELECT * FROM MASTER.DBO.SYSLOGINS WHERE NAME = 'sysdba')
CREATE LOGIN sysdba WITH PASSWORD = 'masterkey',CHECK_POLICY=OFF
GO
sp_adduser sysdba,sysdba
GO
GRANT SELECT ON GPARAMS TO sysdba
GO
GRANT SELECT , UPDATE ON GUSUARIO TO sysdba
GO
GRANT SELECT ON GPERMIS TO sysdba
GO
GRANT SELECT ON GACESSO TO sysdba
GO
GRANT SELECT ON GSISTEMA TO sysdba
GO
GRANT SELECT ON GCOLIGADA TO sysdba
GO
GRANT SELECT ON GUSRPERFIL TO sysdba
GO
GRANT SELECT ON GSERVICO TO sysdba
GO
GRANT SELECT ON GPARAMETROSSISTEMA TO sysdba
GO
segunda-feira, 17 de abril de 2017
Oracle|MSSQL - ROWNUM\TOP
No
banco dados SQL Server (MSSQL), é comum criarmos sentenças com o comando TOP,
para facilitar as nossas pesquisas e análises.
Ex: SELECT TOP 5 *
FROM GCOLIGADA
Neste
comando, ele listará os 5 primeiros registros da tabela GCOLIGADA.
No
Oracle, não temos o comando TOP, com o mesmo resultado/funcionalidade, então
podemos usar o comando ROWNUM, que funcionará da mesma forma que o comando TOP
(MSSQL):
Ex:
SELECT *
FROM GCOLIGADA
WHERE ROWNUM <= 5
quinta-feira, 10 de novembro de 2016
sábado, 29 de agosto de 2015
RM - GERAR RELACIONAMENTOS ENTRE AS TABELAS
/******************************************************************************/
/* BANCO DE DADOS : MSSQL */
/* VERSÃO DO BANCO DE DADOS : 7.0/2000/2005 */
/* VERSÃO DA BASE DE DADOS : FULL */
/* DATA DE CRIAÇÃO : 29/03/2007 */
/* ULTIMA ATUALIZAÇÃO : 15/12/2009 */
/* ANALISTA RESPONSÁVEL : FABIO FUMIO */
/* OBJETIVO : GERAR RELACIONAMENTOS ENTRE AS TABELAS */
/******************************************************************************/
/*********************************************************/
/* TABELA :ZSYSCONSTRAINTS */
/* SP GERADORA DE SCRIPT (DROP) :SP_GERASCRIPTDROPFK */
/* SP GERADORA DE SCRIPT (ADD) :SP_GERASCRIPTADDFK */
/*********************************************************/
-----------------------------------------------------------
-- CRIAÇÃO DA TABELA
-----------------------------------------------------------
IF EXISTS (SELECT *
FROM SYSOBJECTS
WHERE XTYPE = 'U'
AND NAME = 'ZSYSCONSTRAINTS')
BEGIN
DROP TABLE ZSYSCONSTRAINTS
END
GO
CREATE TABLE ZSYSCONSTRAINTS (
CONSTID INT,
NOMERELAC VARCHAR(150),
TABELAMAE VARCHAR(100),
TABELAFILHA VARCHAR(100),
CAMPOTABMAE VARCHAR(255),
CAMPOTABFILHA VARCHAR(255),
VERSAOBASE VARCHAR(10))
GO
-----------------------------------------------------------
-- GERAÇÃO DOS RELACIONAMENTOS - POPULANDO TABELA
-----------------------------------------------------------
DECLARE @NOMERELAC VARCHAR(150)
DECLARE @TABELAMAE VARCHAR(100)
DECLARE @TABELAFILHA VARCHAR(100)
DECLARE @CAMPOTABMAE VARCHAR(255)
DECLARE @CAMPOTABFILHA VARCHAR(255)
DECLARE @CONSTID INT
DECLARE @KEYNO INT
DECLARE @VERSAOBASE VARCHAR(10)
DECLARE CR_RELACIONAMENTOS CURSOR FOR
SELECT DADOSRELAC.NAME AS NOMERELACIONAMENTO, ORIGEM.NAME AS TABELAMAE, DESTINO.NAME AS TABELAFILHA,
CAMPOORIGEM.NAME AS CAMPOTABMAE, CAMPODESTINO.NAME AS CAMPOTABFILHA,
FOREIGNK.CONSTID, FOREIGNK.KEYNO
FROM SYSOBJECTS TABELA, -- PARA PESQUISA
SYSCONSTRAINTS RELAC, -- JOIN ENTRE A TABELA E OS DADOS DO RELACIONAMENTO,
SYSOBJECTS DADOSRELAC, -- DADOS DO RELACIONAMENTO,
SYSFOREIGNKEYS FOREIGNK, -- DADOS DA FOREIGN KEYS,
SYSOBJECTS ORIGEM, -- TABELA ORIGEM DO RELACIONAMENTO
SYSOBJECTS DESTINO, -- TABELA DESTINO DO RELACIONAMENTO
SYSCOLUMNS CAMPOORIGEM, -- CAMPO ORIGEM DO RELACIONAMENTO
SYSCOLUMNS CAMPODESTINO -- CAMPO DESTINO DO RELACIONAMENTO
WHERE TABELA.XTYPE = 'U'
AND TABELA.ID = RELAC.ID
AND RELAC.CONSTID = DADOSRELAC.ID
AND RELAC.CONSTID = FOREIGNK.CONSTID
AND FOREIGNK.FKEYID = ORIGEM.ID
AND FOREIGNK.RKEYID = DESTINO.ID
AND FOREIGNK.FKEY = CAMPOORIGEM.COLID
AND FOREIGNK.FKEYID = CAMPOORIGEM.ID
AND FOREIGNK.RKEY = CAMPODESTINO.COLID
AND FOREIGNK.RKEYID = CAMPODESTINO.ID
ORDER BY FOREIGNK.CONSTID, FOREIGNK.KEYNO
OPEN CR_RELACIONAMENTOS
FETCH NEXT FROM CR_RELACIONAMENTOS INTO @NOMERELAC, @TABELAMAE, @TABELAFILHA, @CAMPOTABMAE, @CAMPOTABFILHA, @CONSTID, @KEYNO
SET @VERSAOBASE = (SELECT VERSAOBASE FROM GPARAMS)
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT EXISTS (SELECT *
FROM ZSYSCONSTRAINTS
WHERE CONSTID = @CONSTID)
BEGIN
INSERT INTO ZSYSCONSTRAINTS (CONSTID, NOMERELAC, TABELAMAE, TABELAFILHA, CAMPOTABMAE, CAMPOTABFILHA, VERSAOBASE)
VALUES (@CONSTID, @NOMERELAC, @TABELAMAE, @TABELAFILHA, @CAMPOTABMAE, @CAMPOTABFILHA, @VERSAOBASE)
END
ELSE
BEGIN
UPDATE ZSYSCONSTRAINTS SET CAMPOTABMAE = CAMPOTABMAE+', '+@CAMPOTABMAE,
CAMPOTABFILHA = CAMPOTABFILHA+', '+@CAMPOTABFILHA
WHERE CONSTID = @CONSTID
END
FETCH NEXT FROM CR_RELACIONAMENTOS INTO @NOMERELAC, @TABELAMAE, @TABELAFILHA, @CAMPOTABMAE, @CAMPOTABFILHA, @CONSTID, @KEYNO
END
CLOSE CR_RELACIONAMENTOS
DEALLOCATE CR_RELACIONAMENTOS
GO
-----------------------------------------------------------
-- CRIAÇÃO DAS PROCEDURES DE GERAÇÃO DE SCRIPT
-----------------------------------------------------------
-- Gera Script de Remoção de Constraints
IF EXISTS (SELECT *
FROM SYSOBJECTS
WHERE XTYPE = 'P'
AND NAME = 'SP_GERASCRIPTDROPFK')
BEGIN
DROP PROCEDURE SP_GERASCRIPTDROPFK
END
GO
CREATE PROCEDURE SP_GERASCRIPTDROPFK AS
DECLARE @NOMERELAC VARCHAR(150)
DECLARE @TABELAMAE VARCHAR(100)
DECLARE @TABELAFILHA VARCHAR(100)
DECLARE @CAMPOTABMAE VARCHAR(255)
DECLARE @CAMPOTABFILHA VARCHAR(255)
DECLARE @CONSTID INT
DECLARE @KEYNO INT
DECLARE @VERSAOBASE VARCHAR(10)
DECLARE CR_GERADROP CURSOR FOR
SELECT NOMERELAC, TABELAMAE, TABELAFILHA, CAMPOTABMAE, CAMPOTABFILHA, CONSTID, VERSAOBASE
FROM ZSYSCONSTRAINTS
ORDER BY TABELAMAE
OPEN CR_GERADROP
FETCH NEXT FROM CR_GERADROP INTO @NOMERELAC, @TABELAMAE, @TABELAFILHA, @CAMPOTABMAE, @CAMPOTABFILHA, @CONSTID,
@VERSAOBASE
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT '-- '+@NOMERELAC+' ------ '+@VERSAOBASE
PRINT 'ALTER TABLE '+@TABELAMAE+' DROP CONSTRAINT '+@NOMERELAC
PRINT 'GO'
PRINT ' '
FETCH NEXT FROM CR_GERADROP INTO @NOMERELAC, @TABELAMAE, @TABELAFILHA, @CAMPOTABMAE, @CAMPOTABFILHA, @CONSTID,
@VERSAOBASE
END
CLOSE CR_GERADROP
DEALLOCATE CR_GERADROP
GO
-- Gera Script de Adição de Constraints
IF EXISTS (SELECT *
FROM SYSOBJECTS
WHERE XTYPE = 'P'
AND NAME = 'SP_GERASCRIPTADDFK')
BEGIN
DROP PROCEDURE SP_GERASCRIPTADDFK
END
GO
CREATE PROCEDURE SP_GERASCRIPTADDFK AS
DECLARE @NOMERELAC VARCHAR(150)
DECLARE @TABELAMAE VARCHAR(100)
DECLARE @TABELAFILHA VARCHAR(100)
DECLARE @CAMPOTABMAE VARCHAR(255)
DECLARE @CAMPOTABFILHA VARCHAR(255)
DECLARE @CONSTID INT
DECLARE @KEYNO INT
DECLARE @VERSAOBASE VARCHAR(10)
DECLARE CR_GERAADD CURSOR FOR
SELECT NOMERELAC, TABELAMAE, TABELAFILHA, CAMPOTABMAE, CAMPOTABFILHA, CONSTID, VERSAOBASE
FROM ZSYSCONSTRAINTS
ORDER BY TABELAMAE
OPEN CR_GERAADD
FETCH NEXT FROM CR_GERAADD INTO @NOMERELAC, @TABELAMAE, @TABELAFILHA, @CAMPOTABMAE, @CAMPOTABFILHA, @CONSTID,
@VERSAOBASE
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT '-- '+@NOMERELAC+' ------ '+@VERSAOBASE
PRINT 'ALTER TABLE '+@TABELAMAE+' ADD CONSTRAINT '+@NOMERELAC+' FOREIGN KEY ('+@CAMPOTABMAE+') REFERENCES '+@TABELAFILHA+'('+@CAMPOTABFILHA+')'
PRINT 'GO'
PRINT ' '
FETCH NEXT FROM CR_GERAADD INTO @NOMERELAC, @TABELAMAE, @TABELAFILHA, @CAMPOTABMAE, @CAMPOTABFILHA, @CONSTID,
@VERSAOBASE
END
CLOSE CR_GERAADD
DEALLOCATE CR_GERAADD
GO
-----------------------------------------------------------
-----------------------------------------------------------
/*
-- LISTA TABELAS QUE SE RELACIONAM COM A TABELA EM QUESTÃO, CONSEQUENTEMENTE NECESSITARÃO DE DE/PARA
SELECT TABELAMAE, CAMPOTABMAE
FROM ZSYSCONSTRAINTS
WHERE TABELAFILHA = 'GCCUSTO'
ORDER BY TABELAMAE
GO
-- GERA ESTRUTURA DE DE/PARA
SELECT 'UPDATE '+TABELAMAE+' SET '+SUBSTRING(CAMPOTABMAE,PATINDEX('%,%',CAMPOTABMAE)+1,LEN(CAMPOTABMAE))+' = #<CODIGO_NOVO># '+
' WHERE '+SUBSTRING(CAMPOTABMAE,1,PATINDEX('%,%',CAMPOTABMAE)-1)+' = #<COLIGADA>#'+
' AND'+SUBSTRING(CAMPOTABMAE,PATINDEX('%,%',CAMPOTABMAE)+1,LEN(CAMPOTABMAE))+' = #<CODIGO_ANTIGO>#'+CHAR(10)+'GO'
FROM ZSYSCONSTRAINTS
WHERE TABELAFILHA = 'GCCUSTO'
ORDER BY TABELAMAE
GO
*/
/* BANCO DE DADOS : MSSQL */
/* VERSÃO DO BANCO DE DADOS : 7.0/2000/2005 */
/* VERSÃO DA BASE DE DADOS : FULL */
/* DATA DE CRIAÇÃO : 29/03/2007 */
/* ULTIMA ATUALIZAÇÃO : 15/12/2009 */
/* ANALISTA RESPONSÁVEL : FABIO FUMIO */
/* OBJETIVO : GERAR RELACIONAMENTOS ENTRE AS TABELAS */
/******************************************************************************/
/*********************************************************/
/* TABELA :ZSYSCONSTRAINTS */
/* SP GERADORA DE SCRIPT (DROP) :SP_GERASCRIPTDROPFK */
/* SP GERADORA DE SCRIPT (ADD) :SP_GERASCRIPTADDFK */
/*********************************************************/
-----------------------------------------------------------
-- CRIAÇÃO DA TABELA
-----------------------------------------------------------
IF EXISTS (SELECT *
FROM SYSOBJECTS
WHERE XTYPE = 'U'
AND NAME = 'ZSYSCONSTRAINTS')
BEGIN
DROP TABLE ZSYSCONSTRAINTS
END
GO
CREATE TABLE ZSYSCONSTRAINTS (
CONSTID INT,
NOMERELAC VARCHAR(150),
TABELAMAE VARCHAR(100),
TABELAFILHA VARCHAR(100),
CAMPOTABMAE VARCHAR(255),
CAMPOTABFILHA VARCHAR(255),
VERSAOBASE VARCHAR(10))
GO
-----------------------------------------------------------
-- GERAÇÃO DOS RELACIONAMENTOS - POPULANDO TABELA
-----------------------------------------------------------
DECLARE @NOMERELAC VARCHAR(150)
DECLARE @TABELAMAE VARCHAR(100)
DECLARE @TABELAFILHA VARCHAR(100)
DECLARE @CAMPOTABMAE VARCHAR(255)
DECLARE @CAMPOTABFILHA VARCHAR(255)
DECLARE @CONSTID INT
DECLARE @KEYNO INT
DECLARE @VERSAOBASE VARCHAR(10)
DECLARE CR_RELACIONAMENTOS CURSOR FOR
SELECT DADOSRELAC.NAME AS NOMERELACIONAMENTO, ORIGEM.NAME AS TABELAMAE, DESTINO.NAME AS TABELAFILHA,
CAMPOORIGEM.NAME AS CAMPOTABMAE, CAMPODESTINO.NAME AS CAMPOTABFILHA,
FOREIGNK.CONSTID, FOREIGNK.KEYNO
FROM SYSOBJECTS TABELA, -- PARA PESQUISA
SYSCONSTRAINTS RELAC, -- JOIN ENTRE A TABELA E OS DADOS DO RELACIONAMENTO,
SYSOBJECTS DADOSRELAC, -- DADOS DO RELACIONAMENTO,
SYSFOREIGNKEYS FOREIGNK, -- DADOS DA FOREIGN KEYS,
SYSOBJECTS ORIGEM, -- TABELA ORIGEM DO RELACIONAMENTO
SYSOBJECTS DESTINO, -- TABELA DESTINO DO RELACIONAMENTO
SYSCOLUMNS CAMPOORIGEM, -- CAMPO ORIGEM DO RELACIONAMENTO
SYSCOLUMNS CAMPODESTINO -- CAMPO DESTINO DO RELACIONAMENTO
WHERE TABELA.XTYPE = 'U'
AND TABELA.ID = RELAC.ID
AND RELAC.CONSTID = DADOSRELAC.ID
AND RELAC.CONSTID = FOREIGNK.CONSTID
AND FOREIGNK.FKEYID = ORIGEM.ID
AND FOREIGNK.RKEYID = DESTINO.ID
AND FOREIGNK.FKEY = CAMPOORIGEM.COLID
AND FOREIGNK.FKEYID = CAMPOORIGEM.ID
AND FOREIGNK.RKEY = CAMPODESTINO.COLID
AND FOREIGNK.RKEYID = CAMPODESTINO.ID
ORDER BY FOREIGNK.CONSTID, FOREIGNK.KEYNO
OPEN CR_RELACIONAMENTOS
FETCH NEXT FROM CR_RELACIONAMENTOS INTO @NOMERELAC, @TABELAMAE, @TABELAFILHA, @CAMPOTABMAE, @CAMPOTABFILHA, @CONSTID, @KEYNO
SET @VERSAOBASE = (SELECT VERSAOBASE FROM GPARAMS)
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT EXISTS (SELECT *
FROM ZSYSCONSTRAINTS
WHERE CONSTID = @CONSTID)
BEGIN
INSERT INTO ZSYSCONSTRAINTS (CONSTID, NOMERELAC, TABELAMAE, TABELAFILHA, CAMPOTABMAE, CAMPOTABFILHA, VERSAOBASE)
VALUES (@CONSTID, @NOMERELAC, @TABELAMAE, @TABELAFILHA, @CAMPOTABMAE, @CAMPOTABFILHA, @VERSAOBASE)
END
ELSE
BEGIN
UPDATE ZSYSCONSTRAINTS SET CAMPOTABMAE = CAMPOTABMAE+', '+@CAMPOTABMAE,
CAMPOTABFILHA = CAMPOTABFILHA+', '+@CAMPOTABFILHA
WHERE CONSTID = @CONSTID
END
FETCH NEXT FROM CR_RELACIONAMENTOS INTO @NOMERELAC, @TABELAMAE, @TABELAFILHA, @CAMPOTABMAE, @CAMPOTABFILHA, @CONSTID, @KEYNO
END
CLOSE CR_RELACIONAMENTOS
DEALLOCATE CR_RELACIONAMENTOS
GO
-----------------------------------------------------------
-- CRIAÇÃO DAS PROCEDURES DE GERAÇÃO DE SCRIPT
-----------------------------------------------------------
-- Gera Script de Remoção de Constraints
IF EXISTS (SELECT *
FROM SYSOBJECTS
WHERE XTYPE = 'P'
AND NAME = 'SP_GERASCRIPTDROPFK')
BEGIN
DROP PROCEDURE SP_GERASCRIPTDROPFK
END
GO
CREATE PROCEDURE SP_GERASCRIPTDROPFK AS
DECLARE @NOMERELAC VARCHAR(150)
DECLARE @TABELAMAE VARCHAR(100)
DECLARE @TABELAFILHA VARCHAR(100)
DECLARE @CAMPOTABMAE VARCHAR(255)
DECLARE @CAMPOTABFILHA VARCHAR(255)
DECLARE @CONSTID INT
DECLARE @KEYNO INT
DECLARE @VERSAOBASE VARCHAR(10)
DECLARE CR_GERADROP CURSOR FOR
SELECT NOMERELAC, TABELAMAE, TABELAFILHA, CAMPOTABMAE, CAMPOTABFILHA, CONSTID, VERSAOBASE
FROM ZSYSCONSTRAINTS
ORDER BY TABELAMAE
OPEN CR_GERADROP
FETCH NEXT FROM CR_GERADROP INTO @NOMERELAC, @TABELAMAE, @TABELAFILHA, @CAMPOTABMAE, @CAMPOTABFILHA, @CONSTID,
@VERSAOBASE
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT '-- '+@NOMERELAC+' ------ '+@VERSAOBASE
PRINT 'ALTER TABLE '+@TABELAMAE+' DROP CONSTRAINT '+@NOMERELAC
PRINT 'GO'
PRINT ' '
FETCH NEXT FROM CR_GERADROP INTO @NOMERELAC, @TABELAMAE, @TABELAFILHA, @CAMPOTABMAE, @CAMPOTABFILHA, @CONSTID,
@VERSAOBASE
END
CLOSE CR_GERADROP
DEALLOCATE CR_GERADROP
GO
-- Gera Script de Adição de Constraints
IF EXISTS (SELECT *
FROM SYSOBJECTS
WHERE XTYPE = 'P'
AND NAME = 'SP_GERASCRIPTADDFK')
BEGIN
DROP PROCEDURE SP_GERASCRIPTADDFK
END
GO
CREATE PROCEDURE SP_GERASCRIPTADDFK AS
DECLARE @NOMERELAC VARCHAR(150)
DECLARE @TABELAMAE VARCHAR(100)
DECLARE @TABELAFILHA VARCHAR(100)
DECLARE @CAMPOTABMAE VARCHAR(255)
DECLARE @CAMPOTABFILHA VARCHAR(255)
DECLARE @CONSTID INT
DECLARE @KEYNO INT
DECLARE @VERSAOBASE VARCHAR(10)
DECLARE CR_GERAADD CURSOR FOR
SELECT NOMERELAC, TABELAMAE, TABELAFILHA, CAMPOTABMAE, CAMPOTABFILHA, CONSTID, VERSAOBASE
FROM ZSYSCONSTRAINTS
ORDER BY TABELAMAE
OPEN CR_GERAADD
FETCH NEXT FROM CR_GERAADD INTO @NOMERELAC, @TABELAMAE, @TABELAFILHA, @CAMPOTABMAE, @CAMPOTABFILHA, @CONSTID,
@VERSAOBASE
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT '-- '+@NOMERELAC+' ------ '+@VERSAOBASE
PRINT 'ALTER TABLE '+@TABELAMAE+' ADD CONSTRAINT '+@NOMERELAC+' FOREIGN KEY ('+@CAMPOTABMAE+') REFERENCES '+@TABELAFILHA+'('+@CAMPOTABFILHA+')'
PRINT 'GO'
PRINT ' '
FETCH NEXT FROM CR_GERAADD INTO @NOMERELAC, @TABELAMAE, @TABELAFILHA, @CAMPOTABMAE, @CAMPOTABFILHA, @CONSTID,
@VERSAOBASE
END
CLOSE CR_GERAADD
DEALLOCATE CR_GERAADD
GO
-----------------------------------------------------------
-----------------------------------------------------------
/*
-- LISTA TABELAS QUE SE RELACIONAM COM A TABELA EM QUESTÃO, CONSEQUENTEMENTE NECESSITARÃO DE DE/PARA
SELECT TABELAMAE, CAMPOTABMAE
FROM ZSYSCONSTRAINTS
WHERE TABELAFILHA = 'GCCUSTO'
ORDER BY TABELAMAE
GO
-- GERA ESTRUTURA DE DE/PARA
SELECT 'UPDATE '+TABELAMAE+' SET '+SUBSTRING(CAMPOTABMAE,PATINDEX('%,%',CAMPOTABMAE)+1,LEN(CAMPOTABMAE))+' = #<CODIGO_NOVO># '+
' WHERE '+SUBSTRING(CAMPOTABMAE,1,PATINDEX('%,%',CAMPOTABMAE)-1)+' = #<COLIGADA>#'+
' AND'+SUBSTRING(CAMPOTABMAE,PATINDEX('%,%',CAMPOTABMAE)+1,LEN(CAMPOTABMAE))+' = #<CODIGO_ANTIGO>#'+CHAR(10)+'GO'
FROM ZSYSCONSTRAINTS
WHERE TABELAFILHA = 'GCCUSTO'
ORDER BY TABELAMAE
GO
*/
RM - Coligada Corrente
select ultimacoligada as coligadacorrente
from gusuario
where codusuario = (select username
from glogin
where computername = (select distinct hostname
from master..sysprocesses
where spid = (select @@spid))
and datepart(yyyy,logintime) = (select distinct datepart(yyyy, getdate()) from gcoligada)
and datepart(mm,logintime) = (select distinct datepart(mm, getdate()) from gcoligada)
and datepart(dd,logintime) = (select distinct datepart(dd, getdate()) from gcoligada))
from gusuario
where codusuario = (select username
from glogin
where computername = (select distinct hostname
from master..sysprocesses
where spid = (select @@spid))
and datepart(yyyy,logintime) = (select distinct datepart(yyyy, getdate()) from gcoligada)
and datepart(mm,logintime) = (select distinct datepart(mm, getdate()) from gcoligada)
and datepart(dd,logintime) = (select distinct datepart(dd, getdate()) from gcoligada))
SQL - Redução de LOG
Para diminuir o tamanho do log da base de dados do cliente, siga os passos abaixo:
1º) Peça ao cliente para fazer um backup da base de dados
2º) Execute: DBCC SHRINKFILE (<log> ,<tamanho> ,truncateonly )
Onde: <log> , é o nome lógico do device de log.
<tamanho> , é o tamanho para o qual você quer reduzir o arquivo, (será reduzido ao valor máximo que o banco permite caso o tamanho seja muito pequeno).
3º) Execute: DUMP TRAN <banco de dados> WITH NO_LOG
Onde: <banco de dados> é o nome do banco de dados.
Ex:
DBCC SHRINKFILE (exemplo_log ,10 ,truncateonly)
DUMP TRAN EXEMPLO WITH NO_LOG
caso queira realizar a redução no máximo que o banco permite, retire o tamanho:
DBCC SHRINKFILE (exemplo_log , truncateonly)
1º) Peça ao cliente para fazer um backup da base de dados
2º) Execute: DBCC SHRINKFILE (<log> ,<tamanho> ,truncateonly )
Onde: <log> , é o nome lógico do device de log.
<tamanho> , é o tamanho para o qual você quer reduzir o arquivo, (será reduzido ao valor máximo que o banco permite caso o tamanho seja muito pequeno).
3º) Execute: DUMP TRAN <banco de dados> WITH NO_LOG
Onde: <banco de dados> é o nome do banco de dados.
Ex:
DBCC SHRINKFILE (exemplo_log ,10 ,truncateonly)
DUMP TRAN EXEMPLO WITH NO_LOG
caso queira realizar a redução no máximo que o banco permite, retire o tamanho:
DBCC SHRINKFILE (exemplo_log , truncateonly)
SQL - Left Outer Join
select a.codcolgerencial,a.codgerencial
from crateiolc a left outer join cgerencia b
on
a.codcolgerencial = b.codcoligada and
a.codgerencial = b.codconta
where
b.codcoligada is NULL and
b.codconta is NULL
group by
a.codcolgerencial,a.codgerencial,b.codcoligada,b.codconta
order by b.codconta
from crateiolc a left outer join cgerencia b
on
a.codcolgerencial = b.codcoligada and
a.codgerencial = b.codconta
where
b.codcoligada is NULL and
b.codconta is NULL
group by
a.codcolgerencial,a.codgerencial,b.codcoligada,b.codconta
order by b.codconta
SQL - Manutencao2.sql
set nocount on
declare @comando varchar(255)
declare @comando1 varchar(255)
declare @comando2 varchar(255)
declare @comando3 varchar(255)
declare @comando4 varchar(255)
declare @database varchar(100)
Print 'Espaco Alocado no database'
exec sp_spaceused
declare teste cursor for
SELECT distinct TABLE_CATALOG FROM INFORMATION_SCHEMA.TABLES
open teste
fetch next from teste into @database
while (@@fetch_status=0)
begin
EXEC sp_dboption @database, 'trunc. log on chkpt.', 'TRUE'
EXEC sp_dboption @database, 'auto create statistics', 'FALSE'
EXEC sp_dboption @database, 'auto update statistics', 'FALSE'
EXEC sp_dboption @database, 'ANSI null default', 'TRUE'
print 'Verificando estrututura no Banco '+ @database
set @comando1 ='dbcc checkdb ('+@database+')'
exec (@comando1)
print '---------------------------------------------'
print ' '
print 'Verificando espaco alocado no Banco'+@database
set @comando2= 'dbcc checkalloc ('+@database+')'
exec (@comando2)
print '---------------------------------------------'
print ' '
print 'Alocacao '+ @database
set @comando3= 'dbcc newalloc ('+@database+')'
exec (@comando3)
print ' '
fetch next from teste into @database
end
close teste
deallocate teste
Print 'Final da Manuntencao'
print '*******************************************************************************************'
print '**********************************************************************************'
print '***************************************************************'
declare @comando varchar(255)
declare @comando1 varchar(255)
declare @comando2 varchar(255)
declare @comando3 varchar(255)
declare @comando4 varchar(255)
declare @database varchar(100)
Print 'Espaco Alocado no database'
exec sp_spaceused
declare teste cursor for
SELECT distinct TABLE_CATALOG FROM INFORMATION_SCHEMA.TABLES
open teste
fetch next from teste into @database
while (@@fetch_status=0)
begin
EXEC sp_dboption @database, 'trunc. log on chkpt.', 'TRUE'
EXEC sp_dboption @database, 'auto create statistics', 'FALSE'
EXEC sp_dboption @database, 'auto update statistics', 'FALSE'
EXEC sp_dboption @database, 'ANSI null default', 'TRUE'
print 'Verificando estrututura no Banco '+ @database
set @comando1 ='dbcc checkdb ('+@database+')'
exec (@comando1)
print '---------------------------------------------'
print ' '
print 'Verificando espaco alocado no Banco'+@database
set @comando2= 'dbcc checkalloc ('+@database+')'
exec (@comando2)
print '---------------------------------------------'
print ' '
print 'Alocacao '+ @database
set @comando3= 'dbcc newalloc ('+@database+')'
exec (@comando3)
print ' '
fetch next from teste into @database
end
close teste
deallocate teste
Print 'Final da Manuntencao'
print '*******************************************************************************************'
print '**********************************************************************************'
print '***************************************************************'
SQL - Manutenção.sql
set nocount on
declare @comando varchar(255)
declare @comando1 varchar(255)
declare @comando2 varchar(255)
declare @comando3 varchar(255)
declare @comando4 varchar(255)
declare @tabela varchar (100)
declare @database varchar (225)
declare base cursor for
SELECT distinct TABLE_CATALOG FROM INFORMATION_SCHEMA.TABLES
open base
fetch next from base into @database
declare tabelas cursor for
select name from sysobjects where type='U' order by name
open tabelas
fetch next from tabelas into @tabela
while @@fetch_status=0
begin
print 'Reindexando os indices da Tabela '+ @tabela
set @comando = 'dbcc dbreindex ('+@tabela+')'
exec (@comando)
print '---------------------------------------------'
print ' '
print 'Verificando estrututura da tabela '+ @tabela
set @comando1 ='dbcc checktable ('+@tabela+')'
exec (@comando1)
print '---------------------------------------------'
print ' '
print 'Verificando espaco alocado na tabela'+@tabela
set @comando2= 'dbcc updateusage ('+@database+','+@tabela+')'
exec (@comando2)
print '---------------------------------------------'
print ' '
fetch next from tabelas into @tabela
end
Print 'Final da Manuntencao'
print '*******************************************************************************************'
print '**********************************************************************************'
print '***************************************************************'
close base
close tabelas
deallocate tabelas
deallocate base
declare @comando varchar(255)
declare @comando1 varchar(255)
declare @comando2 varchar(255)
declare @comando3 varchar(255)
declare @comando4 varchar(255)
declare @tabela varchar (100)
declare @database varchar (225)
declare base cursor for
SELECT distinct TABLE_CATALOG FROM INFORMATION_SCHEMA.TABLES
open base
fetch next from base into @database
declare tabelas cursor for
select name from sysobjects where type='U' order by name
open tabelas
fetch next from tabelas into @tabela
while @@fetch_status=0
begin
print 'Reindexando os indices da Tabela '+ @tabela
set @comando = 'dbcc dbreindex ('+@tabela+')'
exec (@comando)
print '---------------------------------------------'
print ' '
print 'Verificando estrututura da tabela '+ @tabela
set @comando1 ='dbcc checktable ('+@tabela+')'
exec (@comando1)
print '---------------------------------------------'
print ' '
print 'Verificando espaco alocado na tabela'+@tabela
set @comando2= 'dbcc updateusage ('+@database+','+@tabela+')'
exec (@comando2)
print '---------------------------------------------'
print ' '
fetch next from tabelas into @tabela
end
Print 'Final da Manuntencao'
print '*******************************************************************************************'
print '**********************************************************************************'
print '***************************************************************'
close base
close tabelas
deallocate tabelas
deallocate base
SQL / RM - Erros C#
-- Script para remoção dos erros do C# como por exemplo
-- Couldn't perform the edit because another user changed the record.
-- ATENÇÃO: ESTE NÃO DEVE SER EXECUTADO SE O BANCO FIZER BACKUP DE LOG
set nocount on
declare @comando varchar(255)
declare @comando1 varchar(255)
declare @comando2 varchar(255)
declare @comando3 varchar(255)
declare @comando4 varchar(255)
declare @database varchar(100)
declare @datab varchar(50)
set @datab = (select distinct table_catalog from information_schema.tables)
if (select count(*) from master.dbo.sysprocesses where dbid in ( select dbid from master.dbo.sysdatabases where name = @datab )) <= 1
begin
print ' '
print 'Acertando permissões do banco.'
exec sp_dboption @datab, 'single', 'true'
exec sp_dboption @datab, 'trunc. log on chkpt.', 'true'
exec sp_dboption @datab, 'auto create statistics', 'false'
exec sp_dboption @datab, 'auto update statistics', 'false'
exec sp_dboption @datab, 'ansi null default', 'true'
print ' '
print 'Verificando base de dados.'
set @comando1 ='dbcc checkdb ('+@datab+')'
exec (@comando1)
print ' '
print 'Acertando fragmentação na base de dados.'
set @comando3= 'dbcc newalloc ('+@datab+')'
exec (@comando3)
declare @tabela varchar (100)
declare @comando5 varchar (255)
declare tabela cursor for
select name from sysobjects where type = 'u' order by name
open tabela
fetch next from tabela into @tabela
while @@fetch_status = 0
begin
print ''
print 'Verificando tabela '+@tabela
print ''
set @comando5 = 'dbcc checktable ('+@tabela +', repair_allow_data_loss)'
exec (@comando5)
set @comando = 'dbcc dbreindex ('+@tabela+')'
exec (@comando5)
set @comando5= 'dbcc checkconstraints ('+@tabela+')'
exec (@comando5)
fetch next from tabela into @tabela
end
close tabela
deallocate tabela
exec sp_dboption @datab, 'single', 'false'
declare @tab_nome varchar(255)
declare @tab_statistic varchar(255)
declare @sql_str varchar(255)
declare @db_nome varchar(255)
select @db_nome=name from master..sysdatabases where dbid=(select dbid from master..sysprocesses where spid=@@spid)
checkpoint
declare cur cursor for
select object_name(id),name from sysindexes where name like '_wa_sys%'
set nocount on
open cur
fetch next from cur into @tab_nome,@tab_statistic
while(@@fetch_status=0)
begin
set @sql_str='drop statistics ' + @tab_nome + '.' + @tab_statistic
exec (@sql_str)
fetch next from cur into @tab_nome,@tab_statistic
end
close cur
deallocate cur
exec sp_updatestats
print '*******************************************************************************************'
print 'FINAL DA MANUNTENCAO'
print '*******************************************************************************************'
end
else
begin
print '****** A T E N Ç Â O *******'
print 'A BASE ESTÁ SENDO USADA. ESTE SCRIPT SÓ PODE SER EXECUTADO EM MONOUSUÁRIO !!!'
print '***********************************************************************************************************************'
print 'Seguintes estações/número de conexões estão acessado a base de dados:'
declare @tab varchar(20)
declare @num varchar(2)
declare tabs cursor for select hostname,count(*) from master.dbo.sysprocesses where dbid in ( select dbid from master.dbo.sysdatabases where name = @datab ) group by hostname
open tabs
fetch next from tabs into @tab,@num
while(@@fetch_status=0)
begin
print @tab +'/'+@num
fetch next from tabs into @tab,@num
end
close tabs
deallocate tabs
end
-- Couldn't perform the edit because another user changed the record.
-- ATENÇÃO: ESTE NÃO DEVE SER EXECUTADO SE O BANCO FIZER BACKUP DE LOG
set nocount on
declare @comando varchar(255)
declare @comando1 varchar(255)
declare @comando2 varchar(255)
declare @comando3 varchar(255)
declare @comando4 varchar(255)
declare @database varchar(100)
declare @datab varchar(50)
set @datab = (select distinct table_catalog from information_schema.tables)
if (select count(*) from master.dbo.sysprocesses where dbid in ( select dbid from master.dbo.sysdatabases where name = @datab )) <= 1
begin
print ' '
print 'Acertando permissões do banco.'
exec sp_dboption @datab, 'single', 'true'
exec sp_dboption @datab, 'trunc. log on chkpt.', 'true'
exec sp_dboption @datab, 'auto create statistics', 'false'
exec sp_dboption @datab, 'auto update statistics', 'false'
exec sp_dboption @datab, 'ansi null default', 'true'
print ' '
print 'Verificando base de dados.'
set @comando1 ='dbcc checkdb ('+@datab+')'
exec (@comando1)
print ' '
print 'Acertando fragmentação na base de dados.'
set @comando3= 'dbcc newalloc ('+@datab+')'
exec (@comando3)
declare @tabela varchar (100)
declare @comando5 varchar (255)
declare tabela cursor for
select name from sysobjects where type = 'u' order by name
open tabela
fetch next from tabela into @tabela
while @@fetch_status = 0
begin
print ''
print 'Verificando tabela '+@tabela
print ''
set @comando5 = 'dbcc checktable ('+@tabela +', repair_allow_data_loss)'
exec (@comando5)
set @comando = 'dbcc dbreindex ('+@tabela+')'
exec (@comando5)
set @comando5= 'dbcc checkconstraints ('+@tabela+')'
exec (@comando5)
fetch next from tabela into @tabela
end
close tabela
deallocate tabela
exec sp_dboption @datab, 'single', 'false'
declare @tab_nome varchar(255)
declare @tab_statistic varchar(255)
declare @sql_str varchar(255)
declare @db_nome varchar(255)
select @db_nome=name from master..sysdatabases where dbid=(select dbid from master..sysprocesses where spid=@@spid)
checkpoint
declare cur cursor for
select object_name(id),name from sysindexes where name like '_wa_sys%'
set nocount on
open cur
fetch next from cur into @tab_nome,@tab_statistic
while(@@fetch_status=0)
begin
set @sql_str='drop statistics ' + @tab_nome + '.' + @tab_statistic
exec (@sql_str)
fetch next from cur into @tab_nome,@tab_statistic
end
close cur
deallocate cur
exec sp_updatestats
print '*******************************************************************************************'
print 'FINAL DA MANUNTENCAO'
print '*******************************************************************************************'
end
else
begin
print '****** A T E N Ç Â O *******'
print 'A BASE ESTÁ SENDO USADA. ESTE SCRIPT SÓ PODE SER EXECUTADO EM MONOUSUÁRIO !!!'
print '***********************************************************************************************************************'
print 'Seguintes estações/número de conexões estão acessado a base de dados:'
declare @tab varchar(20)
declare @num varchar(2)
declare tabs cursor for select hostname,count(*) from master.dbo.sysprocesses where dbid in ( select dbid from master.dbo.sysdatabases where name = @datab ) group by hostname
open tabs
fetch next from tabs into @tab,@num
while(@@fetch_status=0)
begin
print @tab +'/'+@num
fetch next from tabs into @tab,@num
end
close tabs
deallocate tabs
end
SQL - Perdeu o LDF
I called Microsoft and here was there solution that worked. To restore a database with only single MDF and no transaction log:
Rename current_database.mdf to current_database.mdf .old Create New Database with same name as old unavailable database Open SQLServer Properites, Server Settings tab
Set Server Properites to "ALLOW MODIFICATIONS TO BE MADE DIRECTLY TO THE SYSTEM"
Run this Query
update sysdatabases
set status = 32768
where name='database_name'
Stop/Start SQL Server
Database should appear in "Emergency Mode"
Then IMPORT Database and all objects into a NEW database Drop the Database which is in EMERGENCY MODE Rename NEW database to desired database name
Rename current_database.mdf to current_database.mdf .old Create New Database with same name as old unavailable database Open SQLServer Properites, Server Settings tab
Set Server Properites to "ALLOW MODIFICATIONS TO BE MADE DIRECTLY TO THE SYSTEM"
Run this Query
update sysdatabases
set status = 32768
where name='database_name'
Stop/Start SQL Server
Database should appear in "Emergency Mode"
Then IMPORT Database and all objects into a NEW database Drop the Database which is in EMERGENCY MODE Rename NEW database to desired database name
SQL - Importação de Arquivo Texto
Prezados,
para a importação de arquivos textos em uma determinada tabela de Banco de Dados:
SQL Server:
Devemos habilitar o seguinte parâmetro no Query Analyzer:
sp_dboption <Nome da Database>, 'select into/bulkcopy', 'true'
Comando para importação:
BULK INSERT <Nome da Database>..<Nome da Tabela> FROM '<Endereço do arquivo texto>'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = '#',
ROWTERMINATOR = '\n'
)
** O campos dentro do arquivo texto deverão ter o mesmo tamanho do campo correspondente a ser importado, e deverá estar separado pelo caracter "#".
Oracle:
O Oracle possui alguns tipos de importação de arquivos textos, por exemplo:
1) Importação com um único arquivo de dados e de controle:
Arquivo de dados e controle, conteúdo:
LOAD DATA
INFILE *
APPEND INTO TABLE <Nome da Tabela> Ex: TabelaTemp
FIELDS TERMINATED BY '$'
<(Campos a serem atualizados)> Ex: (Codcoligada,Chapa)
BEGINDATA
<Dados a serem importados, separados pelo caracter "$"> Ex:1$00001
Após criado este arquivo, devemos no prompt do MS-DOS no diretório de instalação do Oracle\Bin, os arquivos "sqlldr.exe ou sqlldr80.exe" e executar o seguinte comando:
SQLLDR USERID=<USER/PASSWORD) Ex:RM/RM
CONTROL = <Caminho do arquivo criado acima> Ex:c:\temp\repres.txt
2) Importação com os arquivos de controles e de dados separados:
Arquivo de controle:
LOAD DATA
INFILE <Caminho do "Arquivo de Dados"> Ex: "C:\Windows\Temp\Teste.txt"
APPEND
INTO TABLE <Nome da Tabela> Ex: TabelaTemp
FIELDS TERMINMATED BY "," OPITIONALLY ENCLOSED BY ' " '
<Campos da tabela a serem populados>
(campo0, campo1, campo2, campo3, campo4 DATE(20) "DD-Month-YYYY",
campo5 CHAR TERMINATED BY ':')
Após criado este arquivo, devemos no prompt do MS-DOS no diretório de instalação do Oracle\Bin, os arquivos "sqlldr.exe ou sqlldr80.exe" e executar o seguinte comando:
SQLLDR USERID=<USER/PASSWORD) Ex:RM/RM
CONTROL = <Caminho do "arquivo de controle" criado acima> Ex:c:\temp\controle.ctl
** A possibilidade de utilizar o arquivo de controle separado do arquivo de dados, possibilita a formatação dos dados antes da importação na tabela, nem o trabalho de tratarmos as informações no arquivo texto, como no exemplo acima.
para a importação de arquivos textos em uma determinada tabela de Banco de Dados:
SQL Server:
Devemos habilitar o seguinte parâmetro no Query Analyzer:
sp_dboption <Nome da Database>, 'select into/bulkcopy', 'true'
Comando para importação:
BULK INSERT <Nome da Database>..<Nome da Tabela> FROM '<Endereço do arquivo texto>'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = '#',
ROWTERMINATOR = '\n'
)
** O campos dentro do arquivo texto deverão ter o mesmo tamanho do campo correspondente a ser importado, e deverá estar separado pelo caracter "#".
Oracle:
O Oracle possui alguns tipos de importação de arquivos textos, por exemplo:
1) Importação com um único arquivo de dados e de controle:
Arquivo de dados e controle, conteúdo:
LOAD DATA
INFILE *
APPEND INTO TABLE <Nome da Tabela> Ex: TabelaTemp
FIELDS TERMINATED BY '$'
<(Campos a serem atualizados)> Ex: (Codcoligada,Chapa)
BEGINDATA
<Dados a serem importados, separados pelo caracter "$"> Ex:1$00001
Após criado este arquivo, devemos no prompt do MS-DOS no diretório de instalação do Oracle\Bin, os arquivos "sqlldr.exe ou sqlldr80.exe" e executar o seguinte comando:
SQLLDR USERID=<USER/PASSWORD) Ex:RM/RM
CONTROL = <Caminho do arquivo criado acima> Ex:c:\temp\repres.txt
2) Importação com os arquivos de controles e de dados separados:
Arquivo de controle:
LOAD DATA
INFILE <Caminho do "Arquivo de Dados"> Ex: "C:\Windows\Temp\Teste.txt"
APPEND
INTO TABLE <Nome da Tabela> Ex: TabelaTemp
FIELDS TERMINMATED BY "," OPITIONALLY ENCLOSED BY ' " '
<Campos da tabela a serem populados>
(campo0, campo1, campo2, campo3, campo4 DATE(20) "DD-Month-YYYY",
campo5 CHAR TERMINATED BY ':')
Após criado este arquivo, devemos no prompt do MS-DOS no diretório de instalação do Oracle\Bin, os arquivos "sqlldr.exe ou sqlldr80.exe" e executar o seguinte comando:
SQLLDR USERID=<USER/PASSWORD) Ex:RM/RM
CONTROL = <Caminho do "arquivo de controle" criado acima> Ex:c:\temp\controle.ctl
** A possibilidade de utilizar o arquivo de controle separado do arquivo de dados, possibilita a formatação dos dados antes da importação na tabela, nem o trabalho de tratarmos as informações no arquivo texto, como no exemplo acima.
SQL - DBReindex
DECLARE @COMANDO VARCHAR(255)
DECLARE @TABELA VARCHAR(100)
DECLARE CUR_TABLES CURSOR FOR
SELECT NAME FROM SYSOBJECTS WHERE TYPE = 'U' ORDER BY NAME
OPEN CUR_TABLES
FETCH NEXT FROM CUR_TABLES INTO @TABELA
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Atualizando indices da tabela '+@TABELA
SELECT @COMANDO = (SELECT 'DBCC DBREINDEX ('+@TABELA+')')
EXEC ( @COMANDO )
FETCH NEXT FROM CUR_TABLES INTO @TABELA
END
CLOSE CUR_TABLES
DEALLOCATE CUR_TABLES
SELECT @COMANDO = (SELECT 'DBCC UPDATEUSAGE ('+(select db_name())+')')
EXEC ( @COMANDO )
DECLARE @TABELA VARCHAR(100)
DECLARE CUR_TABLES CURSOR FOR
SELECT NAME FROM SYSOBJECTS WHERE TYPE = 'U' ORDER BY NAME
OPEN CUR_TABLES
FETCH NEXT FROM CUR_TABLES INTO @TABELA
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Atualizando indices da tabela '+@TABELA
SELECT @COMANDO = (SELECT 'DBCC DBREINDEX ('+@TABELA+')')
EXEC ( @COMANDO )
FETCH NEXT FROM CUR_TABLES INTO @TABELA
END
CLOSE CUR_TABLES
DEALLOCATE CUR_TABLES
SELECT @COMANDO = (SELECT 'DBCC UPDATEUSAGE ('+(select db_name())+')')
EXEC ( @COMANDO )
SQL - Decrypt 2
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE DECRYPTSP2K (@objName varchar(50))
AS
DECLARE @a nvarchar(4000), @b nvarchar(4000), @c nvarchar(4000), @d nvarchar(4000), @i int, @t bigint
SET @a=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
SET @b='ALTER PROCEDURE '+ @objName +' WITH ENCRYPTION AS '+REPLICATE('-', 4000-62)
EXECUTE (@b)
SET @c=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
SET @b='CREATE PROCEDURE '+ @objName +' WITH ENCRYPTION AS '+REPLICATE('-', 4000-62)
SET @i=1
SET @d = replicate(N'A', (datalength(@a) / 2))
--loop
WHILE @i<=datalength(@a)/2
BEGIN
SET @d = stuff(@d, @i, 1,
NCHAR(UNICODE(substring(@a, @i, 1)) ^
(UNICODE(substring(@b, @i, 1)) ^
UNICODE(substring(@c, @i, 1)))))
SET @i=@i+1
END
EXECUTE ('drop PROCEDURE '+ @objName)
SET @d=REPLACE((@d),'WITH ENCRYPTION', '')
SET @d=REPLACE((@d),'With Encryption', '')
SET @d=REPLACE((@d),'with encryption', '')
IF CHARINDEX('WITH ENCRYPTION',UPPER(@d) )>0
SET @d=REPLACE(UPPER(@d),'WITH ENCRYPTION', '')
execute( @d)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE DECRYPTSP2K (@objName varchar(50))
AS
DECLARE @a nvarchar(4000), @b nvarchar(4000), @c nvarchar(4000), @d nvarchar(4000), @i int, @t bigint
SET @a=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
SET @b='ALTER PROCEDURE '+ @objName +' WITH ENCRYPTION AS '+REPLICATE('-', 4000-62)
EXECUTE (@b)
SET @c=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
SET @b='CREATE PROCEDURE '+ @objName +' WITH ENCRYPTION AS '+REPLICATE('-', 4000-62)
SET @i=1
SET @d = replicate(N'A', (datalength(@a) / 2))
--loop
WHILE @i<=datalength(@a)/2
BEGIN
SET @d = stuff(@d, @i, 1,
NCHAR(UNICODE(substring(@a, @i, 1)) ^
(UNICODE(substring(@b, @i, 1)) ^
UNICODE(substring(@c, @i, 1)))))
SET @i=@i+1
END
EXECUTE ('drop PROCEDURE '+ @objName)
SET @d=REPLACE((@d),'WITH ENCRYPTION', '')
SET @d=REPLACE((@d),'With Encryption', '')
SET @d=REPLACE((@d),'with encryption', '')
IF CHARINDEX('WITH ENCRYPTION',UPPER(@d) )>0
SET @d=REPLACE(UPPER(@d),'WITH ENCRYPTION', '')
execute( @d)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SQL - Decrypt
if exists (select * from sysobjects where id = object_id('dbo.spDecryptSP') and sysstat & 0xf = 4)
drop procedure dbo.spDecryptSP
GO
Create procedure dbo.spDecryptSP
@spName varchar(50),
@Replace bit = 0
As
/*
Developer: Jonathan Spinks
Date: 24/07/03
Description: Decrypts SQL 2000 stored procedures
Inputs:
@spName = the name of the stored procedure you wish to decrypt
@Replace = 0 or 1. 0 if you wish to display the unencrypted sp
1 if you wish to replace the encrypted with the unencrypted sp
If this procedure returns "<@spName> is to large to decrypt"
this stored procedure can be modified to decrypt it.
Your starting point is to check out how many rows are returned
in the syscomments table for the stored procedures object_id.
If you just wish to display the sp then ensure that your result
pane is turned to 'Results in Text'.
In Query analyser (2k) Query => 'Results in Text'.
If your returned information looks 'cut short' first check
that your i_SQL query window is returning the entire string.
In Query analyser (2k) Tools => Options, Results tab,
Maximum characters per column = 8000.
Happy decrypting
Original idea: shoeboy <shoeboy@adequacy.org>
Adapted by: Joseph Gama Copyright © 1999-2002 SecurityFocus
Adapted Source: http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=505&lngWId=5
Enhanced by: Jonathan Spinks Copyright © 2003 I.S. Software Developments. WASH
*/
DECLARE
@a1 nvarchar(4000), @b1 nvarchar(4000), @c1 nvarchar(4000), @d1 nvarchar(4000),
@a2 nvarchar(4000), @b2 nvarchar(4000), @c2 nvarchar(4000), @d2 nvarchar(4000),
@a3 nvarchar(4000), @b3 nvarchar(4000), @c3 nvarchar(4000), @d3 nvarchar(4000),
@a4 nvarchar(4000), @b4 nvarchar(4000), @c4 nvarchar(4000), @d4 nvarchar(4000),
@a5 nvarchar(4000), @b5 nvarchar(4000), @c5 nvarchar(4000), @d5 nvarchar(4000),
@a6 nvarchar(4000), @b6 nvarchar(4000), @c6 nvarchar(4000), @d6 nvarchar(4000),
@a7 nvarchar(4000), @b7 nvarchar(4000), @c7 nvarchar(4000), @d7 nvarchar(4000),
@a8 nvarchar(4000), @b8 nvarchar(4000), @c8 nvarchar(4000), @d8 nvarchar(4000),
@a9 nvarchar(4000), @b9 nvarchar(4000), @c9 nvarchar(4000), @d9 nvarchar(4000),
@a0 nvarchar(4000), @b0 nvarchar(4000), @c0 nvarchar(4000), @d0 nvarchar(4000),
@Perm nvarchar(4000),
@i int
if not exists(SELECT * FROM syscomments WHERE id = object_id(@spName))
Begin
print @spName +' cannot be found'
return
End
if exists(SELECT * FROM syscomments WHERE id = object_id(@spName) and encrypted = 0)
Begin
print @spName +' is not encrypted'
return
End
if (SELECT count(*) FROM syscomments WHERE id = object_id(@spName)) > 10
Begin
print @spName +' is to large to decrypt'
return
End
-- Get a list of the current permissions on the encrypted stored procedure
declare curPerm cursor fast_forward for
select '['+ u.name +']' as name, p.actadd, p.actmod
from dbo.syspermissions p inner join dbo.sysusers u
On p.grantee = u.uid
where p.id = object_id(@spName)
open curPerm
Set @Perm = ''
while 1 = 1
begin
declare @name sysname,
@actadd smallint,
@actmod smallint
fetch next from curPerm into @name, @actadd, @actmod
if @@fetch_status <> 0
break
-- For each permission in the list construct a GRANT or DENY command
if @actadd & 32 = 32
Set @Perm = @Perm +'GRANT EXECUTE ON '+ @spName +' TO '+ @name +char(13)+char(10)+'Go'+char(13)+char(10)
else if @actmod & 32 = 32
Set @Perm = @Perm +'DENY EXECUTE ON '+ @spName +' TO '+ @name +char(13)+char(10)+'Go'+char(13)+char(10)
end
close curPerm
deallocate curPerm
-- Get encrypted stored procedure
SELECT @a1=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 1
SELECT @a2=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 2
SELECT @a3=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 3
SELECT @a4=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 4
SELECT @a5=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 5
SELECT @a6=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 6
SELECT @a7=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 7
SELECT @a8=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 8
SELECT @a9=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 9
SELECT @a0=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 10
-- Create blank stored procedure
SET @b1='ALTER PROCEDURE '+ @spName +' WITH ENCRYPTION AS '+ REPLICATE('-', Len(@a1))
SET @b2=REPLICATE(N'-', len(@a2))
SET @b3=REPLICATE(N'-', len(@a3))
SET @b4=REPLICATE(N'-', len(@a4))
SET @b5=REPLICATE(N'-', len(@a5))
SET @b6=REPLICATE(N'-', len(@a6))
SET @b7=REPLICATE(N'-', len(@a7))
SET @b8=REPLICATE(N'-', len(@a8))
SET @b9=REPLICATE(N'-', len(@a9))
SET @b0=REPLICATE(N'-', len(@a0))
-- Wrap in transaction so original stored procedure can be restored
Begin transaction ReplaceSP
Execute (@b1 + @b2 + @b3 + @b4 + @b5 + @b6 + @b7 + @b8 + @b9 + @b0)
-- Get blank encrypted stored procedure
SELECT @c1=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 1
SELECT @c2=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 2
SELECT @c3=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 3
SELECT @c4=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 4
SELECT @c5=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 5
SELECT @c6=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 6
SELECT @c7=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 7
SELECT @c8=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 8
SELECT @c9=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 9
SELECT @c0=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 10
If @Replace = 0
Rollback Transaction ReplaceSP
Else
Commit Transaction ReplaceSP
SET @b1='CREATE PROCEDURE '+ @spName +' WITH ENCRYPTION AS '+ REPLICATE('-', Len(@a1))
-- initalise the output variables
Set @d1 = ''
Set @d2 = ''
Set @d3 = ''
Set @d4 = ''
Set @d5 = ''
Set @d6 = ''
Set @d7 = ''
Set @d8 = ''
Set @d9 = ''
Set @d0 = ''
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a1)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d1 = @d1 + NCHAR(UNICODE(substring(@a1, @i, 1)) ^ (UNICODE(substring(@b1, @i, 1)) ^ UNICODE(substring(@c1, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a2)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d2 = @d2 + NCHAR(UNICODE(substring(@a2, @i, 1)) ^ (UNICODE(substring(@b2, @i, 1)) ^ UNICODE(substring(@c2, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a3)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d3 = @d3 + NCHAR(UNICODE(substring(@a3, @i, 1)) ^ (UNICODE(substring(@b3, @i, 1)) ^ UNICODE(substring(@c3, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a4)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d4 = @d4 + NCHAR(UNICODE(substring(@a4, @i, 1)) ^ (UNICODE(substring(@b4, @i, 1)) ^ UNICODE(substring(@c4, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a5)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d5 = @d5 + NCHAR(UNICODE(substring(@a5, @i, 1)) ^ (UNICODE(substring(@b5, @i, 1)) ^ UNICODE(substring(@c5, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a6)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d6 = @d6 + NCHAR(UNICODE(substring(@a6, @i, 1)) ^ (UNICODE(substring(@b6, @i, 1)) ^ UNICODE(substring(@c6, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a7)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d7 = @d7 + NCHAR(UNICODE(substring(@a7, @i, 1)) ^ (UNICODE(substring(@b7, @i, 1)) ^ UNICODE(substring(@c7, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a8)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d8 = @d8 + NCHAR(UNICODE(substring(@a8, @i, 1)) ^ (UNICODE(substring(@b8, @i, 1)) ^ UNICODE(substring(@c8, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a9)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d9 = @d9 + NCHAR(UNICODE(substring(@a9, @i, 1)) ^ (UNICODE(substring(@b9, @i, 1)) ^ UNICODE(substring(@c9, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a0)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d0 = @d0 + NCHAR(UNICODE(substring(@a0, @i, 1)) ^ (UNICODE(substring(@b0, @i, 1)) ^ UNICODE(substring(@c0, @i, 1))))
SET @i=@i+1
END
if @Replace = 0
Begin
-- Output the unencrypted stored procedure to the screen
select @d1 as 'Unencrypted Stored Procedure'
select @d2
select @d3
select @d4
select @d5
select @d6
select @d7
select @d8
select @d9
select @d0
-- Output any permissions that were on the encrypted stored procedure
Select @Perm as 'Permissions'
End
Else
Begin
-- Drop the encrypted stored procedure
Exec('Drop Procedure '+ @spName)
-- Remove the 'WITH ENCRYPTION' command from the stored procedure
Set @d1 = Replace(@d1, 'WITH ENCRYPTION', '')
-- Create the unencrypted stored procedure
Exec(@d1 + @d2 + @d3 + @d4 + @d5 + @d6 + @d7 + @d8 + @d9 + @d0)
-- Apply any permissions that were on the encrypted stored procedure
Exec(@Perm)
End
Go
drop procedure dbo.spDecryptSP
GO
Create procedure dbo.spDecryptSP
@spName varchar(50),
@Replace bit = 0
As
/*
Developer: Jonathan Spinks
Date: 24/07/03
Description: Decrypts SQL 2000 stored procedures
Inputs:
@spName = the name of the stored procedure you wish to decrypt
@Replace = 0 or 1. 0 if you wish to display the unencrypted sp
1 if you wish to replace the encrypted with the unencrypted sp
If this procedure returns "<@spName> is to large to decrypt"
this stored procedure can be modified to decrypt it.
Your starting point is to check out how many rows are returned
in the syscomments table for the stored procedures object_id.
If you just wish to display the sp then ensure that your result
pane is turned to 'Results in Text'.
In Query analyser (2k) Query => 'Results in Text'.
If your returned information looks 'cut short' first check
that your i_SQL query window is returning the entire string.
In Query analyser (2k) Tools => Options, Results tab,
Maximum characters per column = 8000.
Happy decrypting
Original idea: shoeboy <shoeboy@adequacy.org>
Adapted by: Joseph Gama Copyright © 1999-2002 SecurityFocus
Adapted Source: http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=505&lngWId=5
Enhanced by: Jonathan Spinks Copyright © 2003 I.S. Software Developments. WASH
*/
DECLARE
@a1 nvarchar(4000), @b1 nvarchar(4000), @c1 nvarchar(4000), @d1 nvarchar(4000),
@a2 nvarchar(4000), @b2 nvarchar(4000), @c2 nvarchar(4000), @d2 nvarchar(4000),
@a3 nvarchar(4000), @b3 nvarchar(4000), @c3 nvarchar(4000), @d3 nvarchar(4000),
@a4 nvarchar(4000), @b4 nvarchar(4000), @c4 nvarchar(4000), @d4 nvarchar(4000),
@a5 nvarchar(4000), @b5 nvarchar(4000), @c5 nvarchar(4000), @d5 nvarchar(4000),
@a6 nvarchar(4000), @b6 nvarchar(4000), @c6 nvarchar(4000), @d6 nvarchar(4000),
@a7 nvarchar(4000), @b7 nvarchar(4000), @c7 nvarchar(4000), @d7 nvarchar(4000),
@a8 nvarchar(4000), @b8 nvarchar(4000), @c8 nvarchar(4000), @d8 nvarchar(4000),
@a9 nvarchar(4000), @b9 nvarchar(4000), @c9 nvarchar(4000), @d9 nvarchar(4000),
@a0 nvarchar(4000), @b0 nvarchar(4000), @c0 nvarchar(4000), @d0 nvarchar(4000),
@Perm nvarchar(4000),
@i int
if not exists(SELECT * FROM syscomments WHERE id = object_id(@spName))
Begin
print @spName +' cannot be found'
return
End
if exists(SELECT * FROM syscomments WHERE id = object_id(@spName) and encrypted = 0)
Begin
print @spName +' is not encrypted'
return
End
if (SELECT count(*) FROM syscomments WHERE id = object_id(@spName)) > 10
Begin
print @spName +' is to large to decrypt'
return
End
-- Get a list of the current permissions on the encrypted stored procedure
declare curPerm cursor fast_forward for
select '['+ u.name +']' as name, p.actadd, p.actmod
from dbo.syspermissions p inner join dbo.sysusers u
On p.grantee = u.uid
where p.id = object_id(@spName)
open curPerm
Set @Perm = ''
while 1 = 1
begin
declare @name sysname,
@actadd smallint,
@actmod smallint
fetch next from curPerm into @name, @actadd, @actmod
if @@fetch_status <> 0
break
-- For each permission in the list construct a GRANT or DENY command
if @actadd & 32 = 32
Set @Perm = @Perm +'GRANT EXECUTE ON '+ @spName +' TO '+ @name +char(13)+char(10)+'Go'+char(13)+char(10)
else if @actmod & 32 = 32
Set @Perm = @Perm +'DENY EXECUTE ON '+ @spName +' TO '+ @name +char(13)+char(10)+'Go'+char(13)+char(10)
end
close curPerm
deallocate curPerm
-- Get encrypted stored procedure
SELECT @a1=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 1
SELECT @a2=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 2
SELECT @a3=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 3
SELECT @a4=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 4
SELECT @a5=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 5
SELECT @a6=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 6
SELECT @a7=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 7
SELECT @a8=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 8
SELECT @a9=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 9
SELECT @a0=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 10
-- Create blank stored procedure
SET @b1='ALTER PROCEDURE '+ @spName +' WITH ENCRYPTION AS '+ REPLICATE('-', Len(@a1))
SET @b2=REPLICATE(N'-', len(@a2))
SET @b3=REPLICATE(N'-', len(@a3))
SET @b4=REPLICATE(N'-', len(@a4))
SET @b5=REPLICATE(N'-', len(@a5))
SET @b6=REPLICATE(N'-', len(@a6))
SET @b7=REPLICATE(N'-', len(@a7))
SET @b8=REPLICATE(N'-', len(@a8))
SET @b9=REPLICATE(N'-', len(@a9))
SET @b0=REPLICATE(N'-', len(@a0))
-- Wrap in transaction so original stored procedure can be restored
Begin transaction ReplaceSP
Execute (@b1 + @b2 + @b3 + @b4 + @b5 + @b6 + @b7 + @b8 + @b9 + @b0)
-- Get blank encrypted stored procedure
SELECT @c1=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 1
SELECT @c2=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 2
SELECT @c3=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 3
SELECT @c4=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 4
SELECT @c5=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 5
SELECT @c6=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 6
SELECT @c7=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 7
SELECT @c8=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 8
SELECT @c9=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 9
SELECT @c0=ctext FROM syscomments WHERE id = object_id(@spName) and colid = 10
If @Replace = 0
Rollback Transaction ReplaceSP
Else
Commit Transaction ReplaceSP
SET @b1='CREATE PROCEDURE '+ @spName +' WITH ENCRYPTION AS '+ REPLICATE('-', Len(@a1))
-- initalise the output variables
Set @d1 = ''
Set @d2 = ''
Set @d3 = ''
Set @d4 = ''
Set @d5 = ''
Set @d6 = ''
Set @d7 = ''
Set @d8 = ''
Set @d9 = ''
Set @d0 = ''
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a1)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d1 = @d1 + NCHAR(UNICODE(substring(@a1, @i, 1)) ^ (UNICODE(substring(@b1, @i, 1)) ^ UNICODE(substring(@c1, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a2)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d2 = @d2 + NCHAR(UNICODE(substring(@a2, @i, 1)) ^ (UNICODE(substring(@b2, @i, 1)) ^ UNICODE(substring(@c2, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a3)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d3 = @d3 + NCHAR(UNICODE(substring(@a3, @i, 1)) ^ (UNICODE(substring(@b3, @i, 1)) ^ UNICODE(substring(@c3, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a4)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d4 = @d4 + NCHAR(UNICODE(substring(@a4, @i, 1)) ^ (UNICODE(substring(@b4, @i, 1)) ^ UNICODE(substring(@c4, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a5)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d5 = @d5 + NCHAR(UNICODE(substring(@a5, @i, 1)) ^ (UNICODE(substring(@b5, @i, 1)) ^ UNICODE(substring(@c5, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a6)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d6 = @d6 + NCHAR(UNICODE(substring(@a6, @i, 1)) ^ (UNICODE(substring(@b6, @i, 1)) ^ UNICODE(substring(@c6, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a7)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d7 = @d7 + NCHAR(UNICODE(substring(@a7, @i, 1)) ^ (UNICODE(substring(@b7, @i, 1)) ^ UNICODE(substring(@c7, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a8)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d8 = @d8 + NCHAR(UNICODE(substring(@a8, @i, 1)) ^ (UNICODE(substring(@b8, @i, 1)) ^ UNICODE(substring(@c8, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a9)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d9 = @d9 + NCHAR(UNICODE(substring(@a9, @i, 1)) ^ (UNICODE(substring(@b9, @i, 1)) ^ UNICODE(substring(@c9, @i, 1))))
SET @i=@i+1
END
-- Set the counter to one
Set @i = 1
WHILE @i < datalength(@a0)/2 + 1
BEGIN
-- (unencrypted original) = (encrypted original) XOR (unencrypted blank) XOR (encrypted blank)
SET @d0 = @d0 + NCHAR(UNICODE(substring(@a0, @i, 1)) ^ (UNICODE(substring(@b0, @i, 1)) ^ UNICODE(substring(@c0, @i, 1))))
SET @i=@i+1
END
if @Replace = 0
Begin
-- Output the unencrypted stored procedure to the screen
select @d1 as 'Unencrypted Stored Procedure'
select @d2
select @d3
select @d4
select @d5
select @d6
select @d7
select @d8
select @d9
select @d0
-- Output any permissions that were on the encrypted stored procedure
Select @Perm as 'Permissions'
End
Else
Begin
-- Drop the encrypted stored procedure
Exec('Drop Procedure '+ @spName)
-- Remove the 'WITH ENCRYPTION' command from the stored procedure
Set @d1 = Replace(@d1, 'WITH ENCRYPTION', '')
-- Create the unencrypted stored procedure
Exec(@d1 + @d2 + @d3 + @d4 + @d5 + @d6 + @d7 + @d8 + @d9 + @d0)
-- Apply any permissions that were on the encrypted stored procedure
Exec(@Perm)
End
Go
SQL - Deleta Estatisticas
declare @tab_nome varchar(255)
declare @tab_statistic varchar(255)
declare @sql_str varchar(255)
declare @db_nome varchar(255)
select @db_nome=name from master..sysdatabases where dbid=(select dbid from master..sysprocesses where spid=@@SPID)
set @sql_str= 'sp_dboption ''' + @db_nome + ''',''auto create statistics'',''false'''
exec (@sql_str)
set @sql_str= 'sp_dboption ''' + @db_nome + ''',''auto update statistics'',''false'''
exec (@sql_str)
checkpoint
declare cur cursor for SELECT object_name(id),name FROM SYSINDEXES WHERE NAME LIKE '_WA_Sys%'
set nocount on
open cur
fetch next from cur into @tab_nome,@tab_statistic
while(@@fetch_status=0)
begin
set @sql_str='drop statistics ' + @tab_nome + '.' + @tab_statistic
print @sql_str
exec (@sql_str)
fetch next from cur into @tab_nome,@tab_statistic
end
close cur
deallocate cur
set nocount off
declare @tab_statistic varchar(255)
declare @sql_str varchar(255)
declare @db_nome varchar(255)
select @db_nome=name from master..sysdatabases where dbid=(select dbid from master..sysprocesses where spid=@@SPID)
set @sql_str= 'sp_dboption ''' + @db_nome + ''',''auto create statistics'',''false'''
exec (@sql_str)
set @sql_str= 'sp_dboption ''' + @db_nome + ''',''auto update statistics'',''false'''
exec (@sql_str)
checkpoint
declare cur cursor for SELECT object_name(id),name FROM SYSINDEXES WHERE NAME LIKE '_WA_Sys%'
set nocount on
open cur
fetch next from cur into @tab_nome,@tab_statistic
while(@@fetch_status=0)
begin
set @sql_str='drop statistics ' + @tab_nome + '.' + @tab_statistic
print @sql_str
exec (@sql_str)
fetch next from cur into @tab_nome,@tab_statistic
end
close cur
deallocate cur
set nocount off
SQL - Performance
Dicas de Performance no Servidor do SQL Server
1. Servidor Dedicado
Como hoje em dia há uma grande quantidade de programas do tipo Client/Server (inclusive o SQL Server) e o ideal seria dedicarmos uma máquina somente para rodar o serviço de banco de dados. Programas servidores de Web, FTP, e-mail, proxy, DNS, DHCP, Impressão, Source Safe, Telnet, Firewall, etc.., devem estar preferencialmente rodando em outra máquina que não seja a do banco de dados, pois estes serviços estarão competindo pelos mesmos recursos de hardware com o serviço do banco de dados.
Eu sei, eu sei, nem sempre temos o luxo de possuir uma máquina que seja dedicada ao banco, mas sempre que possível procure limitar ao máximo o número de serviços que atendem a solicitação de usuários rodando ao mesmo tempo, principalmente em servidores de produção.
Também é importante dizer que todo o acesso via rede ao servidor de banco de dados deve ser extremamente limitado. Algumas empresas somente ligam o cabo de rede do servidor de banco de dados diretamente ao servidor de aplicação restringindo ainda mais o acesso ao servidor de banco de dados. Nem acesso a Internet é aconselhável se colocar em um servidor de banco de dados dedicado.
2. Anti-Vírus
Bom, para começar, devemos tocar cuidado com qualquer programa que está rodando ma mesma máquina que o servidor. Muitos programas parecem inofensivos a primeira vista, mas podem ter certeza quem eles vão roubar ciclos do processador quando estiverem rodando.
Os Anti-vírus são um caso a parte. Com a crescente ameaça destas pragas virtuais é muito difícil ficar livre de se pegar um vírus. Eu recomendo que se tenha instalado um bom anti-vírus no servidor de banco de dados mas procurem evitar ao máximo que este anti-vírus fique rodando como um serviço, pois neste caso a cada arquivo aberto pelo sistema operacional, uma varredura é feita degradando muito a performance e competindo com o banco de dados no acesso ao disco rígido da máquina, que é uma operação efetuada várias vezes pelo o banco de dados.
Veja bem pessoal, eu não estou dizendo que não devemos proteger nosso servidor com um anti-vírus. Mas também não podemos deixar que este programa não essencial atrapalhe a performance do banco de dados. É somente uma questão de conhecer um pouco sobre o anti-vírus escolhido e procurar desabilitar alguns recursos do mesmo que podem causar perda de performance no servidor.
3. Programas tipo Client
Este tópico me lembra uma ocasião em que fui verificar um problema na máquina de um amigo. Na máquina dele tinha tanto programa rodando ao mesmo tempo minimizado que a barra de tarefas (system tray) do Windows dele estava preenchida com ícones até a metade da tela! E olha que ele estava rodando com uma resolução pequena e com um monitor de 17 polegadas!
Falando sério agora, um servidor de banco de dados é uma máquina que não deve ser utilizada para brincadeira. Programas como ICQ, Morpheus, Kazaa, Real Audio, tradutor inglês-português, descanso de tela, driver do mouse ou teclado especial, etc..., devem ser COMPLETAMENTE eliminados do servidor. Geralmente estes programas são carregados no momento da inicialização do servidor (boot) e podem ser desabilitados de diversas maneiras. Eu costumo dizer que na barra de tarefas do Windows, ao lado do relógio só o mostrador de tráfego de rede e o gerenciador de tarefas (task manager), com a medição da performance, devem ser vistos.
Também é bom dar uma verificada em programas client como o do proxy, do firewall, do DNS, etc. Alguns destes programas realmente são necessários, mas deve-se fazer uma boa revisão no que deve estar instalado e rodando no servidor.
Eu particularmente procuro instalar o mínimo de programas no servidor. Nem o Office eu recomendo a instalação (mesmo por que ele consome muito espaço na HD) e também nenhum programa client de e-mail.
Resumindo: se você quiser um computador para rodar aquele server do Counter Strike, mesmo que seja somente durante o almoço, é melhor procurar outra máquina que não a do banco de dados!
4. Serviços
Também é extremamente importante uma boa olhada nos serviços que estão rodando no servidor. Podemos obter a lista dos serviços através do Painel de Controle (Control Panel), Ferramentas Administrativas (Administrative Tools) e no ícone Serviços (Services).
Se preocupe somente com aqueles marcados para a inicialização automática. Abaixo mostro alguns serviços (o nome deles está em português) que podem ser desabilitados, poupando memória. Mas atenção: sempre que foi fazer uma modificação no estado de um serviço procure verificar quais os efeitos colaterais que esta ação causará!
* Agendador de tarefas – Geralmente utilizado para a execução de programas como o Defrag ou o ScanDisk periodicamente. Pode ser desabilitado sem problemas.
* Spooler de impressão – Se você não deseja imprimir a partir desta estação, desabilite este serviço.
* Localizador de computadores – Geralmente não precisamos deste serviço que serve somente para localizar computadores na rede.
* Serviço RunAs – Somente habilite este serviço se for utilizar o utilitário de console RunAs. Se você nem sabe o que é isso, desabilite este serviço.
* Windows Installer – Confesso que este serviço as vezes me irrita! Em um servidor de banco de dados dedicado, onde raramente são instalados novos softwares, podemos desabilitar este serviço para não receber aquelas irritantes janelas de aviso de instalação...
* Gerenciador de discos lógicos e Serviço administrativo do gerenciador de disco lógico – Estes dois serviços servem somente para a formatação/alteração de uma partição dos discos rígidos do servidor. Como estes serviços somente são utilizados uma vez na vida e outra na morte, podemos desabilitá-los.
Aqui quero fazer um aviso importante: geralmente mexer em alguns serviços do Windows que não sabemos para que servem pode ser um mau negócio. Principalmente se for um serviço essencial... Por isso, todo cuidado é pouco! E sempre que um serviço que está rodando lhe parecer estranho, se informe pois pode ser até algo colocado por um Hacker!
Todos os serviços que forem desabilitados podem ser habilitados normalmente e vice e versa.
5. Verificando os processos.
Podemos ver quais processos estão rodando atualmente no Windows, assim como quanto de memória e de processador está sendo gasto em cada processo, através do Gerenciador de Tarefas (task manager) na aba processos. Para a galera que vem do Linux, é quase a mesma coisa que o comando ps. É muito importante sabermos o que está rodando no momento na máquina e ficarmos ligados nos processos, inclusive alterando a prioridade ou matar o processo, caso este esteja travado. Geralmente se um processo ficar ocupando muito do processador por um bom período de tempo, é provável que ele esteja “travado” e onerando a performance de todo o sistema.
6. Recursos do servidor
Abaixo eu mostro algumas dicas sobre como otimizar o uso de recursos da máquina servidora pelo Windows:
* Resolução da Máquina
O servidor de banco de dados não é uma máquina que deve ser utilizada diretamente na estação (geralmente o DBA faz administração remota, via Terminal Services ou VNC). Logo, não há razão para utilizar uma resolução boa, tanto de cor como de tamanho. Aconselho 800x600 com 16 cores, no máximo, para conservar memória.
* Compartilhamento
Procure evitar também muitos compartilhamentos de recursos. Se possível, remova os compartilhamentos padrão (como o C$ ou D$) como medida de segurança.
* Som
Elimine qualquer aplicativo/driver que necessite de som do servidor. Na maioria dos casos, nem há uma placa de som no servidor.
* Ícones no DeskTop
Diminua ao máximo a quantidade de ícones no Desktop, pois cada um deles ocupa a memória de vídeo e espaço em disco
* Proteção de Tela
Como não devemos utilizar a estação do servidor diretamente para acessá-lo (salvo em casos extremos), podemos desabilitar a proteção de tela. Uma boa idéia também é desligar o monitor e acabar economizando energia. É interessante também nem logarmos a estação, uma vez que o serviço do banco de dados pode ser configurado para a inicialização automática.
* Opções de Desempenho
Existe uma opção no Windows que dá prioridade aos programas que estão funcionando em background, como é o caso do SQL Server. Para habilitá-la vá em propriedades do sistema, escolha a aba avançado e clique no botão Opções de Desempenho. Escolha o check box Serviços em Segundo plano.
Fiquem atentos também ao valor estabelecido para a memória virtual do Windows.
* Internet e E-mail
Como já mencionado anteriormente, procure evitar que o servidor de banco de dados possua acesso à Internet e ao servidor de e-mail, para evitar uma brecha de segurança e para que não haja risco de contaminação com vírus via e-mail.
* IP Fixo
Como o servidor de banco de dados raramente deve ser reinicializado (a não ser em casos extremamente necessários) procure colocar um IP fixo no mesmo, evitando assim que o servidor faça um acesso para a obtenção de um IP dinâmico ao servidor de DHCP.
7. Dispositivos
Sempre que possível, procure não conectar nenhum dispositivo que não seja realmente necessário para o funcionamento do servidor, seja ele via porta serial, paralela, USB ou interno. Lembre-se também que a cada novo dispositivo plugado no computador um driver deve ser carregado na memória, consumindo assim mais recursos. Abaixo eu mostro uma lista de dispositivos que não são recomendados em um servidor de banco de dados:
* Placa de Som (Quem gostaria de ouvir música no servidor de banco de dados?)
* Placa de Vídeo 3D
* Scanner
* Zip Drive
* Impressora
* Câmera Digital
* Gravador de CD
* DVD
Por outro lado, é extremamente interessante que o servidor possua um leitor de CD comum (para instalação do software) e um dispositivo para backup de grande quantidade como um leitor de fita DAT, por exemplo. Isto sem contar a essencial placa de rede.
Dica retirada do site
http://www.imasters.com.br
1. Servidor Dedicado
Como hoje em dia há uma grande quantidade de programas do tipo Client/Server (inclusive o SQL Server) e o ideal seria dedicarmos uma máquina somente para rodar o serviço de banco de dados. Programas servidores de Web, FTP, e-mail, proxy, DNS, DHCP, Impressão, Source Safe, Telnet, Firewall, etc.., devem estar preferencialmente rodando em outra máquina que não seja a do banco de dados, pois estes serviços estarão competindo pelos mesmos recursos de hardware com o serviço do banco de dados.
Eu sei, eu sei, nem sempre temos o luxo de possuir uma máquina que seja dedicada ao banco, mas sempre que possível procure limitar ao máximo o número de serviços que atendem a solicitação de usuários rodando ao mesmo tempo, principalmente em servidores de produção.
Também é importante dizer que todo o acesso via rede ao servidor de banco de dados deve ser extremamente limitado. Algumas empresas somente ligam o cabo de rede do servidor de banco de dados diretamente ao servidor de aplicação restringindo ainda mais o acesso ao servidor de banco de dados. Nem acesso a Internet é aconselhável se colocar em um servidor de banco de dados dedicado.
2. Anti-Vírus
Bom, para começar, devemos tocar cuidado com qualquer programa que está rodando ma mesma máquina que o servidor. Muitos programas parecem inofensivos a primeira vista, mas podem ter certeza quem eles vão roubar ciclos do processador quando estiverem rodando.
Os Anti-vírus são um caso a parte. Com a crescente ameaça destas pragas virtuais é muito difícil ficar livre de se pegar um vírus. Eu recomendo que se tenha instalado um bom anti-vírus no servidor de banco de dados mas procurem evitar ao máximo que este anti-vírus fique rodando como um serviço, pois neste caso a cada arquivo aberto pelo sistema operacional, uma varredura é feita degradando muito a performance e competindo com o banco de dados no acesso ao disco rígido da máquina, que é uma operação efetuada várias vezes pelo o banco de dados.
Veja bem pessoal, eu não estou dizendo que não devemos proteger nosso servidor com um anti-vírus. Mas também não podemos deixar que este programa não essencial atrapalhe a performance do banco de dados. É somente uma questão de conhecer um pouco sobre o anti-vírus escolhido e procurar desabilitar alguns recursos do mesmo que podem causar perda de performance no servidor.
3. Programas tipo Client
Este tópico me lembra uma ocasião em que fui verificar um problema na máquina de um amigo. Na máquina dele tinha tanto programa rodando ao mesmo tempo minimizado que a barra de tarefas (system tray) do Windows dele estava preenchida com ícones até a metade da tela! E olha que ele estava rodando com uma resolução pequena e com um monitor de 17 polegadas!
Falando sério agora, um servidor de banco de dados é uma máquina que não deve ser utilizada para brincadeira. Programas como ICQ, Morpheus, Kazaa, Real Audio, tradutor inglês-português, descanso de tela, driver do mouse ou teclado especial, etc..., devem ser COMPLETAMENTE eliminados do servidor. Geralmente estes programas são carregados no momento da inicialização do servidor (boot) e podem ser desabilitados de diversas maneiras. Eu costumo dizer que na barra de tarefas do Windows, ao lado do relógio só o mostrador de tráfego de rede e o gerenciador de tarefas (task manager), com a medição da performance, devem ser vistos.
Também é bom dar uma verificada em programas client como o do proxy, do firewall, do DNS, etc. Alguns destes programas realmente são necessários, mas deve-se fazer uma boa revisão no que deve estar instalado e rodando no servidor.
Eu particularmente procuro instalar o mínimo de programas no servidor. Nem o Office eu recomendo a instalação (mesmo por que ele consome muito espaço na HD) e também nenhum programa client de e-mail.
Resumindo: se você quiser um computador para rodar aquele server do Counter Strike, mesmo que seja somente durante o almoço, é melhor procurar outra máquina que não a do banco de dados!
4. Serviços
Também é extremamente importante uma boa olhada nos serviços que estão rodando no servidor. Podemos obter a lista dos serviços através do Painel de Controle (Control Panel), Ferramentas Administrativas (Administrative Tools) e no ícone Serviços (Services).
Se preocupe somente com aqueles marcados para a inicialização automática. Abaixo mostro alguns serviços (o nome deles está em português) que podem ser desabilitados, poupando memória. Mas atenção: sempre que foi fazer uma modificação no estado de um serviço procure verificar quais os efeitos colaterais que esta ação causará!
* Agendador de tarefas – Geralmente utilizado para a execução de programas como o Defrag ou o ScanDisk periodicamente. Pode ser desabilitado sem problemas.
* Spooler de impressão – Se você não deseja imprimir a partir desta estação, desabilite este serviço.
* Localizador de computadores – Geralmente não precisamos deste serviço que serve somente para localizar computadores na rede.
* Serviço RunAs – Somente habilite este serviço se for utilizar o utilitário de console RunAs. Se você nem sabe o que é isso, desabilite este serviço.
* Windows Installer – Confesso que este serviço as vezes me irrita! Em um servidor de banco de dados dedicado, onde raramente são instalados novos softwares, podemos desabilitar este serviço para não receber aquelas irritantes janelas de aviso de instalação...
* Gerenciador de discos lógicos e Serviço administrativo do gerenciador de disco lógico – Estes dois serviços servem somente para a formatação/alteração de uma partição dos discos rígidos do servidor. Como estes serviços somente são utilizados uma vez na vida e outra na morte, podemos desabilitá-los.
Aqui quero fazer um aviso importante: geralmente mexer em alguns serviços do Windows que não sabemos para que servem pode ser um mau negócio. Principalmente se for um serviço essencial... Por isso, todo cuidado é pouco! E sempre que um serviço que está rodando lhe parecer estranho, se informe pois pode ser até algo colocado por um Hacker!
Todos os serviços que forem desabilitados podem ser habilitados normalmente e vice e versa.
5. Verificando os processos.
Podemos ver quais processos estão rodando atualmente no Windows, assim como quanto de memória e de processador está sendo gasto em cada processo, através do Gerenciador de Tarefas (task manager) na aba processos. Para a galera que vem do Linux, é quase a mesma coisa que o comando ps. É muito importante sabermos o que está rodando no momento na máquina e ficarmos ligados nos processos, inclusive alterando a prioridade ou matar o processo, caso este esteja travado. Geralmente se um processo ficar ocupando muito do processador por um bom período de tempo, é provável que ele esteja “travado” e onerando a performance de todo o sistema.
6. Recursos do servidor
Abaixo eu mostro algumas dicas sobre como otimizar o uso de recursos da máquina servidora pelo Windows:
* Resolução da Máquina
O servidor de banco de dados não é uma máquina que deve ser utilizada diretamente na estação (geralmente o DBA faz administração remota, via Terminal Services ou VNC). Logo, não há razão para utilizar uma resolução boa, tanto de cor como de tamanho. Aconselho 800x600 com 16 cores, no máximo, para conservar memória.
* Compartilhamento
Procure evitar também muitos compartilhamentos de recursos. Se possível, remova os compartilhamentos padrão (como o C$ ou D$) como medida de segurança.
* Som
Elimine qualquer aplicativo/driver que necessite de som do servidor. Na maioria dos casos, nem há uma placa de som no servidor.
* Ícones no DeskTop
Diminua ao máximo a quantidade de ícones no Desktop, pois cada um deles ocupa a memória de vídeo e espaço em disco
* Proteção de Tela
Como não devemos utilizar a estação do servidor diretamente para acessá-lo (salvo em casos extremos), podemos desabilitar a proteção de tela. Uma boa idéia também é desligar o monitor e acabar economizando energia. É interessante também nem logarmos a estação, uma vez que o serviço do banco de dados pode ser configurado para a inicialização automática.
* Opções de Desempenho
Existe uma opção no Windows que dá prioridade aos programas que estão funcionando em background, como é o caso do SQL Server. Para habilitá-la vá em propriedades do sistema, escolha a aba avançado e clique no botão Opções de Desempenho. Escolha o check box Serviços em Segundo plano.
Fiquem atentos também ao valor estabelecido para a memória virtual do Windows.
* Internet e E-mail
Como já mencionado anteriormente, procure evitar que o servidor de banco de dados possua acesso à Internet e ao servidor de e-mail, para evitar uma brecha de segurança e para que não haja risco de contaminação com vírus via e-mail.
* IP Fixo
Como o servidor de banco de dados raramente deve ser reinicializado (a não ser em casos extremamente necessários) procure colocar um IP fixo no mesmo, evitando assim que o servidor faça um acesso para a obtenção de um IP dinâmico ao servidor de DHCP.
7. Dispositivos
Sempre que possível, procure não conectar nenhum dispositivo que não seja realmente necessário para o funcionamento do servidor, seja ele via porta serial, paralela, USB ou interno. Lembre-se também que a cada novo dispositivo plugado no computador um driver deve ser carregado na memória, consumindo assim mais recursos. Abaixo eu mostro uma lista de dispositivos que não são recomendados em um servidor de banco de dados:
* Placa de Som (Quem gostaria de ouvir música no servidor de banco de dados?)
* Placa de Vídeo 3D
* Scanner
* Zip Drive
* Impressora
* Câmera Digital
* Gravador de CD
* DVD
Por outro lado, é extremamente interessante que o servidor possua um leitor de CD comum (para instalação do software) e um dispositivo para backup de grande quantidade como um leitor de fita DAT, por exemplo. Isto sem contar a essencial placa de rede.
Dica retirada do site
http://www.imasters.com.br
SQL - Dicionário de Dados
select SUBSTRING (TABLE_NAME,1,40) TABLE_NAME, SUBSTRING (COLUMN_NAME,1,40) COLUMN_NAME, IS_NULLABLE,
CASE DATA_TYPE
WHEN 'varchar' then 'varchar(' + convert(varchar,CHARACTER_MAXIMUM_LENGTH) + ')'
WHEN 'varchar' then 'char(' + convert(varchar,CHARACTER_MAXIMUM_LENGTH) + ')'
else SUBSTRING(DATA_TYPE,1,25)
END AS DATA_TYPE, gcampos.DESCRICAO
from information_schema.columns c, gcampos
where gcampos.tabela = c.TABLE_NAME
and gcampos.coluna = c.COLUMN_NAME
AND C.TABLE_NAME = 'FCFODEF'
order by C.TABLE_NAME,C.ORDINAL_POSITION
CASE DATA_TYPE
WHEN 'varchar' then 'varchar(' + convert(varchar,CHARACTER_MAXIMUM_LENGTH) + ')'
WHEN 'varchar' then 'char(' + convert(varchar,CHARACTER_MAXIMUM_LENGTH) + ')'
else SUBSTRING(DATA_TYPE,1,25)
END AS DATA_TYPE, gcampos.DESCRICAO
from information_schema.columns c, gcampos
where gcampos.tabela = c.TABLE_NAME
and gcampos.coluna = c.COLUMN_NAME
AND C.TABLE_NAME = 'FCFODEF'
order by C.TABLE_NAME,C.ORDINAL_POSITION
SQL - Functions (modelo)
CREATE Function AchaDescricaoConta(var_codcoligada number,
var_contafolha varchar,
var_codigointegracao varchar)
return varchar
as
VAR_CONTACONTABIL varchar2(40);
VAR_DESCRICAO varchar2(40);
begin
select contasaldus into VAR_CONTACONTABIL
from pcontas
where codcoligada=var_codcoligada
and codcolconta=var_codcoligada
and grpconta=var_contafolha
and integrcfunc=var_codigointegracao;
select descricao into VAR_DESCRICAO
from cconta
where codcoligada=var_codcoligada
and codconta=VAR_CONTACONTABIL ;
return(VAR_DESCRICAO);
end;
var_contafolha varchar,
var_codigointegracao varchar)
return varchar
as
VAR_CONTACONTABIL varchar2(40);
VAR_DESCRICAO varchar2(40);
begin
select contasaldus into VAR_CONTACONTABIL
from pcontas
where codcoligada=var_codcoligada
and codcolconta=var_codcoligada
and grpconta=var_contafolha
and integrcfunc=var_codigointegracao;
select descricao into VAR_DESCRICAO
from cconta
where codcoligada=var_codcoligada
and codconta=VAR_CONTACONTABIL ;
return(VAR_DESCRICAO);
end;
Assinar:
Postagens (Atom)