Categorias

Rotinas de manutenção de tabelas no mySQL

Quem desenvolve aplicações utilizando o mySQL em algum momento precisará realizar rotinas de manutenção das tabelas.
O mySQL por ser um banco de dados simples é necessário periódicamente executar algumas rotinas manualmente.

Com esta função é possível executar alguns comandos de manutenção em suas tabelas diretamente de sua aplicação web.

Os comandos disponíveis para esta função são:
ANALYZE
Analisa e armazena a distribuição de chaves para a tabela. Durante a análise a tabela é bloqueada com uma trava de leitura. Isto funciona em tabelas MyISAM e BDB.

Utilização: Response.Write ManutencaoTabelas(“ANALYZE”)

CHECK
Verifica se existem erros nas tabelas e funciona somente em tabelas do tipo MyISAM.
Utilização: Response.Write ManutencaoTabelas(“CHECK”)

OPTIMIZE
Deve ser usado se você apagou uma grande parte de uma tabela ou se você fez várias alterações à uma tabela com registros de tamanho variável (tabelas que tenham campos do tipo VARCHAR, BLOB ou TEXT).
Registros apagados são mantidos em uma lista de ligações e operações INSERT subsequentes reutilizam posições de registros antigos.
Na maioria da configurações você não precisa executar OPTIMIZE TABLE. Mesmo se você fizer diversas atualizações para registros de tamanhos variáveis não é desejável que você precise fazer isto mais que uma vez por mês/semana.
Utilização: Response.Write ManutencaoTabelas(“OPTIMIZE”)

REPAIR
Repara uma tabela possivelmente corrompida e funciona somente em tabelas do tipo MyISAM.
Normalmente você nunca deve executar este comando, mas se um disastre ocorrer você vai precisar recuperar os dados de suas tabelas.
Utilização: Response.Write ManutencaoTabelas(“REPAIR”)

IMPORTANTE: Para que o código funcione corretamente, será necessário configurar a strings de conexão com o seu banco de dados mySQL através da variávei strConexao.

<%
'-----------------------------------------------------
'Funcao: ManutencaoTabelas(ByVal Cmd)
'Sinopse: Realiza manutenção das tabelas de um banco mySQL
'Parametro(s):
'	Cmd: Comando a ser executado. Os comandos podem ser:
'		'ANALYZE'
'		'CHECK'	
'		'OPTIMIZE' 
'		'REPAIR' 
'Retorno: String
'Autor: Gabriel Fróes
'Site: www.codigofonte.com.br
'-----------------------------------------------------
Function ManutencaoTabelas(ByVal Cmd)
	'Declarações
	Dim strRetorno
	Dim strSQL
	Dim objRS
	Dim objRS2
	Dim objConexao
	Dim strConexao
		
	'Inicialização
	Set objConexao	= Server.CreateObject("ADODB.Connection")
	Set objRS		= Server.CreateObject("ADODB.RecordSet")
	Set objRS2		= Server.CreateObject("ADODB.RecordSet")
	strRetorno		= ""
	strConexao		= "SUA CONEXAO COM O BANCO MYSQL"
		
	'Lista das tabelas
	objConexao.Open strConexao
	Set objRS = objConexao.Execute("SHOW TABLES")
	strRetorno = ""
	strRetorno = strRetorno & ""
	strRetorno = strRetorno & "	"
	strRetorno = strRetorno & "	"
	strRetorno = strRetorno & "	"
	strRetorno = strRetorno & "	"
	strRetorno = strRetorno & ""
	If Not objRS.EOF Then
		Do While Not objRS.EOF
			strSQL = Cmd & " TABLE " & objRS.Fields(0).Value & ""
			Set objRS2 = objConexao.Execute(strSQL)
			If Not objRS2.EOF Then
				strRetorno = strRetorno & ""
				strRetorno = strRetorno & "	"
				strRetorno = strRetorno & "	"
				strRetorno = strRetorno & "	"
				strRetorno = strRetorno & "	"
				strRetorno = strRetorno & ""
			End If
			objRS2.Close
			objRS.MoveNext
		Loop
	Else
		strRetorno = strRetorno & ""
	End If
	strRetorno = strRetorno & "
TabelaOperaçãoTipoMensagem
" & objRS2("TABLE") & "" & objRS2("OP") & "" & objRS2("MSG_TYPE") & "" & objRS2("MSG_TEXT") & "
Não foram encontrads tabelas
" objRS.Close 'Retornando a função ManutencaoTabelas = strRetorno 'Destruição Set objRS2 = Nothing Set objRS = Nothing Set objConexao = Nothing End Function %>