UNIX tricks and treats

Aller au contenu | Aller au menu | Aller à la recherche

mardi 17 novembre 2009

STREAMS alter table move bug


A very annoying STREAMS bug, which should be corrected in the 11GR2 release, is the failure of STREAMS to keep up with an alter table move tablespace command.

If your table contains a LOB, and want to do some reorg through a move, then you will very likely hit the bug and receive the following error message in your alert.log:

ORA-26744: STREAMS capture process "STREAMS_CAPTURE" does not support "OWNER"."TABLE_NAME" because of the following reason:
ORA-26773: Invalid data type for column "malformed redo"


No workarounds exist, except excluding your table from your STREAMS propagation.

Reimporting the table with a new flashback SCN won't work. You have to reimplement the whole STREAMS process to get back on your feet.

Metalink réference:Bug 5623403.

vendredi 9 octobre 2009

Configuration particulière de STREAMS pour RAC

Dans le cadre d'un RAC, si l'on a configuré la propagation via un dblink, il faut indiquer un des noeuds comme propriétaire par défaut de la queue capture et apply de STREAMS. Sinon, on peut se retrouver confroté à une erreur ORA-25315 de façon aléatoire.

Le mieux, sur des configurations 10.2 ou supérieurs, étant de positionner le paramètre queue_to_queue à TRUE lors de la mise en place de la propagation avec DBMS_PROPAGATION_ADM.CREATE_PROPAGATION. On ne passera alors plus par le dblink. Il est impossible de modifier le paramètre en cours de route.

Réf: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_prop_a.htm

Retrouver les noms des queues STREAMS

set lines 150

SELECT q.OWNER, q.NAME, t.QUEUE_TABLE, t.OWNER_INSTANCE

  • FROM DBA_QUEUES q, DBA_QUEUE_TABLES t
  • WHERE t.OBJECT_TYPE = 'SYS.ANYDATA'
  • AND q.QUEUE_TABLE = t.QUEUE_TABLE
  • AND q.OWNER = t.OWNER;

Indiquer un propriétaire par défaut et un propriétaire secondaire

DBMS_AQADM.ALTER_QUEUE_TABLE (

  • queue_table IN VARCHAR2,
  • comment IN VARCHAR2 DEFAULT NULL,
  • primary_instance IN BINARY_INTEGER DEFAULT NULL,
  • secondary_instance IN BINARY_INTEGER DEFAULT NULL);

ex:

BEGIN

  • DBMS_AQADM.ALTER_QUEUE_TABLE(
    • queue_table => 'MON_QUEUE_TABLE_APPLY',

    • primary_instance => 1,

    • secondary_instance => 2);

END; /

BEGIN

  • DBMS_AQADM.ALTER_QUEUE_TABLE(
    • queue_table => 'MON_QUEUE_TABLE_CAPTURE',

    • primary_instance => 1,

    • secondary_instance => 2);

END; /

BEGIN

  • DBMS_AQADM.ALTER_QUEUE_TABLE(
    • queue_table => 'SCHEDULER$_JOBQTAB',

    • primary_instance => 1,

    • secondary_instance => 2);

END; /