quarta-feira, 27 de outubro de 2010

Como mudar (trocar) o nome da máquina e manter o Sql Server 2000 funcionando

Na última semana realizamos alteração do nome de um servidor Sql Server e os Jobs do Sql Server Agent pararam de funcionar.
Tentamos excluir os Jobs e ocorreu a mensagem abaixo.



Realizamos 2 alterações para que o serviço tivesse seu funcionamento normalizado:
1. Atualizamos nome do Servidor
SELECT @@servername
sp_dropserver <'name_returned'>
sp_addserver <'correct_servername'>, 'local'

2. Atualizamos o valor do campo "originating_server" da tabela de jobs
USE msdb
GO
DECLARE @server sysname
SET @server = CAST(SERVERPROPERTY('ServerName')AS sysname)
UPDATE sysjobs
SET originating_server = @server
WHERE originating_server = 'wrong_servername'

Após atualizar as configurações do Sql Server foi possível excluir os Jobs que não mais desejados

Link de referência:
http://blog.sqlauthority.com/2006/12/20/sql-server-fix-error-14274-cannot-add-update-or-delete-a-job-or-its-steps-or-schedules-that-originated-from-an-msx-server-the-job-was-not-saved/

segunda-feira, 25 de outubro de 2010

Como importar tabelas para uma tablespace diferente no Oracle

No nosso exemplo iremos mover as tabelas do usuario01 para o usuario02

Usuários
usuario01/senha00
usuario02/senha00
system/senha01

Tablespaces
tsd_usuario02.dbf: tablespace de dados para o usuário02
tsi_usuario02.dbf: tablespace de indíces para o usuário02


O modo mais comum para mover as tablespace é utilizar o comando "move tablespace" após utilizar os campos "exp" e "imp"
Exemplo: select 'alter table usuario02.' || table_name || ' move tablespace tsd_usuario02;' from user_tables

Quando há campos do tipo blob nas tabelas, também é necessário utilizado o comando "move lob".
Exemplo: select 'alter table usuario02.' || table_name || ' move lob (' || column_name || ') store as (tablespace tsd_usuario02);' from dba_lobs where owner = 'USUARIO02'

No nosso caso, temos na mesma tabela campos do tipo "blob" e "long raw" que impossilita o uso do comando "move lob".
Para esse caso fixemos os seguintes passos:
1. Exportamos o script de criação das tabelas do usuario01
2. Alteramos o script para comportar as tablespaces do usuario02
3. Criamos o usuario02
4. Desabilitamos as constraints do usuario02
5. Importarmos os dados do usuario01 para o usuario02
6. Habilitamos as constraints do usuario02
7. Atualizamos os indíces
8. Atualizamos as estatísticas


Abaixo temos os passos realizados
exp userid=usuario01/senha00 full=y file=usuario01.dmp grants=y
imp fromuser=usuario01 file=usuario01.dmp indexfile=qtiusuario02.sql touser=qtiusuario02 (system/senha01)
. retirar os marcardos REM
. alterar as tablespaces para usuario02 (tsi_qti)
. retirar comentarios "... x rows"

sqlplus (system/senha01)
create tablespace tsdqtiusuario02 datafile 'd:\oraclexe\oradata\tsd_usuario02.dbf' size 100m autoextend on next 50m;

create tablespace tsiqtiusuario02 datafile 'd:\oraclexe\oradata\tsi_usuario02.dbf' size 50m autoextend on next 50m;

create user qtiusuario02 identified by senha00 default tablespace tsdqtiusuario02 temporary tablespace temp;

grant connect, resource to qtiusuario02;

@qtiusuario02.sql; (senha00)

select 'alter table ' || owner || '.' || table_name || ' disable constraint ' || constraint_name || ';' from user_constraints
--> executar o resultado do comando (qtiusuario02.disableconstraints.sql): @qtiusuario02.disableconstraints.sql;
exit

imp fromuser=usuario01 file=usuario01.dmp touser=qtiusuario02 ignore=y (system/senha01)

sqlplus (system/senha01)
select 'alter table ' || owner || '.' || table_name || ' enable constraint ' || constraint_name || ';' from user_constraints
--> executar o resultado do comando (qtiusuario02.enableconstraints.sql): @qtiusuario02.enableconstraints.sql;

select 'alter index qtiusuario02.' || index_name || ' rebuild tablespace tsiqtiusuario02;' from user_indexes where index_type = 'NORMAL'
--> executar o resultado desse comando

select 'analyze table qtiusuario02.' || table_name || ' compute statistics;' from user_tables
--> executar o resultado desse comando

sexta-feira, 22 de outubro de 2010

css hover no IE6

É sabido que hover não funciona no IE6.
Sua funcionalidade foi implementada somente do IE7 para frente.

Temos um Menu dropdown feito em CSS, utilizando o hover.
Claro, não funcionou no IE6.

Estudamos soluções javascript pura, csshover3.htc, jquery e falhou em todas elas.
A solução que melhor atendeu nossa demanda foi o projeto ie7-js, hoje hosteado pelo google.

Basta colocar o código abaixo dentro do head e o Browser irá se comportar como o IE7:

<!--[if lt IE 7]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE7.js"></script>
<![endif]-->


Link de referência:
http://code.google.com/p/ie7-js/

sexta-feira, 15 de outubro de 2010

Como mudar (trocar) o nome da máquina e manter o Oracle 10g funcionando

Na última semana realizamos alteração do nome de um servidor Oracle e o serviço TSN Listener (OracleXETNSListener) parou de funcionar.

Realizamos 2 alterações para que o serviço tivesse seu funcionamento normalizado: atualizamos os arquivos "tnsnames.ora" e "listener.ora" com o novo novo do servidor.
Em seguida, reiniciamos os serviços OracleServiceXE e OracleXETNSListener;

No nosso caso, utilizamos o Oracle XE e os arquivos relacionados ficam no diretório "D:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN"

Link de referência:
http://geekswithblogs.net/svanvliet/archive/2007/04/03/how-to-change-windows-hostname-and-keep-oracle-10g-running.aspx

Como gerenciar profiles no IBM Websphere Application Server

IBM WebSphere Application Server 7 (WAS 7): manageprofiles.sh
O utilitário manageprofiles.sh é utilizado para gerenciar profiles. Entre seus aspectos, podemos excluir um profile.

Listar os profiles existentes:
/bin/manageprofiles.sh -listProfiles

Excluir um profile: nesse exemplo, o nome do profile é "appsrv01"
/bin/manageprofiles.sh -delete -profileName appsrv01
Em seguida, foi excluído fisicamente o diretório do profile "appsrv01".


Site de referência:
http://www.webspheretools.com/sites/webspheretools.nsf/docs/Delete%20a%20profile%20using%20manageprofiles.sh%20in%20WebSphere%207%20on%20centos5

ADMIN_CMD DB2 - Comandos CLP

Comandos como export, import, load, ... são chamados comandos CLP (Command Line Processor) e não podem ser executados diretamente por uma aplicação cliente via ODBC ou JDBC como fazemos com comandos SQL (select, insert, update, ...)
Para executar os comandos CLP existe uma procedure chamada "admin_cmd" utilizada para esse propósito.

Pequeno exemplo Java para chamada dessa procedure:
Nesse exemplo temos a tabela "banco01.area" no servidor "servidor01"

Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
con = DriverManager.getConnection("jdbc:db2://servidor01:50000/" + "banco01", "usuario", "senha");
String sql = "CALL SYSPROC.ADMIN_CMD(?)";
proc_stmt = con.prepareCall(sql);
String param = "export to c:\\temp\\area4.txt of del messages on server select * from area";
proc_stmt.setString(1, param);

rs = proc_stmt.executeQuery();
if (rs.next()) {
System.out.println("Total number of rows exported : " + rs.getString(1));
System.out.println("SQL for retrieving the messages: " + rs.getString(2));
System.out.println("SQL for removing the messages : " + rs.getString(3));

System.out.println(" ");
proc_stmt_msg = con.prepareCall(rs.getString(2));
rs_msg = proc_stmt_msg.executeQuery();
while (rs_msg.next()) {
System.out.println(rs_msg.getString(1) + rs_msg.getString(2));
}
proc_stmt_msg.close();
rs_msg.close();
}

proc_stmt.close();
rs.close();
con.close();

Link de referência:
http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.apdv.sample.doc/doc/java_jdbc/s-AdmCmdImport-java.htm