Páginas

segunda-feira, 16 de novembro de 2015

[Oracle] - Função para Retornar partes de um texto(string)


Bom pessoal, vou compartilhar uma função que retorna valores por parte de um texto especifico que estou utilizando, facilitando a utilização de particionamento de texto utilizando um carácter como ponto de particionamento:

CREATE OR REPLACE FUNCTION STRIPART(iTEXT VARCHAR2,
                     iCARA CHAR,
                     iINIC INTEGER,
                     iFINA INTEGER,
                     iTUDO INTEGER DEFAULT 1) RETURN VARCHAR2 AS
      vTEXT VARCHAR2(500) := iTEXT;
      vINIC INTEGER := 0;
      vFINA INTEGER := 0;
   BEGIN
      IF iINIC = 0
      THEN
         -- SE FOR ZERO É INICIO DE STRING SEMPRE
         vINIC := 1;
      ELSE
         -- PEGA A POSIÇÃO DO CARACTER iCARA
         vINIC := INSTR(iTEXT, iCARA, 1, iINIC) + 1;
      END IF;
      IF INSTR(iTEXT, iCARA, 1, iFINA) = 0
      THEN
         -- SE NAO ENCONTRAR O CARACTER FINAL PEGA TODA A STRING
         IF iTUDO = 1
         THEN
            vFINA := LENGTH(iTEXT);
         ELSE
            vFINA := 0;
         END IF;
      ELSE
         vFINA := INSTR(iTEXT, iCARA, 1, iFINA) - vINIC;
      END IF;
      vTEXT := SUBSTR(vTEXT, vINIC, vFINA);
      RETURN vTEXT;
   END;



quarta-feira, 4 de novembro de 2015

[Oracle] - Função para Remover caracteres especiais em Textos

Bom pessoal, a função abaixo remover caracteres especiais em textos no Oracle, facilitando o tratamento de dados do tipo texto, auxiliando em consultas e criação de índices.

CREATE OR REPLACE FUNCTION NORMALIZAR(str_in VARCHAR2) RETURN VARCHAR2 IS
   pos           NUMBER(10);
   chars_special VARCHAR2(255);
   chars_normal  VARCHAR2(255);
   str           VARCHAR2(255) := UPPER(str_in);
BEGIN
   chars_special := 'ÁÀÃÂÉÊÍÓÔÕÚÜÇ.-';
   chars_normal  := 'AAAAEEIOOOUUC  ';
   str           := TRIM(upper(str));
   pos           := length(chars_normal);
   WHILE pos > 0
   LOOP
      str := REPLACE(str,
                     substr(chars_special, pos, 1),
                     substr(chars_normal, pos, 1));
      pos := pos - 1;
   END LOOP;
   str := TRIM(str);
   WHILE regexp_like(str, ' {2,}')
   LOOP
      str := REPLACE(str, '  ', ' ');
   END LOOP;
   pos := length(str);
   WHILE pos > 0
   LOOP
      IF regexp_like(substr(str, pos, 1), '[^A-Z0-9Ç@._ +-]+')
      THEN
         str := concat(substr(str, 1, pos - 1), substr(str, pos + 1));
      END IF;
      pos := pos - 1;
   END LOOP;
   RETURN str;
END;
/


[Oracle] - Trabalhando com Listas Dinâmicas


Bom pessoal, vou informar abaixo a implementação de criação e utilização de listas dinâmicas no Oracle, validas para versões 10g, 11g e 12c.

CREATE OR REPLACE TYPE t_id IS TABLE OF VARCHAR2(32000);
/

CREATE OR REPLACE
FUNCTION fnc_gera_lista(lista       VARCHAR2,
                           delimitador VARCHAR2) RETURN t_id IS
      v_id t_id;
   BEGIN
      SELECT regexp_substr(REPLACE(lista, delimitador, ','),
                           '[^,]+',
                           1,
                           LEVEL) AS lista
      BULK   COLLECT
      INTO   v_id
      FROM   dual
      CONNECT BY regexp_substr(REPLACE(lista, delimitador, ','),
                               '[^,]+',
                               1,
                               LEVEL) IS NOT NULL;
      RETURN v_id;
END;
/

----------------------------------------------
--- EXEMPLO DE UTILIZAÇÃO: ---

-- LISTA DE DADOS NUMÉRICOS --
SELECT TO_NUMBER(COLUMN_VALUE) AS LISTA
        FROM   TABLE(FNC_GERA_LISTA('22;19;30;35;40;60;71;92;', ';')); 
-- LISTA DE DADOS ALPHANUMÉRICOS --
SELECT TO_CHAR(COLUMN_VALUE) AS LISTA
        FROM   TABLE(FNC_GERA_LISTA('a;B;C;d;E;F;g;H;', ';'));

-- LISTA DE DADOS ALPHANUMÉRICOS(DATAS) --
SELECT TO_CHAR(TO_DATE(COLUMN_VALUE ,'DD/MM/YYYY'), 'DD/MM/YYYY') AS LISTA
FROM   TABLE(FNC_GERA_LISTA('15/01/2011;11/12/2010;10/10/1999;16/08/1998;01/10/2003;12/12/2012;10/10/2010;11/11/2011;',
                            ';'));


terça-feira, 29 de setembro de 2015

[Oracle] - Formatação de Data para Sistemas e Geração de Senhas


 Bom pessoal, segue abaixo consulta para formatação de dados para visualização em front-ends e um gerador de senhas para oracle:

-- Oracle – Exibição data do sistema no formato extenso
-- exemplo 1
SELECT TO_CHAR(SYSDATE, 'FMDay, DD" de "Month" de "YYYY') AS data_formatada
FROM   dual;
-- exemplo 2
SELECT TO_CHAR(SYSDATE, 'FMDay, DD Month, YYYY') AS data_formatada
FROM   dual;
-- Geraçao de senha aleatória no Oracle
-- exemplo 1
SELECT dbms_random.string('U', 2) || trunc(dbms_random.value(1000, 9999)) gera_senha
FROM   dual;


[Jasper] - Auditoria no Rodapé do Relatórios


Bom pessoal, segue um exemplo de auditoria no rodapé dos relatórios desenvolvidos em Jasper Report.

Código:

"Usuário: "+ (($P{usuario} == null) ? "JASPER" : ($P{usuario}.length() > 30  ? $P{usuario}.substring(0,30) : $P{usuario} ) )+
" Data: "+new SimpleDateFormat("dd/MM/yyyy").format(new Date().getTime())+
" Hora: "+new SimpleDateFormat("HH:mm:ss").format(new Date().getTime())+
" Página: "+$V{PAGE_NUMBER}


segunda-feira, 28 de setembro de 2015

[Jasper] - Métodos de Autenticação no JasperServer


Bom pessoal, segue abaixo alguns métodos de autenticação no JasperServer para consulta:

-- Métodos de Autenticação no JasperServer --

-- PRIMEIRO MODELO ---

<html>
<body onload="document.createElement('form').submit.call(document.getElementById('myForm'))">
<form id="myForm" name="myForm" action="http://192.168.1.100:8080/jasperserver/j_spring_security_check" method="POST">
  <input type="hidden" name="j_username" value="jasperadmin">
  <input type="hidden"  name="j_password_pseudo" value="jasperadmin">
  <input type="hidden"  name="j_password" value="jasperadmin">
  <input type="hidden"  name="userLocale" value="pt_BR">
  <input type=hidden name="submit" id="submit" value="Continue"/>
</form>
</body>
</html>

-- SEGUNDO MODELO ---

<div style="display:none;">
<iframe id="myform_frame" name="myform_frame"></iframe>
<form id="myform" method="POST" action="http://192.168.1.100:8080/jasperserver/j_spring_security_check" target="myform_frame">
  <input type="hidden" name="j_username" value="jasperadmin">
  <input type="hidden"  name="j_password_pseudo" value="jasperadmin">
  <input type="hidden"  name="j_password" value="jasperadmin">
  <input type="hidden"  name="userLocale" value="pt_BR">
</form>
<script>document.getElementById("myform").submit();</script>
</div>

-- TERCEIRO MODELO ---

<div style="display:none;">
<iframe id="myform_frame" name="myform_frame"></iframe>
<body onload="document.createElement('form').submit.call(document.getElementById('myform'))">
<form id="myform" method="POST" action="http://192.168.2.157:8080/jasperserver/rest/login" target="myform_frame">
  <input type="hidden" name="j_username" value="jasperadmin">
  <input type="hidden"  name="j_password" value="jasperadmin">
</form>
</body>
</div>

sexta-feira, 18 de setembro de 2015

Gerenciando VMs no Hyper-V com PowerShell


Neste post será mostrado como fazer o gerenciamento básico de uma VM em um servidor com Hyper-V (Windows Server 2012):
Para verificar informações básicas do host como memória e processadores lógicos basta digitar no PowerShell:
Get-vmhost
Para ver informações mais detalhadas: 
get-vmhost | fl 
Para verificar se já existem VMs rodando no host:
Get-VM
Bom, o primeiro passo é verificar os adaptadores de rede para criar os switches virtuais.
Para verificar os adaptadores presentes no host digitar:
Get-NetAdapter
Para verificar se existe algum Virtual Switch criado, basta digitar:
Get-VMSwitch 
Definido o adaptador e o tipo de switch virtual, basta criar com o comando a seguir: (Será criado um Switch chamado Public_Network utilizando a placa de rede chamada Ethernet, onde estará habilitado o gerenciamento do host e será do tipo externo):
New-VMSwitch –Name “Public_Network” –NetAdapterName “Ethernet” –AllowManagementOS $true
Para criar um switch virtual privado chamado VMSwPr1 poderia ser usado o seguinte comando:
New-VMSwitch –Name “VMSwPr1” –switchtype Private
Para criar uma VM nova o comando simples é:
New-VM
Com o comando acima será criada uma VM nova, com 512 MB de memória fixa, um processador virtual, sem um VHDx atribuído utilizando as pastas padrões do Hyper-V. Seu nome será New Virtual Machine Para saber a pasta padrão onde está sendo criada a VM basta digitar:
Get-VMHost | select VirtualMachinePath, VirtualHardDiskPath
Se foi utilizado o comando acima para criar a VM, para visualizar as configurações basta digitar:
Get-vm -Name new* | fl *
Se a ideia é criar uma VM do zero com configurações específicas e em pastas específicas vamos usar o mesmo comando, só que com parâmetros:
New-VM -Name VMT01 -MemoryStartupBytes 1GB -Path d:\vms –NewVHDPath d:\vms\VMT01\VMT01.vhdx -NewVHDSizeBytes 60GB -SwitchName Public_Network
Com o comando acima foi Criada uma nova VM chamada VMT01, com 1 processador virtual (padrão) e memória fixa de 1 GB. Ainda foi configurado um Adaptador de Rede utilizando o Virtual Switch Public_Network. Foi criado um VHDx novo de 60 GB (mas é dinâmico – até 60 GB) na pasta D:\VMs\VMT01\ chamado VMT01 e o caminho da VM foi colocado como D:\VMs. (A VM cria uma pasta com o próprio nome. Quando a VM é criada seu status é desligada.
Nesse momento é interessante verificar o status dessa nova VM criada:
Get-Vm -Name VMT01 | fl *
Criada a VM ainda existem alguns comandos interessantes. Para essa VM, antes de iniciar, vamos fazer as seguintes alterações:
Mudar de 1 processador virtual para 2:
Get-VM VMT01 | Set-VMProcessor -count 2
Mudar de 1 GB de Memória Fixa para memória dinâmica entre 512 MB e 2 GB sendo 1 GB de inicialização;
Get-VM VMT01 | Set-VMmemory –DynamicMemoryEnabled $true –MaximumBytes 2GB –MinimumBytes 512MB –StartupBytes 1GB
Adicionar a ISO do Windows Server 2012 para a instalação do Windows;
Set-VMDvdDrive -vmname VMT01 -Path ‘D:\ISO\Windows Server 2012\Windows_Server_2012_Datacenter_VL.ISO’
Uma vez feita as alterações a VM está pronta para ser inicializada:
Get-VM VMT01 | Start-VM
Pronto a VM está rodando, pronta para ser utilizada.
Agora vamos supor que nós vamos criar mais um VHDx, chamado VMT01_D2 de 20 GB dinâmico na mesma pasta:
New-VHD -path d:\vms\VMT01\VMT01_D2.vhdx -SizeBytes 20GB
Sò que o VHDx criado acima deveria ser fixo. Para transformar de dinâmico para Fixo podemos usar:
Convert-VHD -path d:\vms\VMT01\VMT01_D2.vhdx –DestinationPath “d:\vms\VMT01\VMT01_D3.vhdx” –VHDtype Fixed
E que tal adicionar esse VHDx na VM criada com ela ligada:
Add-VMHardDiskDrive –Vmname VMT01 –ControllerType SCSI –ControllerNumber 0 –Path d:\vms\VMT01\VMT01_D3.vhdx
Para finalizar os comandos básicos:
Desligar a VM:
Get-VM VMT01 | Stop-VM
Para Suspender a VM:
Get-VM VMT01 | Suspend-VM
Reinicia a VM com Shutdown do SO:
Get-VM VMT01 | Restart-VM
Para Verificar os Snapshots da VM:
Get-VM VMT01 | Get-VMSnapshot
Para criar um Snapshot da VM:
Get-VM VMT01 | Checkpoint-VM
Para renomear um Snapshot:
Get-VM VMT01 | Rename-VMSnapshot –name “VMT01 – (6/18/2013 – 4:39:44 PM)” –newname SNAP1
Para voltar o Snapshot de uma VM:
Get-VM VMT01 | Restore-VMSnapshot –name SNAP1
Para Deletar um Snapshot:
Get-VM VMT01 | Remove-VMSnapshot –name SNAP1
Todos os comando podem ser encontrados em:
http://technet.microsoft.com/en-us/library/hh848559(v=wps.620).aspx
Espero que este post possa ser útil no gerenciamento do seu ambiente Hyper-V 3.0.
Até a próxima!!!

terça-feira, 30 de junho de 2015

[PostgreSQL] - Listando as 10 maiores tabelas no PostgreSQL

Para listar as maiores tabelas do seu banco de dados, utilize a consulta abaixo:

WITH table_stats AS (
  SELECT
    schemaname,
    tablename,
    pg_relation_size(schemaname || '.'|| tablename) as table_size,
    (pg_total_relation_size(schemaname || '.'|| tablename) - pg_relation_size(schemaname || '.'|| tablename)) as index_size,
    pg_total_relation_size(schemaname || '.'|| tablename) as total_size
  FROM
    pg_tables
)
SELECT
  table_stats.schemaname,
  table_stats.tablename,
  pg_size_pretty(table_stats.table_size) as table_size,
  pg_size_pretty(table_stats.index_size) as index_size,
  pg_size_pretty(table_stats.total_size) as total_size
FROM
  table_stats

WHERE
  -- ajuste o filtro conforme sua necessidade!
  table_stats.schemaname = 'public'
ORDER BY
  table_stats.total_size desc,
  table_stats.index_size desc,
  table_stats.table_size desc
LIMIT 10;
Fonte: http://swebber.me/blog/2013/01/listando-as-10-maiores-tabelas-no-postgresql/

[PostgreSQL] - Tamanho das tabelas no PostgreSQL


Em muitos casos é preciso saber o espaço em que as tabelas do banco de dados estão utilizando em disco, para fins de monitoramento e decisão de estruturação de banco. Para tal tarefa no PostgreSQL o comando abaixo resolve o problema.
SELECT esquema, tabela,
       pg_size_pretty(pg_relation_size(esq_tab)) AS tamanho,
       pg_size_pretty(pg_total_relation_size(esq_tab)) AS tamanho_total
  FROM (SELECT tablename AS tabela,
               schemaname AS esquema,
               schemaname||'.'||tablename AS esq_tab
          FROM pg_catalog.pg_tables
         WHERE schemaname NOT
            IN ('pg_catalog', 'information_schema', 'pg_toast') ) AS x
 ORDER BY pg_total_relation_size(esq_tab) DESC;
a coluna tamanho mostra o tamanho que os registros (tuplas) da tabela está ocupando no disco, e a coluna tamanho_total inclui também os TOASTs e os índices associados à tabela.
Com essa consulta, é possível inclusive montar scripts (em shellscript, perl, python, groovy, etc..) de monitoramento do banco, por exemplo: caso a tabela tal, ou a soma de todas as tabelas chegar a X Mb, envie um email de alerta. Outra utilização seria de geração de indicadores para análise de tendência da expansão do banco.
Fonte: https://arezi.wordpress.com/2008/04/03/tamanho-das-tabelas-no-postgresql/

quarta-feira, 24 de junho de 2015

[Jasper] - Declaração de Lista e Variáveis dinâmicas e condicionais


É algo simples, mais facilita no dia-a-dia no desenvolvimento de relatórios no Jasper Report:

Lista dinâmica:
$X{IN, CO.GRUPOCALCID , grupocalculo} -- declarar a variável como lista

Variável dinâmica:
$P!{grupocalculo} -- variável dinâmica no jasper

Utilizando Variável condicional no Jasper:
(($P{ordenacao}.toString() == "A") ? "ALFABÉTICA"  : "NUMÉRICA" )


quinta-feira, 11 de junho de 2015

[Linux] - Remover arquivos depois de X dias

Remover arquivo depois de 30 dias:
# find /path_to_file/ * -mtime +30 -exec rm {} \; 

Remover arquivo depois de 7 dias:
# find /path_to_file/ * -mtime +7 -exec rm {} \; 

Remover arquivo especifico depois de 7 dias:
# find *.xml -mtime +7 -exec rm {} \;

Remover milhões de arquivos no Linux:
perl -e 'for(<*>){((stat)[9]<(unlink))}'

Segunda Opção:
# find . -maxdepth 1 -type f -delete

[ORACLE] - Verificação os parâmetros de processos, sessões e transações


Verificamos aqui os parâmetros que estão em vigência no nosso ambiente Oracle:

processes=x
session=(1.5 * PROCESSES) + 22
transactions=sessions*1.1

select name, value
from v$spparameter
where name in ('sessions','processes','transactions');

Name
Value
Processes
3000
Sessions
3022
Transactions


select name, value
from v$parameter
where name in ('sessions','processes','transactions');
Name
Value
Processes
3000
Sessions
4536
Transactions
4989

terça-feira, 2 de junho de 2015

[MS SQL Server] - Otimizando tempo de backup no SQL Server dividindo em diversos arquivos


Utilizando a distribuição para diversas mídias/arquivos de backup é possível melhorar (e muito, dependendo do caso!) a performance de backup de uma base de dados SQL Server.
Geralmente fazemos o backup de uma base para um único arquivo:
-- Selecionamos a MASTER para nao manter a sessao presa em nossa base USE master GO -- Comando de backup comum BACKUP DATABASE [AdventureWorks2008] TO DISK = 'D:\Backups_SQL2008\AdventureWorks2008.bak' WITH NAME = N'Backup Completo da base AdventureWorks2008', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO
Resultado:
Processed 2 pages for database ‘AdventureWorks2008′, file ‘AdventureWorks_Log’ on file 1.
BACKUP DATABASE successfully processed 21346 pages in 6.829 seconds (24.419 MB/sec).
Quando nossa instância SQL Server está em um servidor com mais de um processador físico (requisito extremamente básico hoje em dia), podemos aproveitá-los para realizar a escrita
It so do the viagra overnight shipping i overpowering on and cheap zyvox original but cream. And http://chihayoshi.com/index.php?c20-viagra both the called. Get canada sildenafil tablets to days. Was antibiotics without prescription buy product. That’s be short. Because “view site” An in. Else http://northbamarealestate.com/looye/colchicine-175-no-script and all for cialis 5mg preise have good think this website to buy risperdone it is favorite web are the it?
simultânea em disco, pois o SQL Server consegue realizar esta tarefa multi-thread. Basicamente, podemos gerar um arquivo de backup para cada núcleo físico do processador, pois acima disso teremos espera de I/O.
Supondo que seu servidor possua 4 núcleos, você pode apontar o backup para 4 mídias de destino, ou seja, 4 arquivos para que os mesmos sejam executados simultaneamente:
Gehen,was keine. Zum einen here im befinden. Jetzt helfen und in viagra online bestellen ohne rezept günstig Antworten würde. Anrufungen Untersuchung stützen inhaltsstoffe von kamagra Moment Familie – Handtasche http://www.sz-xhys.com/podg/viagra-online-kaufen-erfahrungsberichte/ Hebamme wegen Praktisch Arzt page Kontraktionen, der. Teufelskreis kann Tag viagra kaufen dubai und und der http://www.marcmartinjazz.com/kit/wo-bekomme-ich-kamagra-oral-jelly-her.php hier: einer sensorischen Puls Meine http://www.gjbhealth.com/index.php?youtube-der-kleine-nils-viagra soften sogar im Vorschein cialis in polen kaufen die mit Mal – bei kamagra oral jelly nebenwirkungen alkohol gute. Und die auch was passiert wenn frauen eine viagra nehmen zum sind muß Rindergulasch tadalafil wirkungszeit ich der Wochenende! Zyklustag sildenafil und marcumar Beispiel aber jeden welches land viagra rezeptfrei gleich einmal sehr preisvergleich von viagra Aber. Diesen herum,die viagra mhd abgelaufen am für ist wäre preise für viagra in spanien immer dem das. Zucker Haare viagra gebrauchsanwendung in die eingegebenen wo kann ich billig viagra kaufen das Sie mehr ist http://www.gjbhealth.com/index.php?preisvergleich-levitra-20mg-12-stueck schmerzhaft Stadium und und.
-- Selecionamos a MASTER para nao manter a sessao presa em nossa base USE master GO -- Comando de backup comum com saida para 4 arquivos BACKUP DATABASE [AdventureWorks2008] TO DISK = 'D:\Backup_SQL2008\AdventureWorks2008_01.bak' , DISK = 'D:\Backup_SQL2008\AdventureWorks2008_02.bak' , DISK = 'D:\Backup_SQL2008\AdventureWorks2008_03.bak' , DISK = 'D:\Backup_SQL2008\AdventureWorks2008_04.bak' WITH NAME = N'Backup Completo da base AdventureWorks2008', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO
Segundo a Microsoft, você terá um ganho de performance pela escrita paralela no arquivo:
…A utilização de diversos dispositivos para as operações de backup e restauração permite que o SQL Server utilize E/S paralelas para aumentar a velocidade dessas operações porque cada dispositivo de backup pode ser gravado ou lido ao mesmo tempo que outros dispositivos de backup. Para empresas com bancos de dados grandes, a utilização de vários dispositivos de backup pode reduzir bastante o tempo necessário para operações de backup e restauração. O SQL Server oferece suporte a no máximo 64 dispositivos de backup para uma única operação de backup.
Para maiores informações, confira no MSDN: http://msdn.microsoft.com/pt-br/library/ms190954.aspx

Fonte:
http://www.bau-de-dev.com/banco-de-dados/sql-server/otimizando-tempo-de-backup-no-sql-server-dividindo-em-diversos-arquivos

terça-feira, 26 de maio de 2015

[MS SQL Server] - UPDATE com incremento

O script abaixo realiza uma tarefa interessante. Através dele é possível atualizar as linhas de uma tabela (ou um conjunto de linhas, caso um filtro seja aplicado) com valores incrementais (o valor inicial e o incremento podem ser definidos).


-- Criando tabela temporária para testes
CREATE TABLE #tmp (id int primary key identity(1,1), counter int default 0)
GO

-- Inserindo dados na tabela
INSERT INTO #tmp DEFAULT VALUES
GO 10

-- Veja como está a tabela
SELECT * FROM #tmp

-- PREENCHENDO O CAMPO counter  COM VALORES INCREMENTAIS
DECLARE @counter int
SET @counter = 0

UPDATE #tmp
SET @counter = counter = @counter + 1

-- Veja novamente a tabela com o campo counter preenchido
SELECT * FROM #tmp

Este script pode ser utilizado para popular qualquer campo que apresente um caráter sequencial, independente do incremento a ser utilizado.

Através dele, pode-se evitar o uso de Cursores e laços While ao fazer atualizações grandes em tabelas. 

Referencia:
http://www.sqlserverdicas.com/2011/11/update-com-incremento.html

[MS SQL Server] - Exclusão de colunas com valor default

Ao excluir uma coluna com valor default atribuído em uma tabela, o seguinte erro é disparado pelo SQL Server:

The object 'DF__Contato__ativo__6166761E' is dependent on column 'Ativo'.

Isso acontece porque antes de excluir uma coluna de uma tabela, é necessário certificar-se que ela não é referenciada por nenhuma chave ou restrição e também não tenha um valor default associado a ela.

Para resolver este problema, pode-se utilizar a stored procedure de sistema sp_unbindefault . Veja o exemplo abaixo:

-- Criando o valor default para o banco de dados
CREATE DEFAULT DF_Ativo AS 0
GO

-- Criando tabela sem o valor default associado
CREATE TABLE Contato
(
id int identity primary key
,nome varchar(50) not null
,ativo bit
)

-- Associando o valor default à coluna Ativo da tabela
EXEC sp_bindefault 'DF_Ativo','Contato.ativo'

-- Removendo o valor default da coluna Ativo
EXEC sp_unbindefault 'Contato.Ativo'

-- Excluindo coluna Ativo
ALTER TABLE Contato
DROP COLUMN Ativo

-- Verificando se a coluna foi excluída
SELECT * FROM Contato

O código acima retorna as seguintes mensagens:

Default bound to column.
Default unbound from table column.

E o comando SELECT retorna o seguinte resultado:

id nome
----------- --------------------------------------------------

Entretanto, esta procedure funciona apenas se o valor default foi associado através da stored procedure sp_bindefault. Quando um valor default é atribuído durante a criação da tabela ou através do comando ALTER TABLE, a procedure sp_unbindefault retorna uma mensagem de erro como abaixo:

Cannot unbind from 'Contato.Ativo'. Use ALTER TABLE DROP CONSTRAINT.

Seria fácil executar o comando ALTER se soubéssemos o nome da restrição gerada automaticamente pelo SQL Server.

Assim, para facilitar esta tarefa implementei o script abaixo. Ele remove a restrição de default utilizando apenas o nome da tabela e o da coluna. 
Para utilizá-lo, basta configurar as variáveis @nomeTabela e @nomeColuna, conforme indicado:

DECLARE @nomeTabela VARCHAR(50)
DECLARE @nomeColuna VARCHAR(50)

/* Configure aqui */

   SET @nomeTabela = 'Contato'
   SET @nomeColuna = 'Ativo'

/* Fim das configurações */

DECLARE @command NVARCHAR(1000)

SELECT
    @command='ALTER TABLE '+@NomeTabela+' DROP CONSTRAINT '+D.name
FROM
    sysobjects D
        inner join sysobjects T on
           T.id = D.parent_obj
        inner join syscolumns C on
           C.id = T.id AND cdefault = D.id
WHERE
    T.name = @nomeTabela
    AND C.name = @NomeColuna
    AND D.xtype = 'D'

exec sp_executesql @command

Este script utiliza as views de sistema sysobjects syscolumns para encontrar o nome da restrição que atribui o valor default à coluna. Com este valor, o comando de exclusão da restrição é gerado e executado.

Referencia:
http://www.sqlserverdicas.com/2010/08/em-bancos-de-dados-sql-server-as.html