Movendo usuários entre bases II
5 de Maio de 2010, 0:00 - sem comentários aindaHá tempos atrás eu postei este script tosco para extrair usuários com suas respectivas senhas no Oracle. Eu sei, no PostgreSQL, basta um ‘pg_dumpall -r’ e tudo se resolve, mas no Oracle, você tem um pouco mais de trabalho, ainda mais se não quiser utilizar o ultra-super-mega-boga-hyper-duper-master-blaster-heavy-metal Database Control, também conhecido como Enterprise Manager e mais uma dúzia de apelidos.
Bom, o script a seguir cria um arquivo com os usuários, grupos (ok, o nome certo é ‘roles’), permissões em tabelas, privilégios de sistema, roles, quotas de tablespace e mais alguma coisa. Se você precisa atualizar bases entre versões diferentes (como do 9i para o 10g ou para o 11g), ou entre Sistemas Operacionais diferentes (se você tem o Oracle Enterprise dá para usar o conceito de tablespace transportável).
Enfim, todo DBA sabe utilizar as ferramentas de geração de Dump (exp ou expdp) e importação de Dump (imp, impdp). E quase todos costumam importar os dados por esquema e não tudo de uma vez (full=y). E como sempre, antes de importar o esquema, o usuário deve existir da base de destino.
Chega de blá, blá, blá. Segue o script:
-- -- mov_user.sql -- -- Exporta usuários roles e privilegios. -- -- -- Criado por Fábio Telles Rodriguez -- -- Última atualização: 05/05/2010 -- -- -- Ajusta parâmetros de visualização do SQL*Plus SET DEFINE OFF SET PAGESIZE 0 SET WRAP ON SET TRIMSPOOL ON SET SERVEROUTPUT ON SET VERIFY OFF SET FEED OFF SET HEADING OFF SET LINESIZE 120 -- Gera arquivo em mov_user.sql SPOOL mov_user_.sql -- Verifica se está conectado com o usuário SYS WHENEVER SQLERROR EXIT; DECLARE v_user varchar(100); BEGIN SELECT user INTO v_user FROM dual WHERE user = 'SYS'; EXCEPTION WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20000, 'ERRO! Você deve estar conectado como SYS para rodar este script!!!'); END; / --Cria usuários SELECT 'CREATE USER ' || LOWER(username) || DECODE (password, 'EXTERNAL',' IDENTIFIED EXTERNALLY', 'GLOBAL',' IDENTIFIED GLOBALLY AS ''' || external_name, ' IDENTIFIED BY VALUES ''' || password || '''') || CHR(10) || ' DEFAULT TABLESPACE ' || default_tablespace || CHR(10) || ' TEMPORARY TABLESPACE ' || temporary_tablespace || CHR(10) || ' PROFILE ' || profile || CHR(10) || DECODE (account_status, 'OPEN', ' ACCOUNT UNLOCK;', 'LOCKED', ' ACCOUNT LOCK;', 'LOCKED(TIMED)', ' ACCOUNT LOCK;', 'EXPIRED & LOCKED', ' ACCOUNT LOCK PASSWORD EXPIRE;', 'EXPIRED & LOCKED(TIMED)', ' ACCOUNT LOCK PASSWORD EXPIRE;', 'EXPIRED(GRACE) & LOCKED', ' ACCOUNT LOCK PASSWORD EXPIRE;', 'EXPIRED(GRACE) & LOCKED(TIMED)', ' ACCOUNT LOCK PASSWORD EXPIRE;', 'EXPIRED', ' ACCOUNT UNLOCK PASSWORD EXPIRE;', 'EXPIRED(GRACE)', ' ACCOUNT UNLOCK PASSWORD EXPIRE;') mov_user FROM dba_users WHERE default_tablespace NOT IN ('EXAMPLE','DRSYS','CWMLITE','ODM','XDB','SYSTEM','SYSAUX') ORDER BY default_tablespace, username ; -- Concede quotas para usuários SELECT 'ALTER USER ' || LOWER(username) || ' QUOTA UNLIMITED ON ' || LOWER(tablespace_name) || ';' FROM dba_ts_quotas; -- Especifica planos de recursos para usuários SELECT 'EXEC DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING' || CHR(10) || '(DBMS_RESOURCE_MANAGER.ORACLE_USER, ''' || LOWER(username) || ''', ''' || LOWER (INITIAL_RSRC_CONSUMER_GROUP) || ''');' FROM dba_users WHERE default_tablespace NOT IN ('EXAMPLE','DRSYS','CWMLITE','ODM','XDB','SYSTEM','SYSAUX') ORDER BY default_tablespace, username ; -- Cria ROLEs SELECT 'CREATE ROLE ' || LOWER(name) || ' ' || DECODE (password, NULL,'NOT IDENTIFIED;', 'EXTERNAL',' IDENTIFIED EXTERNALLY;', 'GLOBAL',' IDENTIFIED GLOBALLY', ' IDENTIFIED BY VALUES ''' || password || ''';') FROM sys.user$ WHERE type# = 0 AND name NOT IN ('PUBLIC', '_NEXT_USER', 'AQ_ADMINISTRATOR_ROLE', 'AQ_USER_ROLE', 'AUTHENTICATEDUSER', 'CONNECT', 'CTXAPP', 'DBA', 'DELETE_CATALOG_ROLE', 'EJBCLIENT', 'EXECUTE_CATALOG_ROLE', 'EXP_FULL_DATABASE', 'GATHER_SYSTEM_STATISTICS', 'GLOBAL_AQ_USER_ROLE', 'HS_ADMIN_ROLE', 'IMP_FULL_DATABASE', 'JAVADEBUGPRIV', 'JAVAIDPRIV', 'JAVASYSPRIV', 'JAVAUSERPRIV', 'JAVA_ADMIN', 'JAVA_DEPLOY', 'LOGSTDBY_ADMINISTRATOR', 'MGMT_USER', 'OEM_ADVISOR', 'OEM_MONITOR', 'PLUSTRACE', 'RECOVERY_CATALOG_OWNER', 'RESOURCE', 'SCHEDULER_ADMIN', 'SELECT_CATALOG_ROLE', 'SNMPAGENT','WM_ADMIN_ROLE', 'XDBADMIN', 'XDBWEBSERVICES') ; -- Gera GRANTs em objetos SELECT 'GRANT ' || LOWER(privilege) || ' ON ' || LOWER(owner) || '.' || LOWER(table_name) || ' TO ' || LOWER(grantee) || DECODE(grantable,'YES','WITH GRANT OPTION',' ') || DECODE(hierarchy,'YES', 'WITH HIERARCHY OPTION;',';') FROM dba_tab_privs p, dba_users u WHERE u.username = p.grantee AND u.default_tablespace NOT IN ('EXAMPLE','DRSYS','CWMLITE','ODM','XDB','SYSTEM','SYSAUX') ; -- Gera GRANTs em colunas SELECT 'GRANT ' || LOWER(privilege) || '(' || LOWER(column_name) || ')' || ' ON ' || LOWER(owner) || '.' || LOWER(table_name) || ' TO ' || LOWER(grantee) || DECODE(grantable,'YES','WITH GRANT OPTION;',';') FROM dba_col_privs; -- Gera GRANTs em roles SELECT 'GRANT ' || LOWER(granted_role) || ' TO ' || LOWER(grantee) || DECODE(admin_option,'YES','WITH ADMIN OPTION;',';') FROM dba_role_privs p, dba_users u WHERE u.username = p.grantee AND u.default_tablespace NOT IN ('EXAMPLE','DRSYS','CWMLITE','ODM','XDB','SYSTEM','SYSAUX') ; -- Altera roles que não são padrão DECLARE v_non_default NUMBER; BEGIN SELECT COUNT(*) INTO v_non_default FROM dba_role_privs WHERE default_role = 'NO'; IF v_non_default > 0 THEN FOR u IN (SELECT DISTINCT grantee FROM dba_role_privs WHERE default_role = 'NO' ORDER BY grantee) LOOP DBMS_OUTPUT.PUT('ALTER USER ' || LOWER(u.grantee) || ' DEFAULT ROLE ALL EXCEPT '); SELECT count(*) INTO v_non_default FROM dba_role_privs WHERE grantee = u.grantee AND default_role = 'NO'; FOR r IN (SELECT rownum, granted_role FROM dba_role_privs WHERE grantee = u.grantee AND default_role = 'NO') LOOP DBMS_OUTPUT.PUT(LOWER(r.granted_role)); IF r.rownum != v_non_default THEN DBMS_OUTPUT.PUT(','); END IF; END LOOP; DBMS_OUTPUT.PUT_LINE(';'); END LOOP; END IF; END; / -- Gera GRANTs em privilégios de sistema SELECT 'GRANT ' || LOWER(privilege) || ' TO ' || LOWER(grantee) || DECODE(admin_option,'YES','WITH ADMIN OPTION;',';') FROM dba_sys_privs p, dba_users u WHERE u.username = p.grantee AND u.default_tablespace NOT IN ('EXAMPLE','DRSYS','CWMLITE','ODM','XDB','SYSTEM','SYSAUX') ; SPOOL OFF
Sugestões de melhoria são bem vindas.
COMMIT
25 de Outubro de 2009, 0:00 - sem comentários aindaO sol nascendo aqui na Unicamp é um espetáculo que vale a pena ser visto. Aqui da piscina do hotel eu acordei cedo para colocar as idéias no lugar. Ainde temos muito trabalho pela frente. Colocar as palestras no site, acertar toda a parte burocrática e acertar um problema ou outro.
Mas ontem terminamos o evento. Como sempre, muitos problemas, muito mais do que os participantes do evento possam imaginar. Muitos erros, mas também muito aprendizado com os erros das edições anteriores.
Novos patrocinadores, novos palestrantes, novos temas, novos organizadores, novos participantes, novos clientes, novas idéias. Sim. Muita coisa nova. Sobre tudo, novos amigos, novas perspectivas, novos horizontes.
Se o primeiro PGCon Brasil, em 2007, foi um marco em termos de organização da comunidade, hoje, em 2009 temos um novo marco. As pessoas bateram à nossa porta, entraram no evento, subiram no palco e disseram: “Hey, nós estamos utilizando o PostgreSQL em missão crítica aqui, precisamos da ajuda de vocês”. Sim, o PostgreSQL está crescendo e tomando de assalto grandes CPDs. Não é mais algo que entra pela porta dos fundos. Muita gente já testou, já sabe que funciona e também conhece suas peculiaridades. Já temos casos de implantações grandes rodando há alguns anos. Não é mais uma aventura, é uma realidade.
Sim, muita gente não sabe disso. Temos muito o que caminhar. Mas quem acompanha as listas de discussão (você AINDA não acompanha?), o planeta e principalmente acompanha os nossos eventos sabe que as coisas estão mudando. Pare para pensar como eram as coisas há 5 anos atrás?
Bom, ontem eu vi porquê valeu a pena esperar 3 anos para trazer o Bruce Momjian para o Brasil: em um dado momento ele contou um pouco da história do PostgreSQL e da sua história no PostgreSQL. De como ele começou a se dedicar ao projeto e de como aquilo inicialmente afetou a sua família e as suas finanças pessoais. Mas de repente, algo estranho começa a acontecer…. as pessoas começaram a utilizar o Postgres no Japão! Sim, em ambientes de produção. Estas pessoas criaram uma comunidade, com artigos, documentação, livros, profissionais qualificados e se tornaram o primeiro mercado a efetivamente utilizar o PostgreSQL para valer. A dedicação por anos de trabalho parece ter valido a pena.
Para mim isto tem um significado muito especial. Todos que me conhecem sabem que eu ainda não me sustento trabalhando com PostgreSQL. Mas já fazem alguns anos que eu tenho mantido algum tipo de contribuição para a comunidade brasileira. Sim, tem muita gente que começou muito antes e fez muito mais do que eu. Mas para mim e para muitos outros a questão é acreditar no projeto, acreditar nas pessoas. Cada vez que conheço um novo desenvolvedor do time central do Postgres eu fico mais empolgado. Pois são pessoas facinantes que estão desenvolvendo o Postgres. São pessoas que não são apenas desenvolvedores extraordinários. São pessoas com uma cultura e uma visão de mundo fantástica. É fantástico poder conversar com estas pessoas e saber que existem mais loucos pelo mundo. Que estes loucos fazem a diferença no mundo e que talvez você possa até fazer parte disso tudo, de dar a sua parte para construir um mundo mais próximo daquilo que você acredita que ele deveria ser.
YES, WE CAN!!!
IS DONE
IS JUST THE BEGINING…
Ok, devo postar mais sobre o evento, as fotos, as palestras, as pessoas, e outras coisas que rolaram no PGCon Brasil 2009, mas o dia já está claro e a água da piscina parece estar ótima…
Sobre o PGCon Brasil 2009
8 de Outubro de 2009, 0:00 - sem comentários aindaSim, faltam apenas 2 semanas para o PGCon Brasil 2009.
Hoje eu gostaria de fazer um checkpoint em tudo e parar para pensar em como as coisas estão e comentar algumas coisas que eu escuto aqui e ali.
Antes de mais nada, quem me conhece sabe que não é o primeiro evento que eu ajudo a organizar. Aqui no ABC Paulista, foram 3 Fóruns Regionais de Software Livre. Mas organizar aquilo era fichinha perto do PGCon Brasil. Todos os fornecedores eram da região, o local onde o evento se realizava ficava lá do lado e a gente fazia o evento praticamente a custo zero: não pagava o auditório, não tinha coffee break, não tinha inscrições com pagamento, etc. Tudo muito mais fácil.
A organização do PGCon Brasil 2009 começou logo depois que o de 2008 terminou. Começamos definindo onde ele seria. Fizemos pesquisa e coisa e tal… mas no final acabamos ficando no mesmo local, a Unicamp. Em novembro de 2008 já tinhamos a data e local fechados e uma proposta de captação de recursos encaminhados.
Claro que ninguém imaginava que o Latinoware seria marcado para a mesma data. Eu só fui descobrir isso lá pelo meio de 2009. Não, não tem como trocar a data do evento nessa altura do campeonato. A reserva do auditório tem que acontecer com no mínimo 6 meses de antecedência, os palestrantes já haviam comprado suas passagens, sem contar que a agenda dos palestrantes internacionais não é nada simples. Eles atendem inúmeras conferências pelo planeta e nós combinamos a participação do Bruce Momjian e do Magnus Hagander logo no começo do ano.
De qualquer forma, em julho de 2009 o evento já tinha site, patrocinadores, grade do evento e tudo o mais. Tudo nos conformes. Mas quem disse que começar a organizar o evento com um ano de antecedência vai te preparar para os imprevistos? Bom, em agosto e setembro a temporada de tornados estava aberta:
- Nosso maior patrocinador desistiu de repente. Problemas internos, um rombo de 10K no caixa;
- Um dos palestrantes e também um dos organizadores chave do evento não pode mais ir ao evento, problemas pessoais. Realocamos a palestra na grade a partir da fila de espera e alocamos novos voluntários para cuidar dos Lightning Talks;
- Vários problemas técnicos no sistema de inscrições. Fizemos várias adaptações no sistema para cobrir deficiências do ano passado. Com um pouco de atrazo e algumas cabeçadas, abrimos finalmente as inscrições;
- Tivemos que alugar uma tenda para abrigar o coffee break, pois chegamos a conclusão que não iria caber os estandes dos patrocinadores junto com o coffee e todos os participantes no saguão do centro de convenções. Nossa expectativa até agora é de termos 400 participanes;
- A locação dos auditórios da Unicamp dobrou de preço em relação ao ano passado. A brincadeira ficou por quase R$ 6K.
Vários problemas acontecem no meio do caminho. Estou citando apenas alguns aqui. Um detalhe é que tudo isso consome um recurso muito caro para todos nós: tempo. Não temos pessoas contratadas para tocar a organização. Todo mundo se vira no tempo livre que tem. E como todos que trabalham em TI sabem, este tempo livre costuma ser redirecionado para /dev/null com muita frequência. Assim, alguns organizadores do evento costumam ficar ausentes de tempos em tempos. Isso aconteceu comigo e acontece com quase todo mundo da equipe.
Bom, conseguimos novos patrocinadores, arrumamos o sistema de inscrições, investimos mais na divulgação do evento, criamos novos materiais promocionais da comunidade, como pins, chaveiros, canecas e adesivos, enfim demos a volta por cima.
Falta pouco agora. Espero que não tenhamos muitos imprevistos daqui até lá. Estamos acompanhando as inscrições e como sempre, quanto mais perto de evento fica, mais gente se inscreve. Bom, estamos no Brasil todo mundo deixa para a última hora… gostaria que nossos fornecedores entendessem isso!!!
Uma coisa que tem me preocupado é a questão do custo do evento. Muita gente me pergunta porquê é tão caro a inscrição. Sim, os preços estão variando entre R$80 a R$120 conforme a data de inscrição e estudantes pagam a metade. Bom, não acho que seja tão caro assim, você gasta muito mais com deslocamento e hospedagem do que isso. Mas em todo caso, eu faço questão de apresentar aqui alguns números para que se tenha idéia de quanto custa um “PGCon Brasil”…. sim, ao término do evento estaremos publicando uma prestação de contas. Mas vejamos alguns números que já temos até agora:
- Aluguél dos auditórios da Unicamp: R$5.969,00
- Tendas para o coffee break: R$ 2.520,00
- Coffee break: R$9.100,00
- Hospedagem para palestrantes: R$ 4.615,00
- Peças gráficas (arte + impressão): R$ 2.960,00
- Serviço de credenciamento: R$ 2.000,00
- Passagens de palestrantes internacionais: US$ 2.500,00
- 50% das passagens de 2 palestrantes nacionais: R$1.000,00
Bom, como se vê, o dinheiro dos patrocinadores está longe de cobrir os custos do evento. Estamos numa encruzilhada difícil: queremos fazer um evento com bons palestrantes, com uma grade rica e num lugar agradável. Ao mesmo tempo, temos um evento focado, que não cabe em um anfiteatro para 100 pessoas, mas também não atrai um púclico de milhares como o FISL.
Acho que seremos sempre assim, não acho que vamos chegar num público com muito mais de 500 pessoas mesmo em 2010. Nosso público não é apenas o iniciante, é para quem já quer algo mais. Para o público iniciante, fizemos 5 PGDays espalhados pelo país. Ninguém precisou pagar um centavo para entrar no PGDay. Logo se vê que ninguém aqui quer ficar milionário. Apenas queremos ter algum dinheiro no final do evento para poder começar o próximo.
Queremos trazer mais palestrantes internacionais, queremos auditórios confortáveis para todos, queremos um espaço privilegiado para aumentar o networking de um profissional que está se valorizando rapidamente no mercado.
Este ano eu fui no “Oracle Open World”. Você pensa que a Oracle, com os bilhões que ela gasta comprando empresinhas como a Sun faz um evento com inscrições baratinhas? Não senhor! O custo da inscrição é altíssimo. Pelo menos 10 vezes maior… e você nem ganha um cafezinho!
Então é isso, ainda temos 2 semanas. Enquanto isso, vou dando meus toques finais no meu tutorial e ajudando a resolver os últimos pepinos da organização.
Espero vocês lá!
[]s
Fábio Telles
Inscrições para o PGCon Brasil 2009 abrem em 16/09
15 de Setembro de 2009, 0:00 - sem comentários aindaAs inscrições para o PGCon Brasil 2009 estarão abertas a partir de 16/09.
Garanta já sua inscrição!!!
Aproveite e baixe também o cartaz do evento aqui.
Concurso “O elefante está entre nós”
22 de Agosto de 2009, 0:00 - sem comentários aindaNão, não é uma piada sem graça para me incentivar a perder peso. A história começou mais ou menos assim: Eu estava conversando por e-mail com o Sr. Bruce Momjian (um daqueles desenvolvedores do PostgreSQL que por algum motivo todo mundo já ouviu falar na comunidade…) sobre a possibilidade dele trazer alguns brindes dos EUA para o PGCon Brasil 2009. Ele me disse que era melhor ver com o Sr. Josh Berkus, e eis que encontrei ele no mesmo dia no IRC, lá no #postgresql.
Eu estava interessado em conseguir uns 100 pendrives personalizados com o nome do PostgreSQL. Ano passado o David Fetter trouxe uns e eles evaporaram instantaneamente quando o pessoal ficou sabendo. Sim, eu tenho um. Bom, o Josh disse que cada pendrive custava USD 8,00. Seria um pouco mais barato do que o preço aqui no Brasil, mas o Josh já me adiantou que só tem uns 50. Aí ele me disse algo interessante: “Me arranje algo melhor que simplesmente distribuir os pendrives para todo mundo que eu posso lhe conseguir eles de graça para você. E outra pessoa no canal deu a ideia: “Me mostre a sua melhor consulta SQL e ganhe um pendrive”.
O Josh parece que gostou da idéia e eu mais ainda. Aí comecei a rascunhar e pensar em como organizar isso. Pensei logo em algumas categorias para participar:
- Consulta ou script;
- Artigo;
- Artigo traduzido;
- História em quadrinhos;
- Estudo de caso;
A ideia é mais ou menos assim: sabe aquela consulta que você criou para verificar o desempenho do banco? Aquele script de backup que ficou bacana? Ou aqueles testes que você ficou de publicar em algum lugar o resultado? Ah… tem também aquele artigo em inglês que um monte de gente adoraria ler em português. Bom, acho que deu para pegar o espírito da idéia. Você manda para nós o seu material, tem grandes chances de ganhar o seu pendrive e a comunidade ganha material novo para colocar na Internet. Todo mundo acaba ganhando.