vendredi 13 juillet 2012

RMAN-20052: invalid datafile create SCN

Suite à un migration en 11.2.0.3, je me suis retrouvé avec des backups échoués avec une erreur RMAN-20052.
En farfouillant sur internet ou metalink, on ne trouve rien de vraiement probant.
 Il semble y avoir un bug identifié chez Oracle mais à ce jour toujours pas corrigé.

 Pour ma part, je suis surpris que personne ne poste de solution à ce problème... surtout qu'il y en a une....

Il suffit de déenregistrer et réenregistrer la base dans le catalog RMAN et tout refonctionne.

   RMAN> unregister database;
   database name is "ORC" and DBID is xxxxxxxxxxxx


   Do you really want to unregister the database (enter YES or NO)? yes
   
   database unregistered from the recovery catalog

   RMAN> register database;

   database registered in recovery catalog
   starting full resync of recovery catalog
   full resync complete
   

jeudi 5 juillet 2012

Activer le Serveur VNC sur OXC Lion depuis une session ssh

Qui n'a jamais voulu prendre le contrôle de son Mac (pour ceux qui ont un mac.....) en étant connecté à distance ?

Pas de chance Teamviewer n'est pas installé et le serveur vnc n'est pas activé.....

On peux l'activer depuis une session ssh :
sudo  /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -access -on -clientopts -setvnclegacy -vnclegacy yes -clientopts -setvncpw -vncpw mypasswd -restart -agent -privs -all

lundi 27 février 2012

Outil d'export de tables sans authentification avec liste de filtrage

Voici un cas pratique qui m'a été posé.

Un utilisateur souhaite pouvoir backuper certaines tables via exp.
A priori pas de problème, mais cela veut dire que je doit lui donner le droit d'exporter y compris les objets que je ne souhaite pas lui donner accès.

De plus le ROLE EXP_FULL_DATABASE implique pour moi une faille de sécurtié, n'importe que grant sera bypassé à cause de ce role.

Pour ce faire, je met en place le mécanisme suivant :

  1. Je créé un nouveau compte dédié à l'export
  2. Sur un serveur je met en place un script (voir ci-dessous) qui va supplanter ma commande d'export
  3. J'empêche la lecture du script par les autres utilisateurs
  4. Je met en place les bonnes règles sudo pour que mon utilisateur puisse exporter

Résultat :

  1. L'utilisateur peut exporter
  2. Il ne connait pas le mot de passe
  3. Je peux mettre en place un mechanisme de filtrage pour l'empecher d'exporter certaines tables.

Reduire la taille d'un datafile au minimum requis


Il arrive souvent (voir trop souvent) que l'on se retrouve avec des ressources disque limitées.

Notre base de données à vécue, l'espace libre s’amenuise mais nous constatons que plus de la moitié de l'espace alloué dans un de nos tablespace est vide.

Voici une petite solution qui peut vous permettre d’éviter de redeverser les objets de notre tablespace dans un autre

Ce script va calculer la taille minimale pour chaque datafile de notre tablespace et générer les requêtes de resize.

set pagesize 0
set linesize 150
set head off
set verify off
set echo off
spool resize_tbs.sql


select 'alter database datafile ''' || file_name || ''' resize ' || CEIL( ( NVL( hwm,1) * blksize ) / 1024 / 1024 ) || 'm;' cmd
from dba_data_files a,
  (select file_id, max(block_id + blocks - 1) hwm from dba_extents group by file_id) b,
  (select to_number(value) blksize from v$parameter where name = 'db_block_size') c
where a.file_id = b.file_id (+)
and CEIL(blocks * c.blksize / 1024 /1024) - CEIL((nvl(b.hwm,1) * c.blksize) / 1024 /1024) > 0
and tablespace_name=<TABLESPACE NAME>;
spool off

jeudi 23 février 2012

Construction d'une standby à froid (Warm) en PostgreSQL 8.2

La version Postgresql 8.2 introduit une nouvelle fonctionnalité de haute disponibilité, le log shipping.

Le but est d'avoir un serveur de secours en attente permanente, qui va rejouer en quasi temps réel les journaux
de transaction (appelés WALs pour Write Ahead Log'') du serveur primaire, et qui est prêt à prendre le relai à tout
moment, en cas d'incident sur le serveur primaire.

Deux serveurs sont donc nécessaires :

  • Un serveur primaire (maître) qui archive les WALs et les envoie sur le serveur de secours (esclave)
  • Un serveur de secours qui lui est en mode recovery permanent et les rejoue dès leur réception.

Un lien réseau entre les deux serveurs doit donc exister, pour que l'envoi des WALs puisse se faire.

La réplication concerne l'instance Postgresql entière, c'est-à-dire toutes les bases de données Postgresql existantes sur le serveur primaire.

Résoudre ORA-24247: network access denied by access control list (ACL) when trying to send email

En 11G, Oracle à introduit des controles d'accès sur certain packages entrainant un accès exterieur à la base.


C'est le cas notamment du package utl_mail_send, pour ce faire, il faut définir des 'Access Control List' (ACL) pour définir qui, quoi et vers ou un utilisateur peut effectuer des connexions extérieures à la base de données.


Le pré requis est d'avoir tout d'abord la couche XML DB.


Exemple :
begin
dbms_network_acl_admin.create_acl (
acl => 'utl_mail.xml',
description => 'Allow mail to be send',
principal => 'USER1',
is_grant => TRUE,
privilege => 'connect'
);
commit;
end;
/

mercredi 22 février 2012

ORA-08104 : this index object xxxxx is being online built or rebuilt

Si votre session oracle a été killée lors d'un rebuild online d'un index, il y a de fortes chances que vous rencontriez une erreur ORA-08104 (this index object xxxxx is being online built or rebuilt).

Votre index se trouve alors dans un état incohérent et toute tentative de rebuild ou drop vous renvoi cette erreur.

Le seul moyen est d’utiliser le package DBMS_REPAIR.

La première étape est de valider l’état de l'objet, par expérience le flags 2563 confirme que l'index est en mode "online rebuild".

SQL> alter index S.SYS_C007740 rebuild online tablespace s_data01;

alter index S.SYS_C007740 rebuild online tablespace s_data01
*
ERROR at line 1:
ORA-08104: this index object 75350 is being online built or rebuilt
SQL> conn / as sysdba
Connected.
SQL> select obj#,flags from ind$ where obj#=75350;
OBJ# FLAGS
---------- ----------
75350 2563