quarta-feira, 25 de novembro de 2009

Tutorial Hibernate

Devido a carência de bons tutoriais sobre Hibernate, estou disponibilizando este tutorial criado a partir de um trabalho meu de faculdade.
O Hibernate é uma ferramenta de mapeamento objeto-relacional, você não entendeu o que isso quer dizer? Bom, digamos que você tem uma aplicação Java desenvolvida através do modelo de orientação a objetos, e você precisa interagir com um banco de dados relacional, o Hibernate faria esta interface fazendo um mapeamento do banco sem que você tenha de alterar seu modelo OO. Parece simples, mas o Hibernate é bem chato com algumas coisas, mas uma vez configurado você não terá mais problemas.

DOWNLOAD


sábado, 21 de novembro de 2009

Funções MySQL no PHP

A linguagem PHP tem um relacionamento muito íntimo com o MySQl, existem várias funções criadas especificamente para trabalhar com este banco de dados. Vamos ver algumas delas:

mysql_connect()
Acessa o banco de dados
Exemplo:

$conexao = mysql_connect(“localhost”, “root”, “senha”);
mysql_select_db(“Nome do banco”, $conexao);
O valor de retorno é 1 se conectar, e 0 se o comando falhar.

mysql_query()
Para fazer consultas
Exemplo:

Primeiro definimos uma variável que conterá a consulta:
$insere = “INSERT INTO tabela_exemplo (nome, email) VALUES (“José da Silva”, “jose.silva@mail.com.br”);
Executamos a consulta:
mysql_query($insere, $conexao);

mysql_fetch_row()
Escrevendo dados do banco

$consulta = “SELECT nome, email FROM tabela_exemplo”;
Definimos uma variável para receber os dados da consulta:
$resultado = mysql_query($consulta, $conexao);

E por fim escrevemos os dados no browser:
A variável $linha irá pegar (fetch) todos as linhas de resultado:
while ($linha = mysql_fetch_row($resultado)) {
   echo “Nome: ”;
   printf("$linha[0]”);
   echo “Email: ”;
   printf(“$linha[1]”);
}

mysql_close()
Fecha a conexão ao banco

mysql_close(“Nome do Banco”);

Outras funções utéis:

mysql_affected_rows()
Retorna o número de linhas alteradas, inseridas ou excluidas pela última consulta com UPDATE, DELETE, ou INSERT.

mysql_change_user()
Muda o usuario em um banco de dados em uma conexão que já esta aberta.

mysql_character_set_name()
Retorna o nome do conjunto de caracteres usado para abrir a conexão.

mysql_data_seek()
Busca por uma linha determinada no resultado de uma consulta.

mysql_debug()
Efetua um DBUG_PUSH com a string dada.

mysql_dump_debug_info()
Faz o servidor escrever informações de depuração no log.

mysql_eof()
Determina quando a ulitma linha de um conjunto de resultados foi lida.

mysql_errno()
Retorna o número do erro para uma função MySQL.

mysql_error()
Retorna a mensagem de erro para uma função MySQL.

mysql_escape_string()
Escapa strings para serem utilizadas no MySQL, escapar é trocar algo que não pode (aspas, por exemplo) por caracteres aceitos pelo banco (barra aspas, no exemplo).

mysql_fetch_field()
Retorna o tipo do próximo campo na tabela.

mysql_fetch_field_direct()
Retorna o tipo de um campo da tabela, dado um número do campo.

mysql_fetch_fields()
Retorna um vetor com todas as estruturas do campo.

mysql_fetch_lengths()
Retorna o tamanho de todas as colunas da linha atual.

mysql_field_seek()
Coloca o cursor de busca da em uma coluna específica.

mysql_field_count()
Retorna o número de colunas resultantes da consulta mais recente.

mysql_field_tell()
Retorna a posição do cursor de campos usado pelo último mysql_fetch_field().

mysql_free_result()
Libera a memória usada por um resultado.

mysql_get_client_info()
Retorna uma string com a versão do cliente.

mysql_get_client_version()
Returna o número da versão do cliente.

mysql_get_host_info()
Retorna uma string descrevendo os parâmetros da conexão.

mysql_get_server_version()
Retorna o número da versão do servidor como um inteiro (disponível somente a partir da versão 4.1).

mysql_get_proto_info()
Retorna a versão do protocolo usado para a conexão.

mysql_get_server_info()
Retorna o número da versão do servidor.

mysql_info()
Retorna informações sobre a consulta executada mais recentemente.

mysql_init()
Aloca ou inicializa um objeto MYSQL.

mysql_insert_id()
Retorna o ID gerado para uma coluna AUTO_INCREMENT pela consulta anterior.

mysql_kill()
Mata uma thread dada.

mysql_list_dbs()
Retorna o nome do banco de dados que coincidem com uma expressão regular.

mysql_list_fields()
Retorna o nome dos campos que coincidem com uma expressão regular.

mysql_list_processes()
Retorna uma lista das threads atuais do servidor.

mysql_list_tables()
Retorna os nomes de tabelas que coincidem com uma expressão regular.

mysql_num_fields()
Retorna o número de colunas em um conjunto de resultados.

mysql_num_rows()
Retorna o número de linhas em um conjunto de resultados.

mysql_options()
Define opções de conexão para mysql_connect().

mysql_ping()
Verifica se a conexão ao servidor está funcionando, e se necessário se reconecta.

mysql_query()
Executa uma consulta SQL especificada com uma string terminada com null.

mysql_real_connect()
Conecta no servidor MySQL (equivalente a mysql_connect()).

mysql_real_escape_string()
Escapa caracteres especiais em uma string para ser utilizada em uma instrução SQL (equivalente a mysql_escape_string()).

mysql_real_query()
Executa uma consulta SQL especificada como uma string fixa.

mysql_reload()
Informa ao servidor para recarregar a tabela de permissões

mysql_row_seek()
Busca por um offset de linha no resultado, usando o valor retornado de mysql_row_tell().

mysql_row_tell()
Retorna a posição do cursor de linhas.

mysql_select_db()
Seleciona um banco de dados (para servidores onde existe mais do que um banco).

mysql_set_server_option()
Define uma opção para a conexão (como multi-statements).

mysql_sqlstate()
Retorna o código de erro SQLSTATE para o último erro.

mysql_shutdown()
Desliga o servidor de banco de dados.

mysql_stat()
Retorna o status do servidor como uma string.

mysql_store_result()
Recupera um resultado completo para o cliente.

mysql_thread_id()
Retorna a identificação da thread atual.

mysql_thread_safe()
Retorna 1 se o cliente foi compilado como thread-safe.

mysql_use_result()
Inicia um resultado recuperado registro por registro.

mysql_warning_count()
Retorna a contagem do aviso da instrução SQL anterior.

mysql_commit()
Faz um commit na transação (disponível somente a partir da versão 4.1).

mysql_rollback()
Faz um roll back na transação (disponível somente a partir da versão 4.1).

mysql_autocommit()
Liga ou desliga o modo autocommit (disponível somente a partir da versão 4.1).

mysql_more_results()
Verifica se não existem mais resultados (disponível somente a partir da versão 4.1).

mysql_next_result()
Em execuções de consultas múltiplas, retorna e reinicia o próximo resultado (disponível somente a partir da versão 4.1).

sexta-feira, 6 de novembro de 2009

Script de Criação de Tabelas no SQL Server

Para quem quiser aprender como fazer um script de criação de tabelas é só baixar este arquivo SQL exemplo, além das tabelas também existem exemplos de criação de índices e constraints default e check.


Se tudo correr bem na execução do script ele irá criar uma estrutura igual ao diagrama a seguir.

terça-feira, 3 de novembro de 2009

Arquivos de Parâmetros PFILE e SPFILE do Oracle

Devido principalmente à semana de provas da faculdade, dei uma pausa rápida nas postagens, mas agora estou voltando com força total.
Além dos Control Files o Oracle ainda tem dois tipos de arquivos de parâmetro, estes arquivos são lidos na inicialização do banco de dados. Quando você inicializa a instância o Oracle verifica o conteúdo do diretório de parâmetros ($ORACLE_HOME/database no Windows ou $ORACLE_HOME/DBS no Linux), e procura primeiramente o SPFILE e depois o PFILE e por fim um arquivo init.ora (forma antiga do Oracle guardar parâmetros), caso ele não encontre nenhum destes arquivos a inicialização falha.

PFILE

O PFILE é um arquivo texto, dentro dele estão guardadas os parâmetros de configuração do banco de dados. Entre outras coisas estes parâmetros informam a quantidade de memória a ser alocada, onde estão os arquivos do banco de dados e onde gravar os arquivos necessários ao funcionamento do banco.
Como o PFILE é um arquivo de texto puro, ele pode ser facilmente editado no VI do UNIX ou no Notepad do Windows. Normalmente ele tem o nome de init.ora, onde SID é a identificação de seu banco de dados, exemplo se seu SID é bdteste então seu PFILE será nomeado como initbdteste.ora

SPFILE

Diferente do PFILE, o SPFILE é um arquivo binário e seu conteúdo não pode ser editado.
Para verificar se ele existe, use o comando:

SHOW PARAMETER SPFILE;

Embora não possa ser editado diretamente, através do comando ALTER SYSTEM você pode mudar seus parâmetros. Embora pareça ser mais fácil usar um PFILE, o SPFILE traz maiores benefícios, pois ele é incluído no backup feito pelo RMAN toda vez que é alterado, o que garante uma recuperação menos problemática em caso de falhas (falarei sobre o RMAN no futuro), a Oracle também introduziu várias rotinas de otimização automática do banco baseadas no uso do SPFILE, mas um dos maiores benefícios do SPFILE é que você pode fazer mudanças dinâmicas (com o banco em uso) em parâmetros persistentes, estas alterações são efetuadas usando o comando ALTER SYSTEM, como no exemplo a seguir:

ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=10G;

Um SPFILE usa o mesmo formato de nome que um PFILE, exceto pela palavra SPFILE que fica no lugar de INIT. Por exemplo, se o seu ORACLE_SID é bdteste, o nome do SPFILE será spfilebdteste.ora.

Administrando o PFILE e o SPFILE

A sua maior preocupação com os SPFILE e PFILES será em manter cópias de backup deles, como dissemos antes você pode usar o RMAN para fazer isso, ou pode fazer o backup manualmente. Como o PFILE é apenas um arquivo texto, você pode copia-lo para outro diretório sem afetar a instância, mas no caso do SPFILE, você precisaria primeiro converte-lo em um PFILE, para fazer isso use o seguinte comando:

CREATE PFILE FROM SPFILE;

Será criado um PFILE chamado init.ora no diretório $ORACLE_HOME/database (Windows) ou no $ORACLE_HOME/dbs (Linux/Unix).
Você também pode gravar o PFILE em um outro diretório de sua preferência, basta acrescentar ao comando:

CREATE PFILE=//BACKUP.ORA FROM SPFILE;

Você também pode criar um SPFILE a partir do PFILE que você copiou, usando o comando:

CREATE SPFILE FROM PFILE=/PATH/TO/BACKUP.ORA

Atenção: se o banco de dados esta usando o SPFILE, antes de usar este comando você precisa parar o banco de dados com o comando:

SHUTDOWN IMMEDIATE;

Para ver quais os valores atuais dos parâmetros do banco de dados, use a view dinâmica V$PARAMETER.

quarta-feira, 7 de outubro de 2009

Funções de Arredondamento no MySQl

Uma dica rápida sobre o MySQl, se você necessita de valores arredondados para alguma aplicação, use uma das funções nativas do MySQL:

CEILING
Arredonda para cima, exemplo:
SELECT CEILING(4.5);

Resultado: 5
SELECT CEILING(-3.29);

Resultado: -3

FLOOR
Arredonda para baixo, exemplo:
SELECT FLOOR(1.5) ;
Resultado: 1
SELECT FLOOR(-2.37);
Resultado: -3

ROUND
Arredonda para o proximo número inteiro (note que valores decimais abaixo de 5 são arredondados para baixo e acima de 5 para cima, e que a função aceita um segundo valor definindo o número de casas decimais do resultado), exemplo:
SELECT ROUND(-1.23);
Resultado: -1
SELECT ROUND(-1.58);
Resultado: -2
SELECT ROUND(1.298, 1);
Resultado: 1.3
SELECT ROUND(1.298, 0);
Resultado: 1
SELECT ROUND(23.298, -1);
Resultado: 20

TRUNCATE
Elimina as casas decimais (também aceita um segundo valor definindo o número de casas decimais do resultado), exemplo:
SELECT TRUNCATE(1.223,1);

Resultado: 1.2
SELECT TRUNCATE(1.999,1);
Resultado: 1.9
SELECT TRUNCATE(122,-2);
Resultado: 100
SELECT TRUNCATE(10.28*100,0);
Resultado: 1028

segunda-feira, 5 de outubro de 2009

Control Files do Oracle

Os Control Files são arquivos binários extensão ctl que guardam informações sobre o banco de dados, por sua vez estas informações mantém a integridade do banco de dados. Este arquivo de controle é validado na inicialização do banco, durante a passagem do estado DATABASE NOMOUNT para MOUNT e cada instância do banco de dados tem o seu Control File.

Para verificar o status e a localização dos Control Files você pode consultar as seguintes views:
V$CONTROLFILE: Lista o nome e o status de todos os Control Files associados à instância.
V$PARAMETER: Lista o status e a localização de todos os parâmetros.
V$CONTROLFILE_RECORD_SECTION: Contém as informações sobre as seções de registro dos Control Files.
SHOW PARAMETER CONTROL_FILES: Lista o nome, o status e a localização dos Control Files.

O Control File contém as seguintes informações:
  • O nome e o identificador (SID) do banco de dados.
  • O timestamp de criação do banco de dados.
  • Os nomes das tablespaces.
  • Os nomes e as localizações dos arquivos de dados e de redo log on-line.
  • O número de seqüência do arquivo de redo log on-line atual.
  • As informações sobre checkpoints.
  • O início e o fim dos segmentos de undo.
  • As informações de arquivamento de redo log.
  • As informações de backup.
Como você pode ver ele contém dados importantíssimos para o funcionamento do banco, a sua perda pode implicar na recuperação de todo o banco. Uma das estratégias para se precaver disso é multiplexar o Control File.

Multiplexação do Control File

A multiplexação consiste em fazer várias cópias do Control File em locais diferentes, exemplo se você tem dois discos u01 e u02, você pode criar cópias nos dois através dos arquivos de parâmetros, com a seguinte sequência de comandos:

Através do SPFILE
1. Altere o SPFILE:
ALTER SYSTEM SET control_files =
'$HOME/ORADATA/u01/ctrl01.ctl',
'$HOME/ORADATA/u02/ctrl02.ctl' SCOPE=SPFILE;

2. Desative o banco de dados:
shutdown immediate
3. Crie os Control Files adicionais:
cp $HOME/ORADATA/u01/ctrl01.ctl
$HOME/ORADATA/u02/ctrl02.ctl

4. Inicie o banco de dados:
startup

Através do PFILE
1. Desative o banco de dados:
shutdown immediate
2. Crie arquivos de controle adicionais:
cp $HOME/ORADATA/u01/ctrl01.ctl
$HOME/ORADATA/u02/ctrl02.ctl

3. Adicione os nomes dos arquivos de controle a PFILE:
CONTROL_FILES = $HOME/ORADATA/u01/ctrl01.ctl,
$HOME/ORADATA/u02/ctrl02.ctl)

4. Inicie o banco de dados:
Startup
Com varias copias do Control File, no caso de uma falha em um deles você pode usar a cópia para recupera-lo.

Backup do Control File
Para fazer o backup normal do Control File, use o comando ALTER DATABASE BACKUP CONTROLFILE, exemplo:
ALTER DATABASE
BACKUP CONTROLFILE TO '/oracle/backup/ctrl01.bkp';


Na próxima postagem falaremos sobre os arquivos de parâmetros SPFILE e PFILE.

quinta-feira, 1 de outubro de 2009

Conheça o Oracle SQL Developer

O Oracle SQL Developer é uma ferramenta gratuita para desenvolvimento em banco de dados, já esta na versão 1.5.5 e embora tenha recursos poderosos infelizmente é um aplicativo que é muito pouco divulgado pela própria Oracle. Com ele você pode procurar objetos do banco, executar comandos e scripts SQL e editar e depurar código PL/SQL. Além disso, como ele foi desenvolvido em Java, roda em Windows, Linux e Mac OSX e os usuários podem criar conexões de banco de dados para outros bancos como MySQL, SQL Server, Access e Sybase. Vamos dar uma rápida descrição das suas principais funcionalidades:

Estrutura Object Browser
Oferece suporte a visualização, criação, alteração e exclusão de todos os tipos de objetos do banco: tabelas, views, índices, pacotes, procedimentos, funções, triggers, seqüências, materialized views, logs, sinônimos (públicos e privados), database links, esquemas XML, Java. Cada tipo de objeto têm uma guia de exibição de detalhes própria e um filtro que pode ser aplicado para restringir a exibição, incorpora também uma lixeira para os objetos excluídos.




Query Builder
Possibilita criar rapidamente consultas SQL arrastando e soltando os objetos.

Schema Copy and Compare
Permite copiar o conteúdo de um esquema para outro e também compara e cria SQL baseado na diferença entre dois esquemas.

Edição de PL / SQL
Possui um editor PL/SQL muito avançado com as seguintes funções:
Formatação de código
Syntax Highlighting
Auto completa código
Inline Error Reporting
Code Bookmarking
Teclas de atalho customizaveis
Suporte a arquivos .pks, .pkb e .pls

Suporte a pacotes
Debugger avançado

Criação de relatórios
Cria os seguintes tipos de relatórios:
Dicionário de dados
Monitoramento
Segurança
Os relatórios tem suporte a gráficos e HTML e a maioria dos relatórios apresentados incluem o recurso click-through, se um usuário clica em uma linha resultante, a definição daquele objeto é exibida.





Suporte a migrações de outros bancos de dados
Conecta com MySQL, SQL Server, Access e Sybase, permite visualizar e converter o modelo do banco para o modelo Oracle, gera script DDL e migra dados, stored procedures, triggers e views.

Para fazer o download desta excelente ferramenta clique no link:
http://www.oracle.com/technology/software/products/sql/index.html

terça-feira, 29 de setembro de 2009

SEQUENCE: Auto Incremento no Oracle

Agora que você já sabe como fazer auto incremento no SQL Server e MySQL, vamos explicar como isso funciona no Oracle.
O Oracle é um pouco diferente pois ele utiliza um objeto chamado Sequence, a sintaxe para criação deste objeto é a seguinte:
CREATE SEQUENCE EXEMPLO_SEQUENCE
START WITH 1
INCREMENT BY 1
MAXVALUE 99999
CYCLE
CACHE 10
ORDER;


Vejamos o que este comando faz, em primeiro lugar você especifica o nome da seqüência (EXEMPLO_SEQUENCE), em seguida você deve informar alguns parâmetros:
START WITH
Aqui você informará qual será o valor inicial da sequência, no caso estamos iniciando em 1.
INCREMENT BY
Define qual será o incremento da sequência, nesse caso estamos incrementando de 1 unidade.
MAXVALUE
Este será o valor máximo que a sequência alcancará, se você não definir nenhum valor, ele assumirá o valor padrão NOMAXVALUE que na verdade indica um valor máximo de 999999999999999999999999999. Caso você esteja usando decremento use MINVALUE.
CYCLE
Determina que a sequencia será reiniciada ao chegar no valor máximo (o padrão é NOCICLE).
CACHE
Especifica a quantidade de valores que será carregada no buffer (o padrão é 20), serve para melhorar a performance de acesso, caso você não queira usar esta propriedade mude para NOCACHE.
ORDER

Garante que a sequência será gerada em ordem de requisição, em algumas situações esta opção é muito útil, se você não especificar esta opção, a sequencia assumirá o padrão NOORDER.

Você deve ter notado que o objeto foi criado sem estar vinculado a uma tabela em particular, pois esta é a maior diferença em relação aos outros bancos de dados. Cada SEQUENCE é um objeto independente dentro do banco de dados, isso pode ser muito vantajoso pois um único objeto SEQUENCE pode ser reutilizado em várias tabelas do banco de dados, economizando tempo e trabalho. Assim para inserir dados usando SEQUENCE, você deve incluir o objeto no seu comando INSERT, exemplo:
INSERT INTO EXEMPLO_TABELA (CODIGO, NOME, EMAIL)

VALUES (EXEMPLO_SEQUENCE. NEXTVAL,’José da Silva’, ‘jose@mail.com’);

Como você deve ter notado, é preciso usar a função NEXTVAL para obter o próximo valor da sequencia. Veja um exemplo de UPDATE usando esta função:
UPDATE EXEMPLO_TABELA
SET CODIGO = EXEMPLO_SEQUENCE.NEXTVAL
WHERE CODIGO = 1017;


Se no entanto você quisesse saber qual é o valor atual da sequencia, você deveria usar a função CURRVAL, que retornaria o valor atual da sequencia:
SELECT EXEMPLO_SEQUENCE.CURRVAL FROM DUAL;

No entanto existem algumas restrições, CURRVAL e NEXTVAL não podem ser usados nas seguintes situações:
• Em uma subquery.
• Em uma query de uma view.
• Em um comando SELECT com o operador DISTINCT.
• Em um comando SELECT com uma clausula GROUP BY ou ORDER BY.
• Em um comando SELECT que esteja sendo combinado com outro SELECT através dos operadores UNION, INTERSECT, ou MINUS.
• Na clausula WHERE de um comando SELECT.
• Como o valor DEFAULT de uma coluna em um commando CREATE TABLE ou ALTER TABLE.
• Como condição de uma restrição CHECK.

Para verificar os parâmetros de uma sequência use o comando:
SELECT SEQUENCE_NAME, INCREMENT_BY, MAX_VALUE, LAST_NUMBER FROM USER_SEQUENCES;
Como você pôde notar, a tabela USER_SEQUENCES guarda informações sobre todas as sequências.


Para alterar os parâmetros de uma sequência, use o comando:
ALTER SEQUENCE EXEMPLO_SEQUENCE
START WITH 2
INCREMENT BY 2
CACHE 5;


Para excluir uma sequencia, use o comando:
DROP SEQUENCE EXEMPLO_SEQUENCE;

Uma dica: para alterar o valor final de uma sequencia você pode alterar o ultimo valor executando o comando ALTER SEQUENCE. Por exemplo, se o ultimo valor usado pelo Oracle for 50 e quisermos alterar para 105, devemos usar a seguinte sequencia de comandos:
ALTER SEQUENCE EXEMPLO_SEQUENCE
INCREMENT BY 54;
SELECT EXEMPLO_SEQUENCE.NEXTVAL FROM DUAL;
ALTER SEQUENCE EXEMPLO_SEQUENCE
INCREMENT BY 1;

O próximo valor usado pela sequência será então o 105.

Outra dica: para reiniciar uma sequencia para um valor predeterminado, por exemplo de 100 para 50:
ALTER SEQUENCE EXEMPLO_SEQUENCE
INCREMENT BY -50;
SELECT EXEMPLO_SEQUENCE.NEXTVAL FROM DUAL;
ALTER SEQUENCE EXEMPLO_SEQUENCE
INCREMENT BY 1;

sábado, 12 de setembro de 2009

Auto Incremento no SQL Server e MySQL

Usar campos com auto incremento no banco de dados tem várias vantagens, você previne erros de chaves primárias duplicadas e pode se abstrair deste controle nos programas que acessam o banco. Ele funciona da seguinte forma: para cada inserção de registro o banco se encarrega de sempre incrementar um campo de chave primária com um valor seqüencial.

SQL Server

No SQL Server você pode fazer isso através da propriedade IDENTITY, ela recebe dois valores: o primeiro é o valor inicial e o segundo é o valor de incremento, exemplo:

CREATE TABLE DBO.TABELA (
ID INT IDENTITY (1,1) NOT NULL, / inicia em 1 e incrementa de 1 em 1
NOME VARCHAR(50) NULL,
EMAIL VARCHAR(50) NULL,
PRIMARY KEY (ID)
);


Se a tabela já foi criada você pode alterá-la assim:
ALTER TABLE DBO.TABELA ALTER COLUMN ID INT IDENTITY(1,1);

No comando de inserção você não precisará mais referenciar o campo com auto incremento:
INSERT INTO TABELA (NOME, EMAIL) VALUES (‘JOSE DA SILVA’, ‘jose@mail.com’);

Se por alguma razão você precisar reiniciar o auto incremento, os campos Indentity Increment do SQL Server possuem um contador mantido nas tabelas do sistema, para alterar as mesmas deve-se utilizar o comando DBCC. Para reiniciar completamente o contador, iniciando do zero novamente, use:
DBCC CHECKIDENT ('TABELA', RESEED, 0)

Para colocar o ultimo numero utilizado:
DBCC CHECKIDENT (TABELA, RESEED, (SELECT MAX(ID) FROM TABELA))

Para saber qual o valor atual do campo use o comando IDENT_CURRENT():
SELECT IDENT_CURRENT(TABELA) IDENT_INCR (TABELA)

Para saber qual o valor de incremento use IDENT_INCR():
SELECT TABELA, IDENT_INCR(TABELA) AS IDENT_INCR
FROM INFORMATION_SCHEMA.TABLES
WHERE IDENT_INCR(TABELA) IS NOT NULL


Para saber qual foi o valor inicial use IDENT_SEED ():
SELECT TABELA, IDENT_SEED(TABELA) AS IDENT_SEED
FROM INFORMATION_SCHEMA.TABLES
WHERE IDENT_SEED(TABELA) IS NOT NULL


MySQL

O processo é parecido no MySQL, a chave primária recebe a propriedade AUTO_INCREMENT:

CREATE TABLE TABELA (
ID INTEGER NOT NULL AUTO_INCREMENT,
NOME VARCHAR(50) NOT NULL ,
EMAIL VARCHAR(50) NOT NULL ,
PRIMARY KEY (ID)
) TYPE = InnoDB ROW_FORMAT = Default;


Para alterar uma tabela que já existe:
ALTER TABLE TABELA CHANGE ID ID INT AUTO_INCREMENT PRIMARY KEY;

Como você notou, a propriedade tem o valor inicial padrão de auto incremento como 1, e o incremento padrão de 1. Como o MySQL não tem uma função específica para isso, nesse caso para alterar o valor inicial de auto incremento você poderia usar o comando:
ALTER TABLE TABELA AUTO_INCREMENT = 100; / Iniciaria a partir de 100

Para saber qual o último valor do campo use:
SELECT MAX(ID) FROM TABELA;

Mas você deve estar se perguntando: E quanto ao Oracle? O Oracle tem um mecanismo muito eficiente para fazer auto incremento chamado Sequence. Breve estaremos falando deste mecanismo em um post especial.

terça-feira, 8 de setembro de 2009

Inicialização do Oracle

Como primeiro assunto, quero abordar as diferentes formas de se iniciar o Oracle, e para quais situações você deve usar cada uma delas:

Para iniciar a instância (entenda instância como a parte do banco de dados onde os usuários se conectam, ela é composta pela System Global Area e pelos processos SMON, PMON, DBWn, LGWR, CKPT), em primeiro lugar você deve estar conectado ao SQL Plus como um usuário privilegiado (usuário SYS):

C:\> sqlplus "/as sysdba"

O primeiro comando que analisaremos é:

SQL> STARTUP NOMOUNT

Neste estado, a instância é inicializada, os arquivos de parâmetros são lidos (SPFILE.ora ou SPFILE.ora ou init.ora), a SGA e os processos são inciados, porém o banco de dados ainda não esta montado. Somente usuários privilegiados conseguem conctar-se ao banco, este estado é ideal para criar um banco de dados manualmente ou para recuperar os control files.

SQL> STARTUP MOUNT

Usando este comando, a instância é iniciada e os control files (falaremos mais deles em outra ocasião) são validados. Nesse estado a estrutura do banco de dados foi "montada" e já esta disponível, pode-se acessar os datafiles e o redo-online, nesse momento pode-se executar tarefas de manutenção como renomear arquivos de dados, ativar e desativar opções de arquivamento de redo log e recuperar o banco de dados.

SQL> STARTUP OPEN ou apenas STARTUP

Nesse estado, a estrutura do banco de dados já foi verificada e validada, os datafiles e o redo-online são abertos e o banco já pode receber conexões de usuários comuns.

ATENÇÃO: Se você usou um dos comandos acima, para passar para o próximo estágio de incialização você deve usar o comando ALTER DATABASE, exemplo:

Se você entrou no estado NOMOUNT, para passar para o estado MOUNT use:

SQL> ALTER DATABASE MOUNT

terça-feira, 28 de julho de 2009

Oi esta é minha primeira postagem, criei este blog para compartilhar com vocês meu conhecimento e experiência em banco de dados. Um abraço a todos e sejam bem vindos!