Blog criado para documentar e disseminar o conhecimento tecnológico adquirido por Thiago Campos Pereira e colaboradores.
quarta-feira, junho 15, 2005
Oracle – Criando usuário com acesso Limitado
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 Meeker ”Try 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
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
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
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
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
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
Veja o Link no Título deste Post para mais informações.
terça-feira, maio 24, 2005
SQL Server - Performance 2005 X 2000
Oracle 8 – Perder a Senha do usuário internal ou sys
1 – Vá ao command, na pasta $ORACLE_HOME/bin
2 – Digite o comando orapwd80 file=
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
4 – Mude o nome do arquivo que você gerou no passo 2 para PWD
5 – Utilize o novo senha
Boa Sorte.
sexta-feira, maio 20, 2005
Microsoft Visual Source Safe - Melhorando a Performance
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
PowerBuilder – Implementando Single-Threaded Apartments
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.
SQL Server Enterprise Manager could not configure '
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
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
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
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
quarta-feira, abril 27, 2005
PowerBuilder - Mudança de automática da Resolução do Monitor
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
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
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.