Re: Undefined replicate crashes IDS
Posted in 2004
Topics: Stored Procedures & SPL, Error Codes & Troubleshooting, Server Administration
Yes - this is probably bug 155787.
I'm really sticking my neck out on offering this workarround, so I need you
to be very careful. Otherwise, you will be forced to delete ER on all of
your nodes and re-establish it.
You might be able to get arround the problem by setting the ATS/RIS spooling
directories to spaces. This is done by...
dbaccess syscdr <<!EOF
update servdef set atsdir = "", risdir = "";!EOF
However, I'm not sure if the failure is occuring before or after the check
is made to see if the directory has been set. If a failure still occurs,
then you will need to turn off ATS/RIS spooling on the replicate.
We need to turn off the two bits that indicate ATS/RIS spooling from the
replicates.
The two bits that need to be turned off are RIS (0x400) and ATS (0x800) from
the replicate flags. I'm enclosing a procedure that should work to turn off
the bits. These two bits have the value of 3072.
The following procedure should be able to turn off these bits from the
flags. However, it will not work if the high order bit is set (0x80000000)
which are actually negative values.
So by creating the following procedure and executing the following while
CDRBLOCKOUT is set, you should be able to turn off the two bits. This must
be run as user informix.
dbaccess syscdr <<!EOF
update repdef set flags = bitoff(flags(3072));!EOF
Once that is done, then you could try to bounce the server with CDRBLOCKOUT
is turned off.
N.B. - like I said. I am really sticking my neck out on this, so you will
need to be prepared to rebuild ER if this doesn't work.
-----------------------------------------------------------------------
create procedure bitoff(flag int, bitset int) returning int;define result int;
define tflag int;
define mask int;
define tmask int;
define tcnt int;
define t1 int;
define returnval int;
let result = 0;
let tmask = bitset;
let tflag = flag;
let mask = 1;
if (flag < 0) then
return flag;
end if
if (bitset < 0) then
return flag;
end if
for tcnt = 2 to 31
let t1 = mod(tmask, 2);
let tmask = tmask / 2;
if (t1 = 1) then
let t1 = mod(tflag,2);
if (t1 = 1) then
let result = result + mask;
end if
end if
let tflag = tflag / 2;
let mask = mask * 2;
end for
if (tmask != 0) then
if (tflag != 0) then
let result = result + mask;
end if
end if
if (bitset > 107374183) then
if (flag > 107374183) then
let result = result + 1073741824;
end if
end if
return flag - result;
end procedure;
-----------------------------------------------------
"Denis Melnikov" <dm'Inik@r'gent.r'> wrote in message
news:btdnae$es8$1@n6.co.ru...
> Is it what you need?
>
> ===========------------- - - - - - -
> /usr/informix/server/bin/onstat -g stk 20852 light:
>
> Informix Dynamic Server 2000 Version 9.21.UC2 -- On-Line -- Up 16 days
> 00:24
> 52 -- 1654784 Kbytes
>
> Stack for thread: 20852 CDRD_9
> base: 0x96b37018
> len: 66048
> pc: 0x085138eb
> tos: 0x96b45fd4> state: running
> vp: 4
>
> 0x0852b06d (oninit)afhandler(0x96b460fc, 0xb, 0x969156a0)
> 0x0852aa6a (oninit)afcrash_interface(0x3, 0x8749ef0, 0x96b46574)
> 0x0852d57f (oninit)mt_ex_throw_sig(0x8749ef0, 0x96b46574, 0x96d1b648)
> 0x0850ca0e (oninit)afsig_handler(0x1, 0x8746534, 0x0)
> 0xdfbbd32f (*nosymtab*)0xdfbbd32f(0xb, 0x96b46960, 0x96b46760)
> 0xdfbca441 (*nosymtab*)0xdfbca441(0xb, 0x96b46960, 0x96b46760)
> 0xffffffff (*nosymtab*)0xffffffff(0xb, 0x96b46960, 0x96b46760)
> 0x085df288 (oninit)dsiSpool(0x6f, 0x96346708, 0x95c66020)
> 0x085da429 (oninit)dsiAbortTx(0x95c66020, 0x96b47080, 0x96b470f0)
> 0x085d999a (oninit)dsiResolverThread(0x95f2e0f8, 0x96346ef8, 0x96b47080)
> 0x085153a3 (oninit)startup (0x96346ef8, 0x0, 0x0)
> 0x00000000 (*nosymtab*)0x0
>
>
> "Madison Pruet" <mpruet@comcast.net> '''''''/'''''''' ' ''''''''
''''''''':
> news:xzgKb.741616$HS4.5686487@attbi_s01...
> > 9.21 uses the environment variable CDRBLOCKOUT to start the engine
without
> > ER. I'd like to see the stack trace.
> >
> > There was a problem with ER trying to print an ATS file when it could
not
> > get to the description of the replicated row. I'm guessing that is
> causing
> > the problem, but would need to see the stack to determine that.
>
>
Thank you, Madison, for your assistance!
I succeeded to bounce the engine with CDRBLOCKOUT set/unset,
and IDS started up successfully.
So I haven't used your workaround, but thank you anyway.
It was in such way: since the dest server have brought up
with ER, the src server run CDRNrA9 thread (CDR receiver,
I think). It occupied the whole CPU for a long time (~15 min.),
so I thought it will never end, and bounce the src server.
(I determine running threads with 'onstat -g wst').
When the src server started up, it run CDRNr9 thread
(receiver - yeh? - again). It worked ~15 min. as well.
And then CDRNr9 changed with CDRNsT9 (sender?) as well as
ddr_log_io threads. Since that moment all spooled
transactions were replicated in 25 min.
Thank you again!
Related threads
- Posting from the Informix-list
- Migrating from IDS 9.40.UC6 to 11.50.UC3
- Ip for a network session
- questions onstat -g