John Scoles
Thu, 14 Jan 2010 05:44:54 -0800
At a first look it most likely is my new ora_ncs_buff_mtpl /ORA_DBD_NCS_BUFFER might be the source of the problem byt default it is 1 which may be too small.Can you set the ORA_DBD_NCS_BUFFER to 2 then 3 and 4 to see if it cleans up the problem
My guess is that 1 is too small and I might have to make it 2 to cover more bases.
cheers John Scoles Martin Evans wrote:
John Scoles wrote:Thank Charles that is really good stuff I have not investigated the NLS_LANG=.WE8ISO8859P1, but the tests 30long.t and 31lob_extended.t still fail badly if NLS_LANG=.AL32UTF8. bug yet as my local test box is just US7ASCII. BTW can you tell me what the ' NLS_CHARACTERSET and NLS_NCHAR_CHARACTERSET setting of your Oralcle DB you are testing on I will have to do that later today or tonight as I have to install a different version or Oracle to get that to fail (I hope) If you can set $dbh->{dbd_verbose}=15 just before the test start to fail in 30long.t and 31lob_extended.t and send me the results I will have something more to go on. Look for another RC in the next day or two. Cheers Jardine wrote:On 14/01/10 12:19, Charles Jardine wrote:On 12/01/10 12:07, John Scoles wrote:Ok third time is a Charm The Third RC of the beer edition of DBD::Oracle 1.24 can be found at http://svn.perl.org/modules/dbd-oracle/trunk/DBD-Oracle-1.24-RC3.tar This round has a few little patches from Martin Evans on it. Please test and enjoyMy environment is Linux x86-64, Perl 5.10.1 (64 bit), DBI 1.609, Oracle 10.2.0.4.2 (64 bit). Database charset UTF8, national charset AL16UTF16 Three things:[snip]3. Here is a patch which removes the remaining warnings detected by gcc in 64-bit mode.[snip] I realise that something has wrapped the very long lines in the patch, so I am trying again, sending the patch as an attachment.For me tests 40long.t and 30lob_extended.t also fail when $NLS_LANG is AMERICAN_AMERICA.AL32UTF8. The values of NLS_CHARACTERSET and NLS_NCHAR_CHARACTERSET in my database are: AL32UTF8 and UTF8 as the test output below shows. The errors I get are: prove -vb t/30long.t t/30long.t .. 1..479 # ora_server_version: 11 1 0 6 0 # Database 11.1.0.6.0 CHAR set is AL32UTF8 (Unicode), NCHAR set is UTF8 (Unicode) # Client 11.1.0.6 NLS_LANG is 'AMERICAN_AMERICA.AL32UTF8', NLS_NCHAR is '<unset>' # # ========================================================================= # Running long test for LONG (0) use_utf8_data=0 # create table dbd_ora__drop_me ( idx integer, lng LONG, dt date ) # long_data[0] length 10240 # long_data[1] length 81920 # long_data[2] length 71680 # --- insert some LONG data (ora_type 0) ok 1 - prepare: insert into dbd_ora__drop_me values (?, ?, SYSDATE) ok 2 - insert long data 40 ok 3 - insert long data 41 ok 4 - insert long data 42 ok 5 - insert long data undef 43 # --- fetch LONG data back again -- truncated - LongTruncOk == 1 # LongReadLen 20, LongTruncOk 1 ok 6 - prepare: select * from dbd_ora__drop_me order by idx ok 7 - execute: select * from dbd_ora__drop_me order by idx ok 8 - fetch_arrayref for select * from dbd_ora__drop_me order by idx ok 9 - four rows ok 10 - byte_string test of truncated to LongReadLen 20 ok 11 - nice_string test of truncated to LongReadLen 20 ok 12 - LONG UTF8 setting ok 13 - byte_string test of truncated to LongReadLen 20 ok 14 - nice_string test of truncated to LongReadLen 20 ok 15 - LONG UTF8 setting ok 16 - byte_string test of truncated to LongReadLen 20 ok 17 - nice_string test of truncated to LongReadLen 20 ok 18 - LONG UTF8 setting ok 19 - last row undefined ok 20 - prepare select * from dbd_ora__drop_me order by idx # --- fetch LONG data back again -- truncated - LongTruncOk == 0 # LongReadLen 81910, LongTruncOk ok 21 - execute select * from dbd_ora__drop_me order by idx ok 22 - fetchrow_arrayref select * from dbd_ora__drop_me order by idx ok 23 - length tmp->[1] 10240 ok 24 - truncation error not triggered (LongReadLen 81910, data 10240) ok 25 - tmp==1406 || tmp==24345 tmp actually=24345 # --- fetch LONG data back again -- complete - LongTruncOk == 0 # LongReadLen 82920, LongTruncOk ok 26 - prepare: select * from dbd_ora__drop_me order by idx ok 27 - execute select * from dbd_ora__drop_me order by idx ok 28 - fetchrow_arrayref select * from dbd_ora__drop_me order by idx ok 29 - Strings are identical, Len 10240 ok 30 - fetchrow_arrayref select * from dbd_ora__drop_me order by idx ok 31 - Strings are identical, Len 10240 ok 32 - fetchrow_arrayref select * from dbd_ora__drop_me order by idx ok 33 - Strings are identical, Len 10240 ok 34 # skip blob_read tests for LONGs - not currently supported <snipped - all the same> ok 94 # skip ora_auto_lob tests for LONGs - not supported # # ========================================================================= # Running long test for LONG RAW (24) use_utf8_data=0 ok 95 - prepare: insert into dbd_ora__drop_me values (?, ?, SYSDATE) # create table dbd_ora__drop_me ( idx integer, lng LONG RAW, dt date ) # long_data[0] length 20480 # long_data[1] length 81920 # long_data[2] length 71680 # --- insert some LONG RAW data (ora_type 24) ok 96 - insert long data 40 ok 97 - insert long data 41 ok 98 - insert long data 42 ok 99 - insert long data undef 43 # --- fetch LONG RAW data back again -- truncated - LongTruncOk == 1 # LongReadLen 20, LongTruncOk 1 ok 100 - prepare: select * from dbd_ora__drop_me order by idx ok 101 - execute: select * from dbd_ora__drop_me order by idx ok 102 - fetch_arrayref for select * from dbd_ora__drop_me order by idx ok 103 - four rows ok 104 - byte_string test of truncated to LongReadLen 40 ok 105 - nice_string test of truncated to LongReadLen 40 ok 106 - LONG RAW UTF8 setting ok 107 - byte_string test of truncated to LongReadLen 40 ok 108 - nice_string test of truncated to LongReadLen 40 ok 109 - LONG RAW UTF8 setting ok 110 - byte_string test of truncated to LongReadLen 40 ok 111 - nice_string test of truncated to LongReadLen 40 ok 112 - LONG RAW UTF8 setting ok 113 - last row undefined ok 114 - prepare select * from dbd_ora__drop_me order by idx # --- fetch LONG RAW data back again -- truncated - LongTruncOk == 0 # LongReadLen 40955, LongTruncOk ok 115 - execute select * from dbd_ora__drop_me order by idx ok 116 - fetchrow_arrayref select * from dbd_ora__drop_me order by idx ok 117 - length tmp->[1] 20480 ok 118 - truncation error not triggered (LongReadLen 40955, data 20480) ok 119 - tmp==1406 || tmp==24345 tmp actually=24345 # --- fetch LONG RAW data back again -- complete - LongTruncOk == 0 # LongReadLen 82920, LongTruncOk ok 120 - prepare: select * from dbd_ora__drop_me order by idx ok 121 - execute select * from dbd_ora__drop_me order by idx ok 122 - fetchrow_arrayref select * from dbd_ora__drop_me order by idx ok 123 - Strings are identical, Len 20480 ok 124 - fetchrow_arrayref select * from dbd_ora__drop_me order by idx ok 125 - Strings are identical, Len 81920 ok 126 - fetchrow_arrayref select * from dbd_ora__drop_me order by idx ok 127 - Strings are identical, Len 71680 ok 128 # skip blob_read tests for LONGs - not currently supported <snipped all the same> ok 188 # skip ora_auto_lob tests for LONG RAWs - not supported # # ========================================================================= # Running long test for NCLOB (112) use_utf8_data=1 # create table dbd_ora__drop_me ( idx integer, lng NCLOB, dt date ) # long_data[0] length 10240 ok 189 - prepare: insert into dbd_ora__drop_me values (?, ?, SYSDATE) # long_data[1] length 81920 # long_data[2] length 71680 # --- insert some NCLOB data (ora_type 112) ok 190 - insert long data 40 ok 191 - insert long data 41 ok 192 - insert long data 42 ok 193 - insert long data undef 43 # --- fetch NCLOB data back again -- truncated - LongTruncOk == 1 # LongReadLen 20, LongTruncOk 1 ok 194 - prepare: select * from dbd_ora__drop_me order by idx ok 195 - execute: select * from dbd_ora__drop_me order by idx DBD::Oracle has returned a NEED_DATA status when doing a LobRead!! DBD::Oracle::db disconnect failed: ORA-03127: no new operations allowed until the active operation ends (DBD ERROR: OCISessionEnd) at t/30long.t line 68. # Looks like you planned 479 tests but ran 195. # Looks like your test exited with 255 just after 195. Dubious, test returned 255 (wstat 65280, 0xff00) Failed 284/479 subtests (less 122 skipped subtests: 73 okay) Test Summary Report ------------------- t/30long.t (Wstat: 65280 Tests: 195 Failed: 0) Non-zero exit status: 255 Parse errors: Bad plan. You planned 479 tests but ran 195. Files=1, Tests=195, 0 wallclock secs ( 0.04 usr 0.00 sys + 0.12 cusr 0.01 csys = 0.17 CPU) Result: FAIL It is similar with 31lob_extended.t but as it is a shorter test and it is easier to segregate the failure I've concentrated on that. I commented out the first section of bracketed tests in 31lob_extended.t and left the remaining one which fails. The output is: prove -vb t/31lob_extended.t t/31lob_extended.t .. 1..31 ok 1 - created test table # create table dbd_ora__drop_me ( idx integer, x clob, dt date ) ok 2 - created test data ok 3 - created test procedure ok 4 - ora_auto_lobs not fetching prepare call proc ok 5 - ora_auto_lobs not fetching - bind out cursor ok 6 - ora_auto_lobs not fetching - execute to get out cursor DBD::Oracle has returned a NEED_DATA status when doing a LobRead!! procedure p_DBD_Oracle_drop_me possibly not dropped- check - DBD::Oracle::db do failed: ORA-03127: no new operations allowed until the active operation ends (DBD ERROR: OCIStmtExecute) [for Statement "drop procedure p_DBD_Oracle_drop_me"] at t/31lob_extended.t line 175. table dbd_ora__drop_me possibly not dropped - check - DBD::Oracle::db do failed: ORA-03127: no new operations allowed until the active operation ends (DBD ERROR: OCIStmtExecute) [for Statement " drop table dbd_ora__drop_me "] at t/nchar_test_lib.pl line 204. # Looks like you planned 31 tests but ran 6. # Looks like your test exited with 255 just after 6. DBD::Oracle::db DESTROY failed: ORA-03127: no new operations allowed until the active operation ends (DBD ERROR: OCIStmtExecute) ORA-03127: no new operations allowed until the active operation ends (DBD ERROR: OCISessionEnd) at t/31lob_extended.t line 91. Dubious, test returned 255 (wstat 65280, 0xff00) Failed 25/31 subtests Test Summary Report ------------------- t/31lob_extended.t (Wstat: 65280 Tests: 6 Failed: 0) Non-zero exit status: 255 Parse errors: Bad plan. You planned 31 tests but ran 6. Files=1, Tests=6, 0 wallclock secs ( 0.02 usr 0.00 sys + 0.05 cusr 0.01 csys = 0.08 CPU) Result: FAIL With verbose turned on I get the attached output. This is not actually causing me a problem right now as it only seems to happen when ora_auto_lob is on (default) and we mostly disable it. Please let me know if there is anything else I can provide or do to help nail this one. Martin