Redirection Notice
Related documents and FAQs
Not directly required by, but related to, JChem Cartridge is the size of the Oracle buffer cache that speeds up the SELECT SQL statement whereby the JChem-internal compound identifiers of the hits are converted to Oracle-internal ROWIDs.
No memory is required (directly or indirectly) to buffer the structures themselves in Oracle, since target compounds are cached in the JChem Cartridge Server. See below
JChem Server uses a mechanism that is highly optimized for speed and memory footprint to cache molecular structures. The memory requirement of the structure cache depends primarily on the number of structures to be cached (the number of molecular structures in your structure tables) and on the size of the fingerprint used to capture the main attributes of the target molecular structures. As a rule of thumb, 100 MB of main memory can hold the cache for 1 million structure. (See here a detailed description of how to calculate the memory requirement of the structure cache.)
JChem Cartridge is made up of two major components:
The two components can be run on separate hosts which adds the flexibility of running them on different platforms.
Note that Oracle Express Edition is not supported.
In environments using "one-way" network virtualization (where virtual IP addresses exist only as destination addresses with the physical addresses being used as source addresses – such as in SunClusters), the url
property has to be set in jchem/cartridge/conf/jcart.properties using the Oracle JDBC URL notation. Setting this property will override the oracle.server.host, oracle.server.port and oracle.server.instance settings and will disable IP sanity checking in the JChem Cartridge (JCC) server. IP sanity checking to make sure that the JCC server allows only the Oracle server to connect to it that is specified in its configuration
All major molecular formats can be stored (formats created by MDL, Daylight, ChemAxon) in structure tables. The formats supported in structure tables are the same as with JChem Base.
In addition to the formats for structure tables, a number of other formats are supported for various operations.
Try setting the CURSOR_SHARING Oracle parameter to SIMILAR. It can be set either globally or in the session scope:
ALTER SESSION SET CURSOR_SHARING = SIMILAR
This will avoid the reparsing of SQL queries with literal parameters of which JChem Cartridge uses potentially many.
In many cases, enabling cost estimation can help. It may have the most dramatic effect with Oracle Enterprise Edition, when JChem Cartridge operators are called in the inner loop of a nested loop like:
----------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ----------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 2041 | 27 (4)| 00:00:01 | | 1 | VIEW | VM_NWVW_1 | 1 | 2041 | 27 (4)| 00:00:01 | | 2 | HASH UNIQUE | | 1 | 86 | 27 (4)| 00:00:01 | | 3 | NESTED LOOPS | | | | | | | 4 | NESTED LOOPS | | 1 | 86 | 26 (0)| 00:00:01 | |* 5 | TABLE ACCESS FULL | HIGHSAMP | 1 | 26 | 7 (0)| 00:00:01 | | 6 | BITMAP CONVERSION TO ROWIDS | | | | | | | 7 | BITMAP AND | | | | | | | 8 | BITMAP CONVERSION FROM ROWIDS| | | | | | |* 9 | INDEX RANGE SCAN | SYS_C0032145 | 1 | | 1 (0)| 00:00:01 | | 10 | BITMAP CONVERSION FROM ROWIDS| | | | | | | 11 | SORT ORDER BY | | | | | | |* 12 | DOMAIN INDEX | JCXPBCH_4500K | 1 | | | | | 13 | TABLE ACCESS BY INDEX ROWID | PBCH_4500K | 1 | 60 | 26 (0)| 00:00:01 | -----------------------------------------------------------------------------------------------------
_optimizer_rownum_pred_based_fkr
Oracle parameter to false
, if the Oracle Optimizer generates an execution plan similar to the above for SQL queries which include ROWNUM as a condition. (The parameter setting is the solution suggested by Oracle for problem ID 833286.1.)jc_compare
operator. It is worthwhile considering the use of this search option, if, broadly speaking, the number of rows to be moved into the filter query is likely to be less than the number of rows the jc_compare
operator would return without the filter query.See also the Fingerprint settings section of this forum topic . Note that with regular structure tables, you will want to use this SQL function for finding out fingerprint statistics:
jchem_core_pkg.get_idx_stats(idx_schema varchar2, idx_name varchar2, idx_partition varchar2) return varchar2
Also, you can use the t:na
search type option with the select jchem_core_pkg.get_hit_count
function to find out the number of structures which were marked positive during fingerprint screening. For example:
select jchem_core_pkg.get_hit_count('PKOVACS_TRUNK_USER', 'PBCH_4500K', 'STRUCTURE', 'c1nc2cncnc2n1', 't:na') from dual;
call jchem_core_pkg.load_cache('jchem', 'structures_idx', null, 'haltOnError:n');
grant select on sys.v_$instance to username
check current values
select name, value from v$parameter where name in ('processes', 'sessions', 'transactions')
increase the values, for example:
alter system set processes = 300 scope = spfile; alter system set sessions = 600 scope = spfile; alter system set transactions = 350 scope = spfile;
restart server
shutdown immediate; startup;
Why do I get 'class chemaxon/jchem/cartridge/oraresident/JFunctions does not exist' message?
Possibly, the rights of the <jchem_user> are not correctly set. Please run the following:
grant JCC_BASIC_ROLE to <jchem_user>;
Then recreate the public synonyms with this script:
call <jchem_owner>.PRIVMAN_PKG.SYNS_FOR_JCOBJS('<jchem_owner>','<jchem_user>');
What can cause java.rmi.NoSuchObjectException?
A very possible reason is that the user did not reopen their session. An other solution can be - beside reconnect - clearing the cache:
call rmi.clear_directory_cache();
After restarting Oracle, should I restart JChem Server as well?
Yes, each restart of the Oracle database must be followed by restarting the JChem Server.
Error starting at line : 1 in command - exec jchem_core_pkg.use_password('pw') Error report - ORA-29532: Java call terminated by uncaught Java exception: java.lang.RuntimeException: java.lang.Exception: Problem connecting to JChemServer: rmi://10.32.0.12:1099: the Permission ("java.net.SocketPermission" "10.32.0.12:1099" "connect,resolve") has not been granted to -. The PL/SQL to grant this is dbms_java.grant_permission( '-', 'SYS:java.net.SocketPermission', '10.32.0.12:1099', 'connect,resolve' ) ORA-06512: at "JCHEM.JCHEM_CORE_PKG", line 70 ORA-06512: at "JCHEM.JCHEM_CORE_PKG", line 66 ORA-06512: at line 1 29532. 00000 - "Java call terminated by uncaught Java exception: %s" *Cause: A Java exception or error was signaled and could not be resolved by the Java code. *Action: Modify Java code, if this behavior is not intended.
As a workaround granting the following privilege for PUBLIC to the appropriate host:port solves the issue.
exec dbms_java.grant_permission('PUBLIC', 'SYS:java.net.SocketPermission','155.250.158.114:2099','connect,resolve');
If your question is not answered, please check out our forum or contact us.