Hello, I'm use MaxDB Version: '7.5.00.05 Build 005-121-054-885' Windows 2000
(WIN32)
I have problem, my database crash
I execute my perl script and my database crash
if I execute my perl script once more, I have error message
DBD::ODBC::st execute failed: [SAP AG][SQLOD32 DLL][SAP DB] General
error;-9041 POS(1) System error: BD Index not access
ible. (SQL-HY000)(DBD: st_execute/SQLExecute err=-1) at ./add_result.pl line
48.
executing: err = -1, errstr = [SAP AG][SQLOD32 DLL][SAP DB] General
error;-9041 POS(1) System error: BD Index not access
ible. (SQL-HY000)(DBD: st_execute/SQLExecute err=-1) at ./add_result.pl line
48.
Having tested the procedure, I've found the
reason of crash. If I comment call LAB.get_reagent4device in
LAB.add_unplanned_test
, the crash is not happening.
my eventlog
Event Type: Error
Event Source: SAPDB:Labtest
Event Category: Fast
Event ID: 18006
Date: 24.12.2003
Time: 12:57:06
User: NT AUTHORITY\SYSTEM
Computer: UFO
Description:
SAPDB - Labtest :
- ERROR TID: 0x4F4 PID: 0x8DC MsgID: 18006
EXCEPTION:0xc0000005 Addr:0x5fc1fa ( 0:0x22:0:0 )
Event Type: Error
Event Source: SAPDB:Labtest
Event Category: Fast
Event ID: 18245
Date: 24.12.2003
Time: 12:57:09
User: NT AUTHORITY\SYSTEM
Computer: UFO
Description:
SAPDB - Labtest :
- ERROR TID: 0x4F4 PID: 0x8DC MsgID: 18245
Kernel aborts,
(view diagnostic file: 'knldiag')
my perl script
use English;
use strict;
use subs;
use DBI;
my $dbi = DBI->connect_cached("DBI:ODBC:LABTEST", "lab", "lab") or die
"connecting: $DBI::errstr";
my @sqls =
(
"CALL LAB.add_result('Elecsys B Test', '17-24', '003540001072088612294465
', '003540001072088612308465 ', 'SAMPLE', '5',NULL, 'R', 1.54, 0, 'N',
'NORMAL', 'nmol/l', 'F', NULL, NULL, '6070', '0', '4', '2000-06-23
10:07:22.000000', '2000-06-23 10:25:44.000000', NULL, ?)"
, "CALL LAB.add_result('Elecsys B Test', '8-24', '002516001072088443948702
', '002516001072088443952702 ', 'SAMPLE', '1', NULL, 'R', 100.0, 0, '>',
'NORMAL', 'uIU/ml', 'F', NULL, NULL, '6068', '0', '2', '2000-06-23
10:03:10.000000', '2000-06-23 10:21:32.000000', 'Above measuring range', ?)"
, "CALL LAB.add_result('Elecsys B Test', '129-24',
'002220001072078735910409 ', '002220001072078735915409 ', 'SAMPLE', '1',
NULL, 'R', 0.106, 0, 'L', 'NORMAL', 'uIU/ml', 'F', NULL, NULL, '6067', '0',
'1', '2000-06-23 10:01:46.000000', '2000-06-23 10:20:08.000000', 'Below
expected value range', ?)"
, "CALL LAB.add_result('Elecsys B Test', '129-24',
'002220001072078735910409 ', '002220001072078735921409 ', 'SAMPLE', '3',
NULL, 'R', 18.70, 0, 'N', 'NORMAL', 'pmol/l', 'F', NULL, NULL, '6067', '0',
'1', '2000-06-23 10:02:28.000000', '2000-06-23 10:20:50.000000', NULL, ?)"
, "CALL LAB.add_result('Elecsys B Test', '8-24', '002220001072078746886409
', '002220001072078746890409 ', 'SAMPLE', '1', NULL, 'R', 100.0, 0, '>',
'NORMAL', 'uIU/ml', 'F', NULL, NULL, '6068', '0', '2', '2000-06-23
10:03:10.000000', '2000-06-23 10:21:32.000000', 'Above measuring range', ?)"
, "CALL LAB.add_result('Elecsys B Test', '8-24', '002144001072080176566240
', '002144001072080176573240 ', 'SAMPLE', '1', NULL, 'R', 100.0, 0, '>',
'NORMAL', 'uIU/ml', 'F', NULL, NULL, '6068', '0', '2', '2000-06-23
10:03:10.000000', '2000-06-23 10:21:32.000000', 'Above measuring range', ?)"
, "CALL LAB.add_result('Elecsys B Test', '8-24', '002220001072078746886409
', '002220001072078746895409 ', 'SAMPLE', '3', NULL, 'R', 3.64, 0, 'L',
'NORMAL', 'pmol/l', 'F', NULL, NULL, '6068', '0', '2', '2000-06-23
10:03:52.000000', '2000-06-23 10:22:14.000000', 'Below expected value
range', ?)"
, "CALL LAB.add_result('Elecsys B Test', '10-24',
'002220001072078758189409 ', '002220001072078758199409 ', 'SAMPLE', '3',
NULL, 'R', 10.88, 0, 'L', 'NORMAL', 'pmol/l', 'F', NULL, NULL, '6069', '0',
'3', '2000-06-23 10:05:16.000000', '2000-06-23 10:23:38.000000', 'Below
expected value range', ?)"
);
foreach my $sql (@sqls)
{
my $sth = $dbi->prepare($sql)
or die "preparing: $DBI::errstr";
my $record = undef;
$sth->bind_param_inout(1, \$record, 4);
$sth->execute
or die "executing: err = $DBI::err, errstr = $DBI::errstr";
print "record = ", $record, "\n";
$sth->finish;
sleep(1);
}
$dbi->disconnect;
my database
CREATE TABLE LAB.producers
(
producer_id VARCHAR(25) NOT NULL,
producer_name VARCHAR(100) NOT NULL,
producer_desc VARCHAR(255) NULL,
status INT NOT NULL DEFAULT 0,
created timestamp NOT NULL DEFAULT TIMESTAMP,
modified timestamp NOT NULL DEFAULT TIMESTAMP,
deleted timestamp NULL,
modifier VARCHAR(32) NOT NULL DEFAULT USER,
PRIMARY KEY(producer_id)
)
///////////////////////////////////////////////////
// create LAB.devicetypes
CREATE TABLE LAB.devicetypes
(
device_type VARCHAR(25) NOT NULL,
producer_id VARCHAR(25) NOT NULL,
devicetype_name VARCHAR(100) NOT NULL,
devicetype_desc VARCHAR(255) NULL,
status INT NOT NULL DEFAULT 0,
created timestamp NOT NULL DEFAULT TIMESTAMP,
modified timestamp NOT NULL DEFAULT TIMESTAMP,
deleted timestamp NULL,
modifier VARCHAR(32) NOT NULL DEFAULT USER,
PRIMARY KEY(device_type),
FOREIGN KEY ref2producers (producer_id)
REFERENCES LAB.producers (producer_id)
)
///////////////////////////////////////////////////
// LAB.test4devicetype
CREATE TABLE LAB.test4devicetype
(
device_type VARCHAR(25) NOT NULL,
test_name VARCHAR(25) NOT NULL,
test_code VARCHAR(25) NOT NULL,
test_desc VARCHAR(99) NULL,
PRIMARY KEY(device_type, test_name),
FOREIGN KEY ref2devicetypes (device_type)
REFERENCES LAB.devicetypes (device_type)
)
///////////////////////////////////////////////////
// create LAB.devices
CREATE TABLE LAB.devices
(
device_id INT NOT NULL DEFAULT SERIAL(1),
device_type VARCHAR(25) NOT NULL,
device_code VARCHAR(25) NOT NULL,
device_serial VARCHAR(50) NOT NULL,
device_desc VARCHAR(255) NULL,
status INT NOT NULL DEFAULT 0,
created timestamp NOT NULL DEFAULT TIMESTAMP,
modified timestamp NOT NULL DEFAULT TIMESTAMP,
deleted timestamp NULL,
modifier VARCHAR(32) NOT NULL DEFAULT USER,
PRIMARY KEY(device_id),
FOREIGN KEY ref2type (device_type)
REFERENCES LAB.devicetypes (device_type),
CONSTRAINT unique_device_code
UNIQUE (device_code)
)
//////////////////////////////////////////////////
// proc LAB.add_producer
CREATE DBPROC LAB.add_producer
( IN producer_id VARCHAR(25)
, IN producer_name VARCHAR(100)
, IN producer_desc VARCHAR(255)
)
AS
VAR log_msg VARCHAR(255);
BEGIN
TRY
insert LAB.producers(producer_id, producer_name, producer_desc)
values(:producer_id, :producer_name, :producer_desc);
SET log_msg = 'The producer ''' || producer_name || ''' has been added
successfully, with code = ''' || producer_id || '''';
call LAB.add_event('info', 'add_producer', 'add_producer', :log_msg);
CATCH
STOP($rc, $errmsg);
END;
//////////////////////////////////////////////////
// proc LAB.add_devicetype
CREATE DBPROC LAB.add_devicetype
( IN device_type VARCHAR(25)
, IN producer_id VARCHAR(25)
, IN devicetype_name VARCHAR(100)
, IN devicetype_desc VARCHAR(255)
)
AS
VAR log_msg VARCHAR(255);
BEGIN
TRY
insert LAB.devicetypes(device_type, producer_id, devicetype_name,
devicetype_desc)
values(:device_type, :producer_id, :devicetype_name, :devicetype_desc);
SET log_msg = 'The device type ''' || devicetype_name || ''' has been
added successfully, with code = ''' || device_type || '''';
call LAB.add_event('info', 'add_devicetype', 'add_devicetype', :log_msg);
CATCH
STOP($rc, $errmsg);
END;
///////////////////////////////////////////////////
// proc LAB.add_device
CREATE DBPROC LAB.add_device
( IN device_type VARCHAR(25)
, IN device_code VARCHAR(25)
, IN serial_num VARCHAR(50)
, IN device_desc VARCHAR(255)
, OUT device_id INT
)
AS
VAR log_msg VARCHAR(255);
BEGIN
TRY
INSERT LAB.devices(device_code, device_type, device_serial, device_desc)
VALUES(:device_code, :device_type, :serial_num, :device_desc);
SET device_id = LAB.devices.CURRVAL;
SET log_msg = 'The device ''' || device_code || ''' has been added
successfully, with id = ''' || device_id || '''';
call LAB.add_event('info', 'add_device', 'add_device', :log_msg);
CATCH
STOP($rc, $errmsg);
END;
// data
call LAB.add_producer('ROCHE', 'ROCHE', 'ROCHE')
call LAB.add_devicetype('ELECSYS2010', 'ROCHE', 'Roche, Elecsys 2010',
'Roche, Elecsys 2010')
call LAB.add_device('ELECSYS2010', 'Elecsys A Test', '650-4422-22', 'lab ',
?)
call LAB.add_device('ELECSYS2010', 'Elecsys B Test', '650-4422-22', 'lab ',
?)
insert LAB.test4devicetype (device_type, test_name, test_code, test_desc)
values ('ELECSYS2010', 'IGE', '63', 'IGE')
insert LAB.test4devicetype (device_type, test_name, test_code, test_desc)
values ('ELECSYS2010', 'TSH', '1', 'TSH')
insert LAB.test4devicetype (device_type, test_name, test_code, test_desc)
values ('ELECSYS2010', 'FT4', '3', 'FT4')
insert LAB.test4devicetype (device_type, test_name, test_code, test_desc)
values ('ELECSYS2010', 'PRL', '13', 'PRL')
//
--
MaxDB Discussion Mailing List
For list archives: http://lists.mysql.com/maxdb
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]