Páginas

quinta-feira, 20 de fevereiro de 2014

[MySQL] - Alterando o Collation do BD e Tabelas

Bom pessoal, nesse post vou colocar os comandos para fazer a alteração de Collation do seu banco de dados MySQL, como também das suas tabelas e colunas:

1. Alterar o collation da base de dados:
ALTER DATABASE ‘base-de-dados’ DEFAULT CHARACTER SET charset COLLATE collation;

Ex:
ALTER DATABASE `base_de_dados` DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci;
ALTER DATABASE `base_de_dados` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;


2. Alterar o collation da tabela:
ALTER TABLE ‘tabela’ DEFAULT CHARACTER SET charset COLLATE collation;

Ex:
ALTER TABLE `produtos` DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci;
ALTER TABLE `clientes` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;


3. Alterar o collation do campo de uma tabela:
ALTER TABLE tabela CHANGE campo_nomeatual campo_novonome tipo(tamanho) CHARACTER SET encoding COLLATE collation;

Ex:
ALTER TABLE `produtos` CHANGE `nome` `nome` TEXT CHARACTER SET latin1 COLLATE latin1_general_ci;
ALTER TABLE `clientes` CHANGE `nome` `nome` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci;

Fonte:

domingo, 19 de janeiro de 2014

[Oracle] - Script par extrair DDL de tablespaces


Bom pessoal, segue abaixo script para geração de SQL para criação de tablespaces no Oracle:

set pagesize 0
set feedback off
set linesize 1000
spool cre_tbs.sql
select 'create tablespace ' || df.tablespace_name || chr(10)
|| ' datafile ''' || df.file_name || ''' size ' || df.bytes
|| decode(autoextensible,'N',null, chr(10) || ' autoextend on maxsize '
|| maxbytes)
|| chr(10)
|| 'default storage ( initial ' || initial_extent
|| decode (next_extent, null, null, ' next ' || next_extent )
|| ' minextents ' || min_extents
|| ' maxextents ' || decode(max_extents,'2147483645','unlimited',max_extents)
|| ') ;'
from dba_data_files df, dba_tablespaces t
where df.tablespace_name=t.tablespace_name;
spool off
set pagesize 20
set feedback on
set linesize 150

A consulta não é de minha autoria e o original pode ser encontrado em:
http://toolkit.rdbms-insight.com/gen_cre_ts.php

[Oracle] - Uso nls_language em funções SQL

Poucas pessoas sabem que boa parte das funções SQL do Oracle suportam sobrepor as configurações da sessão no que tange o NLS (national language support), abaixo exemplos da utilização dessa sintaxe:

TO_DATE ('1-JAN-99', 'DD-MON-YY', 'nls_date_language = American') 
TO_CHAR (hire_date, 'DD/MON/YYYY',  'nls_date_language = French')  
TO_NUMBER ('13.000,00', '99G999D99', 'nls_numeric_characters = '',.''')  
TO_CHAR (salary, '9G999D99L', 'nls_numeric_characters = '',.''
                               nls_currency = '' Dfl''') 
TO_CHAR (salary, '9G999D99C', 'nls_numeric_characters = ''.,''
                               nls_iso_currency = Japan') 
NLS_UPPER (last_name, 'nls_sort = Swiss')  
NLSSORT (last_name, 'nls_sort = German')

Fonte: http://download.oracle.com/docs/cd/B10500_01/server.920/a96529/ch7.htm
http://oraclemais.blogspot.com.br/2010/09/uso-nlslanguage-em-funcoes-sql.html 

[Oracle] - Habilitando autoextend para datafiles


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

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

Para habilitar para todos os datafiles:

spool runts.sql

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

@runts


Fonte:
http://oraclemais.blogspot.com.br/2010/06/oracle-autoextend-on.html

[Oracle] - FKs apontando para as PKs e UKs de uma tabela


As vezes acontece o erro abaixo quando tentamos truncar ou deletar todas as informações de uma tabela. Pare resolver é necessário identificar quais tabelas apontam para a tabela que eu quero truncar e precisamos desabilitar essas FKs.

Erro Oracle:
ORA-02266: unique/primary keys in table referenced by enabled foreign keys

1 - Identificando as FKs:

SELECT owner,
table_name,
constraint_name
FROM all_constraints ci
WHERE ci.constraint_type = 'R'
AND (ci.r_owner , ci.r_constraint_name) IN
(SELECT owner,
constraint_name
FROM all_constraints c
WHERE owner = '&dono'
AND table_name = '&tabela'
AND constraint_type IN ('P','U')
)

2 - Desabilite as constraints retornadas:

ALTER TABLE owner.tabela DISABLE CONSTRAINT nome_constraint;

3 - Execute o truncate das tabelas filhas e pai:

TRUNCATE TABLE owner.tabela_filha;
TRUNCATE TABLE owner.tabela_pai;


4 - Habilite as constraints retornadas:

ALTER TABLE owner.tabela ENABLE CONSTRAINT nome_constraint;

Fonte:
http://oraclemais.blogspot.com.br/2010/11/fks-apontando-para-as-pks-e-uks-de-uma.html