quarta-feira, junho 15, 2005

Oracle – Criando usuário com acesso Limitado

Em alguns casos, você precisa criar um usuário no Oracle que terá acesso limitado as tabelas de um TableSpace (Apenas consulta ou atualização).
Como as tabelas foram criadas por outro usuário, você se vê obrigado a utilizar o owner do usuário nos comandos SQL, por Exemplo:

USER_DBO : Usuário com permissão de criar tabela e owner dos seus objetso
USER : Usuário com acesso de consulta e alteração de dados

CREATE TABLE USER_DBO.TB_TESTE
…….

Quando o usuário USER vai tentar fazer o select ele tem utilizar o commando
SELECT * FROM USER_DBO.TB_TESTE
Necessitando incluir o Owner da tabela antes do nome da tabela.

Para resolver o problema na necessidade do owner, existe duas opção:
1) Criar um sinônimo
Você criar um sinônimo com o usuário USER apontando para a tabela USER_DBO.TB_TESTE.
2) Comando Alter Session
Após conectar com o banco de dados, você executa o comando ALTER SESSION SET CURRENT_SCHEMA = USER_DBO;

BOA SORTE

DotNet Error : Visual Studio .NET cannot create or open the application

Eu reinstalei o meu ISS, lembrando de fazer todos os passos necessários para registrar o Framework, mas quando tento criar ou abrir um projeto AspNet, o VisualStudio me exibe a seguinte mensagem:

Visual Studio .NET cannot create or open the application. The likeliestproblem is that required components are not installed on the local webserver. run visual studio.net setup and add the web development componet.

Este problema ocorre pois o compartilhamento do wwwroot foi perdido. Abaixo está a solução para este problema :
From: Harvey MeekerTry to check the sharing of the folder that you are hosting the application in. If it is in the WWWROOT folder then that folder needs to be shared as wwwroot$, at least this is what I've experienced on my own machine. This is basically a problem of the share not being properly configured

sexta-feira, junho 10, 2005

Dotnet error : 'HTTP/1.1 500 Internal Server Error.'

Estou utilizando o VisualStudio 2003 e Windows XP. Estava tudo funcionando e de uma hora para outra começou a aparecer o erro:

"the Web server reported the following error when attempting to create or open the Web project located at the following URL: 'http://localhost/WebApplicaton1'.'HTTP/1.1 500 Internal Server Error.'"

Este erro já me aconteceu N vezes dentro no meu ambiente de trabalho e depois de muito tempo tentando descobrir o que aconteceu, encontrei que na maioria das vezes ocorre devido a uma atualização do windows (Windows Update) que causou a mudança no Framework/IIS ou mudança da senha do usuário ASPNET e o bloqueio do usuário.


Na maioria das vezes, a solução que se encontra no site http://codebetter.com/blogs/peter.van.ooijen/archive/2004/09/08/24756.aspx resolve o problema. Mas se o problema persiste, outra solução possível encontra-se no link http://weblogs.asp.net/jambrose/archive/2004/09/01/224226.aspx

Boa Sorte.

sexta-feira, maio 27, 2005

Oracle - Exemplos de Scripts

No link do título deste artigo, você poderá ter acesso a quase todos os scripts necessários a um DBA Oracle, desenvovidos pela própria Oracle, além de programas desenvolvidos em várias linguagens para facilitar a vida do DBA Oracle.
Caso você não encontre o script desejado, existem ainda links para outros sites com mais opções de scripts.
Vale a pena navegar.

Oracle – Replicação Avançada

Apesar de causar temores a algumas pessoas, inclusive a mim em um primeiro momento, a replicação avançada do Oracle é fácil de ser configurada e funciona perfeitamente.
Primeiro vamos analisar quais são as vantagens dessa replicação:
1) Permite alteração nos dois sites;
2) Se o link ou um dos servidores estiver fora do ar, o trabalho continua, e os servidores serão sincronizados no momento que a conexão for restabelecida.
3) Permite configurar a resolução de conflito, ou seja, se um mesmo dado for alterado nos dois sites ao mesmo tempo, você pode definir uma regra para tratar este caso. Por exemplo, vale o registro que foi alterando por último.
4) A replicação é rápida e leve (não causa grande trafego na rede), pois são replicadas apenas as alterações na base de dados e não a tabela inteira, como outras soluções.
5) O processo não é on-line, evitando travamentos devido a lock. Os dados são alterados em um site e só depois da operação concluída, são replicados para o outro site.
6) O tempo de replicação pode ser configurado com o intervalo desejado, ou seja, a replicação pode ocorrer a cada 1 segundo ou de 4 em 4 horas.
7) Você pode definir quais objetos serão replicados e o intervalo de replicação para cada um.

No link que se encontra no título deste artigo, você pode obter todos os scripts necessários para você trabalhar com a replicação avançada.

Para você que vai trabalhar com a replicação avançada pela primeira vez, sugiro que siga os seguintes passos para os primeiros testes:
1) Instale dois servidores Oracle do zero, lembrando de marcar a opção de Replicação Avançada no momento da criação do banco de dados;
2) A configuração GLOBAL_NAMES deve estar marcada ( Arquivo init.ora ou configuração da instancia do Oracle).
3) Os DBLinks devem ter o mesmo nome da configuração da instancia do Oracle (DBlink tem de ser igual ao Global Names da instancia de destino - execute select global_name from global_name no banco de dados de destino do DBLink )
4) Siga o script corretamente (Já montei duas replicações utilizando o Oracle 8.1.7 e funcionam perfeitamente).

Caso você já possua um servidor e deseje habilitar a replicação avançada, você deve seguir os passos do seguinte link http://www-rohan.sdsu.edu/doc/oracle/server803/A53722_01/ch6.htm#1021276 .

Boa Sorte.

Oracle – Problemas com o DBLink

Criar um DBLink é um processo simples e muito utilizado hoje em dia. No link que se encontra no título deste artigo, você pode obter todas as informações necessárias sobre DBLink.
O meu problema foi que o meu DBLink nunca funcionava. Eu possuía a seguinte configuração
Servidor Origem : DB01
Servidor Destino : DB02
Nome do DBLink : TESTE
O Oracle possui uma configuração GLOBAL_NAMES (Arquivo de INIT.ORA ou gerenciamento da instancia) e se essa configuração estiver como TRUE, que era o meu caso, o nome do DBLink deve ser igual ao nome da instancia do Oracle, ou seja, se estou tentando conectar a instancia DB02, o nome do meu DBLink deve ser DB02.
A configuração GLOBAL_NAMES = TRUE é necessária em casos que você precisa utilizar alguns recursos avançados do Oracle, entre eles a Replicação, que é o meu caso.
Caso você não utilize estes recursos, pode configurar o GLOBAL_NAMES = FALSE e utilizar o nome que quiser para o DBLink.

quarta-feira, maio 25, 2005

PowerBuilder - Conectando ao Oracle 10

Conversando com a equipe da Sybase, fui informado que o PowerBuilder ( a Sybase fornece suporte a versão 8,9 e 10) não possui um mecanismo para conexão ao Oracle 10. A previsão de liberar em breve o suporte ao Oracle 10 (PBO10xx.DLL ). Enquanto isso, é recomendado que se utilize a API para Oracle 9 (O90 driver) ou utilizar a conexão OLE DB.
Veja o Link no Título deste Post para mais informações.

terça-feira, maio 24, 2005

SQL Server - Performance 2005 X 2000

No link acima, vocês podem verificar um teste básico que demonstra a melhora de performance do SQL Server 2005 com relação ao SQL Server 2000. Neste teste, o SQL Server 2005 obteve um ganho de performance de 18,5 % com relação ao SQL Server 2000.

Oracle 8 – Perder a Senha do usuário internal ou sys

Se ocorrer a perda do usuári0o internal ( utilizado para criar, apagar ou editar uma instancia do Oracle), você pode utilizar os seguintes passos para resetar o senha

1 – Vá ao command, na pasta $ORACLE_HOME/bin
2 – Digite o comando orapwd80 file= senha=
Neste ponto será gerado um arquivo que você utilizará para substituir o arquivo do Oracle que armazena este senha criptografado,
3 – vá ao diretório $ORACLE_HOME/database e mud o nome do arquivo PWD.ORA para PWD.OLD ( este arquivo pode estar oculto e o windows configurado para não exibi-lo)
4 – Mude o nome do arquivo que você gerou no passo 2 para PWD.ORA
5 – Utilize o novo senha

Boa Sorte.

sexta-feira, maio 20, 2005

Microsoft Visual Source Safe - Melhorando a Performance

Está melhoria de perfomance se aplica principalmente para quem trabalhou com as versões anteriores do VSS.
Ao instalar o VSS 6, não é feito upgrade da base de dados, o que pode gerar uma perda de performance na utilização do VSS. Para obter uma melhor performance, siga os passos abaixo:
1) Verifique se a sua base já está atualizada. Para isso, verifique se existe a pasta ...\VSS\data\labels . Caso exista, não é necessário seguir este procedimento, pois a sua base já se encontra atualizada
2) Certifique-se que nenhum usuário está utilizando o VSS
3) Faça um backup do VSS
4) Execute o comando “DDUPD \\server\share\vss\data
Boa sorte.

quinta-feira, maio 19, 2005

Oracle - Respostas para as dúvidas sobre Replicação

Neste Link, você poderá obter todas as respostas sobre as questões relativas a replicação de dados do Oracle.

PowerBuilder – Implementando Single-Threaded Apartments

É possível implementar uma aplicação Single-threaded Apartments utilizando o PowerBuilder, o mesmo recurso utilizado para MultiThread no VisualBasic 6.
Primeiro deixa-me explicar o que é isso? Single-threaded Apartments é o processo de simular MultiThread, ou seja, N processos executarem ao mesmo tempo dentro da mesma aplicação, por exemplo, hoje quando você executa um comando SQL ou uma Procedure a aplicação fica travada até o momento em que a aplicação retorna o resultado do comando SQL. Com MultiThread, a aplicação não fica travada, permitindo você executar N consultas\procedures ao mesmo tempo, trabalhando em paralelo.
A diferença o MultiThread verdadeiro para o Single-threaded apartments é que o primeiro permite utilizar N processadores (Varias threads), pois utiliza área de memória diferente e o segundo utiliza apenas um processador (Uma thread), pois compartilha área de memória.
O processo de implementação do Single-threaded apartments é simples é funciona bem. Na verdade você tem que ter um objeto que é Thread, um para gerenciar o processo e outro para fazer a comunicação entre os dois.Para os interessados no código para essa implementação, me envie um comentário com o e-mail que eu repasso um pequeno exemplo dessa implementação.

SQL Server - Problemas na replicação com troca de nome do servidor.

Quando você está tentando configurar a replicação no SQL Server 2000 e recebe a mensagem:
SQL Server Enterprise Manager could not configure '\' as the Distributor for '\' . Error 18483: Could not connect to server '\' because 'distributor_admin' is not defined as a remote login at the server.
Geralmente, este erro ocorre porque o servidor SQL Server foi Renomeado ou foi montado a partir da imagem de outro servidor.Para resolver o problema, clique no Link deste artigo que irá direcioná-lo para a página da Microsoft com a solução para o mesmo.

quarta-feira, maio 18, 2005

PowerBuilder - Pesquisa 2005

Abaixo está um link para a pesquisa realizada pelo Sybase sobre a utilização do PowerBuilder
http://www.visual-expert.net/survey/survey.php?TEMPL=survey_pb_2005_us.htm

Esta pesquisa é anual, se quiser ver o resultado da pesquisa no ano passado, verifique o link abaixo.
http://www.visual-expert.com/us/info/survey_pb_2004_results.htm.

terça-feira, maio 10, 2005

PowerBuilder – Trace de Banco de Dados

O PowerBuilder possui um Trace que pode nos ajudar muito. Este trace grava em um arquivo todos os comandos que foram executados pelo aplicativo, incluindo o tempo gasto e as mensagens de erros que ocorreram.

Com o resultado do trace gerado, você pode descobrir um erro que está ocorrendo na base de dados ou melhorar a performance de uma rotina, através dos tempos retornados pelo Trace.

Para habilitar o Trace, você deve incluir a palavra TRACE antes do DBMS na conexão com o banco de dados, por exemplo:

// Profile DBTeste
SQLCA.DBMS = "TRACE O84 Oracle8/8i (8.x.4+)"
SQLCA.LogPass = <*********>
SQLCA.ServerName = "DB_DES"
SQLCA.LogId = "teste"
SQLCA.AutoCommit = False
SQLCA.DBParm = "CommitOnDisconnect='No',DelimitIdentifier='No',PBCatalogOwner='teste'"

Uma dica é adaptar a aplicação de forma que o trace possa ser habilitado através de uma chave do registry, assim você pode habilitar o Trace em qualquer momento, diretamente no executável.
Para analise de performance, desenvolvi um aplicativo que lê o trace e retorna os comandos que gastaram mais tempo. Quem tiver interesse neste aplicativo, envie um e-mail para tpereira@rtconsult.com.br, para que eu possa enviar o aplicativo.

sexta-feira, abril 29, 2005

PowerBuilder - Criação de DataWindow/DataStore Dynamica

O Exemplo abaixo, mostra como criar uma DataWindow/DataStore dinamicamente, a partir de um SQL.

string VLSerror_syntaxfromSQL, VLSerror_create, VLSnew_syntax, VLSMsgErr, VLSDescricao, VLSLinha Long VLLRow, VLLCodigo, VLLRet, vltotitens
// botão p/ seleção de ocorrências if dwo.name = 'b_ocorr' then lb_ocorr.Visible = True // sql p exibição das ocorrências no listbox VISnew_sql = 'select distinct mi.num_seq_ocorr_prioritaria codigo, oc.dsc_res_ocorr descricao ' + & 'from movto_inspecao mi, ocorrencia oc ' + & 'where mi.num_seq_ocorr_prioritaria = oc.num_seq_ocorr ' + & 'and mi.num_seq_ocorr_prioritaria is not null ' + & 'and mi.cod_proj = ' + String(VILProjOrig) end if
// botão p/ seleção de impedimentosif dwo.name = 'b_imped' then lb_imped.Visible = True // sql p exibição das impedimentos no listbox VISnew_sql = 'select distinct mi.cod_imp_insp codigo, im.dsc_imp_insp descricao ' + & 'from movto_inspecao mi, impedimento_inspecao im ' + & 'where mi.cod_imp_insp = im.cod_imp_insp ' + & 'and mi.cod_imp_insp is not null ' + & 'and mi.cod_proj = ' + String(VILProjOrig)
end if
// Monta dinamicamente o objeto datastore contendo as ocorrências ou impedimentos p/ seleçãoVLSnew_syntax = wtr_trans.SyntaxFromSQL(VISnew_sql, "", VLSerror_syntaxfromSQL)if Len(VLSerror_syntaxfromSQL) > 0 then VLSMsgErr = 'Erro: '+ VLSerror_syntaxfromSQL f_msg(VLSMsgErr, stopsign!) return 1else VLLRet = VIDSSelecao.Create(VLSnew_syntax, VLSerror_create) if Len(VLSerror_create) > 0 or VLLRet <> 1 THEN VLSMsgErr = 'Erro: '+ VLSerror_create f_msg(VLSMsgErr, stopsign!) return 1 end ifend if
VIDSSelecao.SetTransObject(wtr_trans)VIDSSelecao.Retrieve()

Site do Celso Cortes

Excelente site de tecnologia contendo informações diversas sobre tecnologia. Vale a pena fazer uma visita!

quarta-feira, abril 27, 2005

PowerBuilder - Mudança de automática da Resolução do Monitor

Na CFLCL, houve a necessidade de se mudar a resolução de todos os monitores, automáticamente, para a configuração 1024X 768.
Para isso, usamos o sequinte código abaixo.

$PBExportHeader$w_res.srw$PBExportComments$change resolutionforwardglobal type w_res from windowend typetype cb_2 from commandbutton within w_resend typetype cb_1 from commandbutton within w_resend typetype devmode from structure within w_resend typeend forward
type devmode from structure character dmdevicename[32] integer dmspecversion integer dmdriverversion integer dmsize integer dmdriverextra long dmfields integer dmorientation integer dmpapersize integer dmpaperlength integer dmpaperwidth integer dmscale integer dmcopies integer dmdefaultsource integer dmprintquality integer dmcolor integer dmduplex integer dmyresolution integer dmttoption integer dmcollate character dmformname[32] integer dmlogpixels long dmbitsperpel long dmpelswidth long dmpelsheight long dmdisplayflags long dmdisplayfrequency long dmicmmethod long dmicmintent long dmmediatype long dmdithertype long dmreserved1 long dmreserved2 long dmPanningWidth long dmPanningHeightend type
global type w_res from windowinteger x = 837integer y = 388integer width = 795integer height = 496boolean titlebar = truestring title = "Untitled"boolean controlmenu = trueboolean minbox = trueboolean maxbox = trueboolean resizable = truecb_2 cb_2cb_1 cb_1end typeglobal w_res w_res
type prototypesFUNCTION long ChangeDisplaySettingsA (ref devmode lpst, ulong Flags) & LIBRARY "USER32.DLL"FUNCTION long EnumDisplaySettingsA (string lpszDeviceName,long iModeNum,ref devmode lpst) & LIBRARY "USER32.DLL" end prototypes
type variables
end variableson w_res.createthis.cb_2=create cb_2this.cb_1=create cb_1this.Control[]={this.cb_2,&this.cb_1}end on
on w_res.destroydestroy(this.cb_2)destroy(this.cb_1)end on
type cb_2 from commandbutton within w_resinteger x = 224integer y = 220integer width = 297integer height = 88integer taborder = 2integer textsize = -10integer weight = 400fontpitch fontpitch = variable!fontfamily fontfamily = swiss!string facename = "Arial"string text = "1024x768"end type
event clicked;devmode dmlong astring ls_nulosetnull(ls_nulo)
//get current configurationa = EnumDisplaySettingsA(ls_nulo,-1,dm)
if a = 0 then messagebox('EnumDisplaySettingsA',"error") returnend if
//set configurationdm.dmPelsWidth = 1024dm.dmPelsHeight = 768
//Change current configurationa = ChangeDisplaySettingsA(dm, 0)if a < 0 then messagebox('ChangeDisplaySettingsA',"error") returnend if end event
type cb_1 from commandbutton within w_resinteger x = 224integer y = 124integer width = 297integer height = 88integer taborder = 1integer textsize = -10integer weight = 400fontpitch fontpitch = variable!fontfamily fontfamily = swiss!string facename = "Arial"string text = "800x600"end type
event clicked;devmode dmlong astring ls_nulosetnull(ls_nulo)
//get current configurationa = EnumDisplaySettingsA(ls_nulo,-1,dm)
if a = 0 then messagebox('EnumDisplaySettingsA',"error") returnend if
//set configurationdm.dmPelsWidth = 800dm.dmPelsHeight = 600
//Change current configurationa = ChangeDisplaySettingsA(dm, 0)if a < 0 then messagebox('ChangeDisplaySettingsA',"error") returnend if
end event

quarta-feira, março 30, 2005

Windows XP – Habilitando Remote Desktop Connection

A partir do Windows XP, já podemos utilizar o Remote Desktop Connection (uma versão light do Terminal Server), para simularmos uma sessão em uma máquina remota.
Para mim, a desvantagem do Remote Desktop em comparação com outros softwares ( VNC, Netmetting, PcAnyWhere e etc...) é que no momento que você conecta na máquina remota, a mesma é bloqueada, não permitindo que ninguém veja o que está ocorrendo. Por um lado e ruim, mas por outro é bom se levarmos em consideração a segurança.
Para habilitar essa funcionalidade em uma máquina em uma Rede Local, siga os seguintes passos (Em português):
1) Na maquina que será o Host ( Máquina na qual você irá conectar), siga os seguintes passos
a. Clique com o botão direito em Meu Computador e selecione propriedades
b. Vá a pasta Remoto e Habilite os dois CheckBoxes que existem. ( Se exibir uma mensagem, confirme)
c. Se o usuário que vai utilizar o Remote Desktop não for administrador da máquina local, clique no botão Selecionar usuários remotos e insira o usuário desejado.
2) Na máquina Guest ( Máquina que você irá utilizar para conectar a outra máquina ou Terminal Burro), siga os seguintes passos
a. Vá a Todos os Programas à Acessórios à Comunicação à Conexão a área de trabalho Remota ( No Windows Xp, está opção já existe por default. Em outros sistemas operacionais, o software deve ser baixado da Web e instalado http://www.microsoft.com/windowsxp/downloads/tools/rdclientdl.mspx )
Boa Sorte!!

PowerBuilder – Erro no Layout

Em algumas situações, notamos que o PowerBuilder começa a cancelar (Fechar, GPF e etc…) quando abrimos alguns objetos. Muitas vezes, apenas de abrir o PowerBuilder já ocorre erro, isso porque ele tenta abrir o objeto que está causando erro e o mais inacreditável é que o erro só ocorre em uma máquina especifica e muitas vezes, apenas com um usuário específico.
Este problema ocorre porque o Layout do PowerBuilder corrompeu. O Layout é responsável por posicionar os frames de uma janela e armazena a última configuração que foi salva. Além disso, o Layout é especifico de máquina e usuário, por isso, muitas vezes ocorre apenas para um usuário especifico.
Para resolver este problema, você deve resetar o Layout do PowerBuilder. Existem duas formas de fazer isso:
1) Menu View à Layouts à Default
2) Apagar a chave do registry responsável pelo layout (HKEY_CURRENT_USER\Software\Sybase\PowerBuilder\9.0\Layout )

Mas, se mesmo assim o problema continuar ocorrendo, recomendo executar um Full Build e um Optimize nas PBls.