Showing posts with label Command Line. Show all posts
Showing posts with label Command Line. Show all posts

Monday, June 27, 2016

Códigos de status HTTP no IIS 7.0 e no IIS 7.5

Códigos de status HTTP no IIS 7.0 e no IIS 7.5
Quando tentamos acessar o conteúdo de um site que esteja hospedado em um servidor Windows 2008 / R2, o IIS 7.0 retorna um código numérico que indica o status da resposta. O código de status HTTP é registrado no log do IIS.
Além disso, o código de status HTTP pode ser exibido no navegador do cliente.
O código de status HTTP pode indicar se uma solicitação teve êxito ou não, podendo revelar a razão exata caso a solicitação não tenha sucesso.
Códigos de erro

1xx - Códigos informativos
Esses códigos de status HTTP indicam uma resposta provisória, o navegador do usuário recebe uma ou mais resposta com o código 1xx.

100 - Continue.
101 - Alterando protocolos.


2xx - Sucesso
Este código indica que o servidor aceitou com êxito a solicitação.

200 - OK. A solicitação do cliente foi bem-sucedida.
201 - Criado.
202 - Aceitos.
203 - Não autoritativos informações.
204 - Sem conteúdo.
205 - Redefina conteúdo.
206 - Conteúdo parcial.


3xx - Redirecionamento
Este código de status indica que o navegador do cliente deve realizar mais ações para atender à solicitação. Por exemplo, o navegador do cliente que solicitar uma página diferente no servidor ou o usuário terá de utilizar um proxy para fazer a solicitação ao servidor.

301 - Movido permanentemente.
302 - Objeto movido.
304 - Não modificado.
307 - Temporariamente redirecionado.


400 - Solicitação Inválida
A solicitação não pôde ser entendida pelo servidor devido um erro de sintaxe, neste caso é necessário analisar a aplicação requisitada.

400.1 - Cabeçalho de destino inválido.
400.2 - Rodapé do cabeçalho invalido.
400.3 - Cabeçalho inválido.
400.4 - Impossível sobrescrever cabeçalho.
400.5 - Impossível traduzir o cabeçalho.
400.6 - Corpo de solicitação inválida.
400.7 - Comprimento de conteúdo inválido.
400.8 - Tempo limite inválido.
400.9 - Token de bloqueio inválida.


401 - Acesso negado
O IIS 7.0 define vários códigos que indicam uma causa mais específica de um erro 401. Os seguintes códigos específicos são exibidos no navegador do cliente, mas não são exibidos no log do IIS:

401.1 - Falha no logon.
401.2 - Falha no logon devido a configuração do servidor.
401.3 - Não autorizado devido a ACL no recurso.
401.4 - Não autorizado pelo filtro.
401.5 - Não autorizado pelo aplicativo ISAPI/CGI.

403 - Proibido
O IIS 7.0 define os seguintes códigos que indicam uma causa mais específica de um erro 403:

403.1 - Acesso de execução proibido.
403.2 - Acesso de leitura proibido.
403.3 - Acesso de escrita proibido.
403.4 - SSL solicitado.
403.5 - SSL 128 solicitado.
403.6 - Endereço IP rejeitado.
403.7 - Certificado de cliente necessário.
403.8 - Acesso ao site negado.
403.9 - Proibido: número excessivo de clientes está tentando se conectar ao servidor Web.
403.10 - Proibido: servidor Web é configurado para negar acesso de execução.
403.11 - Proibido: senha foi alterada.
403.12 - Acesso negado ao mapeador.
403.13 - Certificado de cliente revogado.
403.14 - Listagem de diretórios negada.
403.15 - Proibido: licenças de acesso excedeu os limites do servidor Web.
403.16 - Certificado não é confiável ou é inválido.
403.17 - Certificado expirou ou ainda não é válido.
403.18 - Não é possível executar a URL solicitada no pool de aplicativos atual.
403.19 - Não é possível executar aplicativos CGI para o cliente neste pool de aplicativos.
403.20 - Proibido: falha de logon do Passport.
403.21 - Proibido: acesso negado de origem.
403.22 - Proibido: Multiplas requisições negada.
403.502 - Proibido: muitas solicitações do mesmo IP do cliente; Atingido o limite de restrição de IP dinâmico.


404 - Não encontrado
O IIS 7.0 define os seguintes códigos que indicam uma causa mais específica de um erro 404:

404.0 - Não encontrado.
404.1 - Site não encontrado.
404.2 - De restrição ISAPI ou CGI.
404.3 - Restrição de tipo MIME.
404.4 - Nenhum manipulador configurado.
404.5 - Negado pela configuração de filtragem de solicitação.
404.6 - Verbo negado.
404.7 - Extensão de arquivo negado.
404.8 - Namespace oculto.
404.9 - Atributo de arquivo ocultada.
404.10 - Cabeçalho de solicitação muito longo.
404.11 - A solicitação contém a seqüência de escape dupla.
404.12 - A solicitação contém caracteres de bits alta.
404.13 - Comprimento de conteúdo muito grande.
404.14 - URL de solicitação muito longo.
404.15 - Seqüência de consulta muito longo.
404.16 - Solicitação DAV enviado ao manipulador de arquivo estático.
404.17 - Conteúdo dinâmico mapeado para o manipulador de arquivo estático por meio de um mapeamento de MIME de caractere curinga.
404.18 - Seqüência de Querystring negado.
404.19 - Negadas pela regra de filtragem.
404.20 - Muitos segmentos de URL
405 - Método não permitido.
406 - Navegador do cliente não aceita o tipo MIME da página solicitada.
408 - Esgotado.
412 - Erro na precondition.

500 - Internal Server Error
O IIS 7.0 define os seguintes códigos de que indicam uma causa mais específica de um erro 500:

500.0 - Erro de módulo ou ISAPI.
500.11 - Encerramento do aplicativo no servidor Web.
500.12 - O aplicativo está ocupado reiniciando no servidor Web.
500.13 - Servidor web está muito ocupado.
500.15 - Solicitações diretas para global. asax não são permitidas.
500.19 - Os dados de configuração são inválidos.
500.21 - Módulo não reconhecido.
500.22 - Uma configuração de httpModules ASP.NET não se aplica no modo de canalização gerenciados.
500.23 - Uma configuração httpHandlers do ASP.NET não se aplica no modo de canalização gerenciados.
500.24 - Uma configuração de ASP.NET de representação não se aplica no modo de canalização gerenciados.
500.50 - Erro um reconfiguração ocorreu durante o tratamento de notificação RQ_BEGIN_REQUEST. Ocorreu um erro de execução de regra de entrada ou configuração.
Observação É aqui onde a configuração de regras distribuídas é lida para regras de entrada e saídas.
500.51 - Erro um reconfiguração ocorreu durante o tratamento de notificação GL_PRE_BEGIN_REQUEST. Ocorreu um erro de execução de regra global ou de configuração global.
Observação É aqui onde a configuração de regras globais é lido.
500.52 - Erro um reconfiguração ocorreu durante o tratamento de notificação RQ_SEND_RESPONSE. Ocorreu uma execução de regra de saída.
500.53 - Erro um reconfiguração ocorreu durante o tratamento de notificação RQ_RELEASE_REQUEST_STATE.
Ocorreu um erro de execução de regra de saída. A regra é configurada para ser executada antes que o cache de saída do usuário será atualizado.
500.100 - Erro interno de ASP.

501 - Valores de cabeçalho especificam uma configuração que não está implementada.
502 - Web servidor recebeu uma resposta inválida ao atuar como gateway ou proxy.
O IIS 7.0 define os seguintes códigos de que indicam uma causa mais específica de um erro 502:
502.1 - Tempo limite do aplicativo CGI.
502.2 - Gateway incorreto.
503 - Serviço não disponível.
O IIS 7.0 define os seguintes códigos de que indicam uma causa mais específica do erro 503:
503.0 - Disponível do pool de aplicativos.
503.2 - Limite de solicitações simultâneas excedido.
503.3 - ASP.NET cheio

Wednesday, November 18, 2015

SQLServer [ Check INDEX ]

How do I get a list of all index?


---

SELECT DB_NAME() AS Database_Name
,count (o.name) AS Table_Qtd
FROM sys.indexes i
INNER JOIN sys.objects o ON i.object_id = o.object_id
INNER JOIN sys.schemas sc ON o.schema_id = sc.schema_id
WHERE i.name IS NOT NULL
AND o.type = 'U';

---

SELECT DB_NAME() AS Database_Name
, sc.name AS Schema_Name
, o.name AS Table_Name
,count (o.name) AS Table_Qtd
FROM sys.indexes i
INNER JOIN sys.objects o ON i.object_id = o.object_id
INNER JOIN sys.schemas sc ON o.schema_id = sc.schema_id
WHERE i.name IS NOT NULL
AND o.type = 'U'
GROUP BY o.name , sc.name;

---

SELECT DB_NAME() AS Database_Name
, sc.name AS Schema_Name
, o.name AS Table_Name
, i.name AS Index_Name
, i.type_desc AS Index_Type
FROM sys.indexes i
INNER JOIN sys.objects o ON i.object_id = o.object_id
INNER JOIN sys.schemas sc ON o.schema_id = sc.schema_id
WHERE i.name IS NOT NULL
AND o.type = 'U'
ORDER BY o.name, i.type;




Tuesday, November 3, 2015

Rotinas de manutenção [ Reindexação & Integridade ]


Rotinas


  • Procedimentos padrões para banco de dados (Tarefa de Manutenção);


CHECK DATABASE INTEGRITY:
Executa verificação de integridade dos bancos. Durante essa task são executados os comandos DBCC CHECKCATALOG, DBCC CHECKTABLE e DBCC CHECKALLOC;


REORGANIZE INDEX:
Reordena os índices em tabelas;


UPDATE STATISTICS:
atualiza as estatísticas de consulta às tabelas;


CLEANUP HISTORY:
Remove histórico de informações do banco MSDB, responsável por gerenciar as atividades de manutenção;


REBUILD INDEX:
Dropa os índices atuais e recria novos;


  • Criar usuários específicos por aplicação e suas respectivas permissões;
Usarios: USERSYSTEM, USERAPP, USEREST


  • Gerar relatórios mensais dos bancos de dados para controle interno com foco na ProAtividade;


  • Taxa de crescimento, Taxa de acesso, Error frequentes, verificação da estatísticas entre outros;
Obs: Em ambientes críticos, envolver a equipe de T.I. interna da empresa para dar suporte os processos;



ANALISE DE INDEX SQLSERVER
avg_fragmentation_in_percent value Corrective statement
> 5% and < = 30% ALTER INDEX REORGANIZE
> 30% ALTER INDEX REBUILD WITH (ONLINE = ON)*

SELECT DB_ID() AS [Database ID];
GO

select
object_schema_name(ps.object_id) as ObjectSchema,
object_name (ps.object_id) as ObjectName,
ps.object_id ObjectId,
i.name as IndexName,
'ALTER INDEX ' + i.name + ' ON ' + object_name (ps.object_id) + ' REBUILD ;',
ps.avg_fragmentation_in_percent,
ps.page_count
from sys.dm_db_index_physical_stats(7, null, null, null, null) ps
inner join sys.indexes i
on i.object_id = ps.object_id and
 i.index_id = ps.index_id
where
avg_fragmentation_in_percent > 5 -- reorganize and rebuild
and ps.index_id > 0
order by avg_fragmentation_in_percent desc


LISTAR INDEX E INFO
SELECT
    TableName = t.name,
    IndexName = ind.name,
    IndexId = ind.index_id,
    ColumnId = ic.index_column_id,
    ColumnName = col.name,
    ind.*,
    ic.*,
    col.*,
    'ALTER INDEX ' +  ind.name + ' ON ' + t.name + ' REBUILD WITH (ONLINE=ON);',
'ALTER INDEX ' +  ind.name + ' ON ' + t.name + ' REBUILD;',
    'ALTER INDEX ALL ON'  + t.name +  ' REBUILD;'
FROM
    sys.indexes ind
INNER JOIN
    sys.index_columns ic ON  ind.object_id = ic.object_id and ind.index_id = ic.index_id
INNER JOIN
    sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id
INNER JOIN
    sys.tables t ON ind.object_id = t.object_id
WHERE
    ind.is_primary_key = 0
    AND ind.is_unique = 0
    AND ind.is_unique_constraint = 0
    AND t.is_ms_shipped = 0
ORDER BY
    t.name, ind.name, ind.index_id, ic.index_column_id

UPDATE STATISTICAS COMPLETA
EXEC sp_updatestats;

REBUILD POR TABELA
SELECT 'ALTER INDEX ALL ON '  + TABLE_NAME +  ' REBUILD;'
FROM information_schema.tables

SQLServer DeadLock Victim SQL-Show



sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
sp_configure 'blocked process threshold', 20
GO
RECONFIGURE
GO


--

SELECT session_id, wait_duration_ms, wait_type, blocking_session_id
FROM sys.dm_os_waiting_tasks
WHERE blocking_session_id <> 0;

--

SELECT DTL.resource_type,
CASE
WHEN DTL.resource_type IN ('DATABASE', 'FILE', 'METADATA') THEN DTL.resource_type
WHEN DTL.resource_type = 'OBJECT' THEN OBJECT_NAME(DTL.resource_associated_entity_id)
WHEN DTL.resource_type IN ('KEY', 'PAGE', 'RID') THEN
(
    SELECT OBJECT_NAME([object_id])
    FROM sys.partitions
    WHERE sys.partitions.hobt_id =
    DTL.resource_associated_entity_id
)
ELSE 'Unidentified'
END AS requested_object_name, DTL.request_mode, DTL.request_status,
DOWT.wait_duration_ms, DOWT.wait_type, DOWT.session_id AS [blocked_session_id],
sp_blocked.[loginame] AS [blocked_user], DEST_blocked.[text] AS [blocked_command],
DOWT.blocking_session_id, sp_blocking.[loginame] AS [blocking_user],
DEST_blocking.[text] AS [blocking_command], DOWT.resource_description
FROM sys.dm_tran_locks DTL
INNER JOIN sys.dm_os_waiting_tasks DOWT
ON DTL.lock_owner_address = DOWT.resource_address
INNER JOIN sys.sysprocesses sp_blocked
ON DOWT.[session_id] = sp_blocked.[spid]
INNER JOIN sys.sysprocesses sp_blocking
ON DOWT.[blocking_session_id] = sp_blocking.[spid]
CROSS APPLY sys.[dm_exec_sql_text](sp_blocked.[sql_handle]) AS DEST_blocked
CROSS APPLY sys.[dm_exec_sql_text](sp_blocking.[sql_handle]) AS DEST_blocking
WHERE DTL.[resource_database_id] = DB_ID();

--

SELECT DTL.resource_type,
CASE
WHEN DTL.resource_type IN ('DATABASE', 'FILE', 'METADATA') THEN DTL.resource_type
WHEN DTL.resource_type = 'OBJECT' THEN OBJECT_NAME(DTL.resource_associated_entity_id, SP.[dbid])
WHEN DTL.resource_type IN ('KEY', 'PAGE', 'RID') THEN
(
    SELECT OBJECT_NAME([object_id])
    FROM sys.partitions
    WHERE sys.partitions.hobt_id =
    DTL.resource_associated_entity_id
)
ELSE 'Unidentified'
END AS requested_object_name, DTL.request_mode, DTL.request_status,
DEST.TEXT, SP.spid, SP.blocked, SP.status, SP.loginame
FROM sys.dm_tran_locks DTL
INNER JOIN sys.sysprocesses SP
ON DTL.request_session_id = SP.spid
--INNER JOIN sys.[dm_exec_requests] AS SDER ON SP.[spid] = [SDER].[session_id]
CROSS APPLY sys.dm_exec_sql_text(SP.sql_handle) AS DEST
WHERE SP.dbid = DB_ID()
AND DTL.[resource_type] <> 'DATABASE'
ORDER BY DTL.[request_session_id];

--

EXEC sp_who2 ;

--

SQLSERVER - Base Suspect



RECUPERAR BASE DE DADOS EM SUSPECT SQLSERVER

1. PARAR O SERVIÇO DO SQL;

2. FAZER UMA CÓPIA DA PASTA ONDE ESTÁ ARMAZENADO OS ARQUIVOS MDF E LDF ;
(C:\Program Files\Microsoft SQL Server\MSSQL*.SQLEXPRESS\MSSQL\DATA)

3. EXCLUIR OS ARQUIVOS MDF E LDF DESTA PASTA;

4. INICIAR O SERVIÇO DO SQL;

5. EXCLUIR O BANCO DE DADOS;

OBS: TENTEI EXCLUIR DIRETAMENTE O BANCO QUE ESTAVA EM SUPECT MAS NÃO EXCLUÍA, ENTÃO POR ISSO ELIMINEI O MDF E LDF PRIMEIRO E DEPOIS O BANCO.

6. RESTAURAR UM BACKUP DO BANCO ANTIGO COM O MESMO NOME QUE ESTAVA ANTERIORMENTE E NO MESMO CAMINHO PARA OS ARQUIVOS MDF E LDF;

7. PARAR O SERVIÇO DO SQL NOVAMENTE;

8. EXCLUIR OS ARQUIVOS MDF E LDF DESTA PASTA E SUBSTITUÍ-LOS PELOS 2 ARQUIVOS MAIS RECENTES (OS QUE ESTAVAM EM SUSPECT);

9. INICIAR O SERVIÇO DO SQL;

----EXECUTAR OS SCRIPTS ABAIXO---- 

10. ALTER DATABASE BANCO SET EMERGENCY

11. ALTER DATABASE BANCO SET SINGLE_USER

12. DBCC CHECKDB (BANCO, repair_allow_data_loss ) WITH ALL_ERRORMSGS

13. ALTER DATABASE BANCO SET read_write

14. ALTER DATABASE BANCO SET multi_user

Thursday, June 25, 2015

Connecting to SQL Server from Linux/Unix using Perl DBI



Connecting to SQL Server from Linux using Perl DBI

Download Software Components

Perl DBI Module   :DBI-1.633.tar
http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.633.tar.gz

Download FreeTDS :freetds-stable.tar
http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz

Perl DBD::Sybase Module :DBD-Sybase-1.15.tar
http://search.cpan.org/CPAN/authors/id/M/ME/MEWP/DBD-Sybase-1.15.tar.gz


Install DBI

1 - DBI-1.633.tar

perl Makefile.PL
make
make install

Install FreeTDS

2 - freetds-stable.tar

./configure --with-tdsver=7.0 --prefix=/usr/local/freetds
perl Makefile.PL
make
make install

Install DBD-Sybase

3 - DBD-Sybase-1.15.tar

# set||export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/local/freetds/lib
# set||export SYBASE=/usr/local/freetds

perl Makefile.PL
Use 'CHAINED' mode by default (Y/N) [Y]: Y
Use the threaded (lib..._r) libraries [N]: N
Sybase server to use (default: SYBASE): 192.168.0.98
User ID to log in to Sybase (default: sa): sa
Password (default: undef): 12345678
Sybase database to use on 192.168.0.98 (default: undef): TESTDB
make
make install

Configure FreeTDS

# vim /usr/local/freetds/etc/freetds.conf
       
[TESTDB]
       host = 192.168.0.98
       port = 1433
       tds version = 8.0
       dump file = /tmp/freetds.log
       text size = 64512




SCRIPT TO TEST

#!/usr/bin/perl

use DBI;

my $user   = "userdb";
my $passwd = "12345678";
my $server = "TESTDB";

my $dbh = DBI->connect("DBI:Sybase:server=$server", $user, $passwd, {PrintError => 0});
my $sth;

unless ($dbh) {
   die "ERROR: Failed to connect to server ($server).\nERROR MESSAGE: $DBI::errstr";
} else {
   print "\n";
   print "Successful Connection.";
   print "\n\n";
}


print "Current Connection Properties\n";
print "---------------------------------------------------------------------------------------\n";
my $sqlStatement = "select \@\@servername, \@\@version, db_name(), system_user, host_name()";
unless ($sth = $dbh->prepare($sqlStatement)) {
   $dbh->disconnect;
   die "ERROR: Failed to prepare SQL statement.\nSQL: $sqlStatement\nERROR MESSAGE: $DBI::errstr";
}
unless ($sth->execute) {
   $dbh->disconnect;
   die "ERROR: Failed to execute query.\nSQL: $sqlStatement\nERROR MESSAGE: $DBI::errstr";
}
while ((    $serverName
         , $sqlServerVersion
         , $currentDatabase
         , $currentUser
         , $clientMachine) = $sth->fetchrow) {
   ($sqlServerVersion, @dummy) = split(/\n/, $sqlServerVersion);

   print "    SQL Server Instance : $serverName\n";
   print "    SQL Server Version  : $sqlServerVersion\n";
   print "    Current Database    : $currentDatabase\n";
   print "    Current User        : $currentUser\n";
   print "    Client Machine      : $clientMachine\n";
}
print "\n";
$sth->finish;


print "Available Databases\n";
print "-----------------------------------------------------------------\n";
my $sqlStatement = "select
                       isnull(db_name(dbid), 'MSSQL SYSTEM RESOURCE') as Name
                     , str(convert(dec(15),sum(size))* 8192/ 1048576,10,2)+ N' MB' as Size
                   from sys.sysaltfiles
                   group by dbid
                   order by 2 desc";
unless ($sth = $dbh->prepare($sqlStatement)) {
   $dbh->disconnect;
   die "ERROR: Failed to prepare SQL statement.\nSQL: $sqlStatement\nERROR MESSAGE: $DBI::errstr";
}
unless ($sth->execute) {
   $dbh->disconnect;
   die "ERROR: Failed to execute query.\nSQL: $sqlStatement\nERROR MESSAGE: $DBI::errstr";
}
while (($databaseName, $databaseSize) = $sth->fetchrow) {
   printf("    %-40s %20s\n", $databaseName, $databaseSize);  
}
print "\n";
$sth->finish;

print "Disconnecting from SQL Server.\n\n";
$dbh->disconnect;
exit(0);