I've noticed that some simple queries ("select * from ") that are cached on the Snowflake web console are not cached when I issue the exact same query via JDBC. Is this to be expected? (Using the same user and role as well.)
Can you please check if you were using the parameter USE_CACHED_RESULT?
There are several parameters for session or connection which make the JDBC access different from the GUI behaviour.
https://docs.snowflake.net/manuals/user-guide/jdbc-configure.html#connection-parameters
Related
I am trying to get all the schema from a database which I passed in the connection url in snowflake jdbc driver.
Observation :
I am getting all the schema from all the databases even though I pass wrong database.
wrong database/schema/warehouse does not validate during the connection creation time.
URL : jdbc:snowflake://XXXXX.region.aws.snowflakecomputing.com?role=custome_role&warehouse=test_wh&db=test_db&schema=test_schema &CLIENT_METADATA_REQUEST_USE_CONNECTION_CTX=true
Why Snowflake JDBC driver does not validate the wrong warehouse/database/schema during connection creation time or query execution time?
What I see is that there is no check on the DB name parameter being passed in the connection url.
The only check that is done is for Role and if the role is existent then all the db's for that will be listed.
Use
statement.executeQuery("show databases;");
And check if the list contains the requested database
I am developing java applications which connect to Oracle databases. Application loads some amount of data on startup. Because of slow connection to TEST environment, applications start up take some time.
I am looking if there is some proxy/cache tool, which would locally store results for every query. So it could load result from memory if query was already called, instead of calling DB again. This could save a lot of time.
I guess ProxySQL does something similar but it is targeted for MySQL. Is there something for Oracle DB ?
Check out the Oracle Client Result Cache. It works with the JDBC OCI driver.
https://docs.oracle.com/database/121/TGDBA/tune_result_cache.htm#TGDBA626
A webapp is using following configuration to store some data in DB:
spring.datasource.continueOnError=true
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:mydb
I was trying to reach this DB using H2 Console, but something is wrong. There are no tables even though I know they were created. I can also access any made up JDBC:URL like jdbc:h2:mem:fakeXYZ just as well with same result. What is goning on here? How can I see this DB tables and data?
Your JDBC URL specifies a named in-memory database which by default only will be available for connections from within the same virtual machine.
You can either change the URL to use a file-based database, or you will have to start a TCP server to allow for connections from other processes.
I have a web service which processes inserts/updated data to DB. When client calls this webservice, UserId(currently logged in user to portal) will be sent in Request. I need to pass this userId to Db connection or set it in sys context for Audit purpose. we have existing audit tables and triggers to inserts/updates to Audit table after insert/update on actual table. So to track these changes I need to pass this UserId somehow to connection so that it can be retrieved from DB from Sys Context or $session and inserts in Audit table. I am currently using Spring and Hibernate transactions to process data with DB.
I tried to Set client info on Connection but it's not working. I tried below:
Session session=sessionFactory.getCurrentSession();
SessionImpl sImpl=(SessionImpl) session;
Connection connection=sImpl.connection();
connection.setClientInfo("ClientUser", "ABC");
And also I am trying to set client info by calling Stored procedure DBMS_APPLICATION_INFO.SET_CLIENT_INFO before performing operation on DB every time from application code.but I am not sue if it's a correct way to handle it.
I am trying it with both OCI and thin JDBC drivers but not able find a way to set this user id.
Can someone let me know if there is any efficient way to pass user id on sys context or with Connection. I am currently using hibernate4, Spring, Websphere Server, Oracle DB.
I am using Spring #Transactional to handle hibernate Connections and transactions to perform operation on DB.Connections are from Connection pool and I am using org.springframework.jndi.JndiObjectFactoryBean for dataSource.
is there any way to have interceptor or wrapper around connection to set it when we get the connection from connection pool.
Has anyone done this before?
This is described in spring data JDBC Extensions for the Oracle Database
Chapter
8.2 Configuration of a Custom DataSource Connection Preparer
...but you could implement a ConnectionPreparer that would use the current users login id. That way you can capture user login information even if your data source is configured with a shared user name.
This is a solution for oracle, which I think you are using. It should be also possible to adapt that to another database.
I support an application whose UI is built on weblogic server. I need to know the sql query fired in the database whenever any action is performed on UI. Since there a lot of users hence I need to know is there any specific action through which I can identify it ?
Your managed server logs should give you queries run through a PreparedStatement. Any database will give you auditing capabilities so you can track what SQL was run, origins and parameters passed.