Share this
Using Oracle Wallets and SEPS with Perl, JDBC, and ODBC
by Simon Pane on Mar 2, 2018 12:00:00 AM
- Exactly how do I make connections using SEPS and Oracle Wallets with Perl, JDBC Thin, or ODBC?
- Can we use certificates instead of passwords in the Wallet files?
Using a Certificate Instead of a Password in an Oracle Wallet
Oracle SEPS Wallets can certainly be setup to store a certificate instead of a username and password credential. I'm not going to go into the setup steps for this in this article as it's already well documented in the My Oracle Support (MOS) document: Configuring SSL for Client Authentication and Encryption With Self Signed Certificates On Both Ends Using orapki (Doc ID 401251.1) Some thoughts on this option/configuration:- Using a certificate can possibly be considered even more secure as it means there is no password associated with the database user and hence no other way for connections to be made. A wallet with the certificate is hence mandatory.
- We still have the risk of someone (including a bad actor) obtaining a copy of the wallet files and hence using the enclosed certificates but there's less risk of a lateral attack (meaning using those credentials against a different database than intended) because the same client certificate would also need to be imported on the secondary server and we can still secure the wallet files to the local machine using the "-auto_login_local" option (mentioned in the previous articles).
- There's still an issue (bug) that may be encountered with the "-auto_login_local" option specifically with Oracle version 12.1.0.2 (discussed in the previous articles). And if encountered, we can still mitigate that using the work-around described in the other blog article or by using 12.2 binaries to create the wallet files regardless of the database version.
- The setup is bit more complex and possibly requires a database restart (hence outage) and likely requires a listener restart.
Testing Setup
I have already configured the Oracle Wallet as per the previous blog articles and have two credentials stored within:$ mkstore -wrl $ORACLE_BASE/wallets -listCredential
Oracle Secret Store Tool : Version 12.1.0.2
Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
Enter wallet password:
List credential (index: connect_string username)
2: ORCL scott
1: 192.168.1.100:1521/ORCL FRANKLIN
$
And I can test the functionality with:
$ echo "SELECT 'Connected as: '||user FROM DUAL;" | sqlplus -s / as sysdba
Connected as: SYS
$ echo "SELECT 'Connected as: '||user FROM DUAL;" | sqlplus -s '/@ORCL'
Connected as: SCOTT
$ echo "SELECT 'Connected as: '||user FROM DUAL;" | sqlplus -s '/@192.168.1.100:1521/ORCL'
Connected as: FRANKLIN
$
(Note: I do have "SET HEADING OFF" in $ORACLE_HOME/sqlplus/admin/glogin.sql)
SEPS Connections Using Perl
Making the connections with Perl is almost trivially simple. Just set the username and password arguments to an empty string in the DBI->connect method. Sample script " OraConnect.pl":use DBI;
my $dbh = DBI->connect('dbi:Oracle:ORCL','','',{RaiseError=>1,PrintError=>1}) || die( $DBI::errstr . "\n" );
if ($dbh ne undef) {
my $sth = $dbh->prepare(qq{SELECT 'Connected as: '||user FROM DUAL});
$sth->execute();
print $sth->fetchrow_array()."\n";
$sth->finish();
$dbh->disconnect || warn $dbh->errstr;
}
Execution using the Oracle distributed Perl is as simple as:
$ $ORACLE_HOME/perl/bin/perl OraConnect.pl
Connected as: SCOTT
$
Replacing the connect method data_source to use an EZconnect string shows it works equally as well:
$ grep Oracle OraConnect.pl
my $dbh = DBI->connect('dbi:Oracle:192.168.1.100:1521/ORCL','','',{RaiseError=>1,PrintError=>1}) || die( $DBI::errstr . "\n" );
$ $ORACLE_HOME/perl/bin/perl OraConnect.pl
Connected as: FRANKLIN
$
So with perl the only change required is to use an empty string for both the username and password.
SEPS Connections Using JDBC THIN
To test connections using the JDBC THIN driver and software distributed with the Oracle software is also pretty easy but first I need to create a small block of JAVA source code. Again, the idea is the same: not to specify any username or password in the source code. And to specify a SEPS formatted connection string such as "/@192.168.1.100:1521/ORCL". Simple JAVA source code file " OraConnect.java":import java.sql.*;
public class OraConnect {
public static void main(String[] argv) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println("Can't find the Oracle JDBC Driver");
e.printStackTrace();
return;
}
try {
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:/@192.168.1.100:1521/ORCL");
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("SELECT 'Connected as '||user FROM DUAL");
while (rset.next())
System.out.println(rset.getString(1));
rset.close();
stmt.close();
} catch (SQLException e) {
System.out.println("Connection Failed");
e.printStackTrace();
return;
}
}
}
If we compile and run as normal, an error is generated:
$ $ORACLE_HOME/jdk/bin/javac OraConnect.java
$ $ORACLE_HOME/jdk/jre/bin/java -cp $ORACLE_HOME/jdbc/lib/ojdbc6.jar:. OraConnect
Connection Failed
java.sql.SQLException: PKI classes not found. To use 'connect /' functionality, oraclepki.jar must be in the classpath: java.lang.NoClassDefFoundError: oracle/security/pki/OracleWallet
at oracle.jdbc.driver.PhysicalConnection.getSecretStoreCredentials(PhysicalConnection.java:1445)
at oracle.jdbc.driver.PhysicalConnection.parseUrl(PhysicalConnection.java:1210)
at oracle.jdbc.driver.PhysicalConnection.readConnectionProperties(PhysicalConnection.java:961)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:620)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:398)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:31)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:560)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:154)
at OraConnect.main(OraConnect.java:20)
$
So we must specify the PKI classes. Adding $ORACLE_HOME/jlib/oraclepki.jar and trying again gives another error:
$ $ORACLE_HOME/jdk/bin/javac OraConnect.java
$ $ORACLE_HOME/jdk/jre/bin/java -cp $ORACLE_HOME/jdbc/lib/ojdbc6.jar:$ORACLE_HOME/jlib/oraclepki.jar:. OraConnect
Connection Failed
java.sql.SQLException: ORA-01017: invalid username/password; logon denied
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:392)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:385)
at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:1018)
at oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:497)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:433)
at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:950)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:639)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:662)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:560)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at OraConnect.main(OraConnect.java:16)
$
The ORA-01017 error is common when dealing with SEPS and Wallets and sometimes can be a bit misleading. When using OCI (such as standard SQLPlus or RMAN connections), the "ORA-12578: TNS:wallet open failed" error is usually returned when the wallet files cannot be found or read. However, the JDBC driver is working a little bit differently meaning that in this case it's not finding the wallet file and instead is trying to connect to the database with the null username and password (as provided in the JAVA code) and therefore is getting the ORA-01017 error returned from the database. (Database auditing can be used to confirm this.) Therefore we need to add the "-Doracle.net.wallet_location" JAVA command line argument and try one more time:
$ $ORACLE_HOME/jdk/bin/javac OraConnect.java
$ $ORACLE_HOME/jdk/jre/bin/java -cp $ORACLE_HOME/jdbc/lib/ojdbc6.jar:$ORACLE_HOME/jlib/oraclepki.jar:. -Doracle.net.wallet_location=$ORACLE_BASE/wallets OraConnect
Connected as FRANKLIN
$
As we can see, now it works. But we had to change the java command line arguments. If we don't want to modify the java call, an alternative is to add the wallet location as a "property" within the JAVA source code. Hence the "
OraConnect.java" script becomes:
import java.sql.*;
import java.util.Properties;
public class OraConnect {
public static void main(String[] argv) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println("Can't find the Oracle JDBC Driver");
e.printStackTrace();
return;
}
try {
Properties props = new Properties();
props.setProperty("oracle.net.wallet_location","(SOURCE=(METHOD=file)(METHOD_DATA=(DIRECTORY=/u01/app/oracle/wallets)))");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:/@192.168.1.100:1521/ORCL",props);
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("SELECT 'Connected as '||user FROM DUAL");
while (rset.next())
System.out.println(rset.getString(1));
rset.close();
stmt.close();
} catch (SQLException e) {
System.out.println("Connection Failed");
e.printStackTrace();
return;
}
}
}
And by specifying the JAVA classes via the CLASSPATH variable, no extra command line arguments are required:
$ export CLASSPATH=$ORACLE_HOME/jdbc/lib/ojdbc6.jar:$ORACLE_HOME/jlib/oraclepki.jar:.
$ $ORACLE_HOME/jdk/bin/javac OraConnect.java
$ $ORACLE_HOME/jdk/jre/bin/java OraConnect
Connected as FRANKLIN
$
As you may have noticed with these examples, JDBC THIN connections work best with EZconnect connection strings (or fully expanded OracleNet connection strings). To use a TNS service name we must also use the "-Doracle.net.tns_admin" command line option or include the "oracle.net.tns_admin" property in the source code.
SEPS Connections Using ODBC
To test ODBC connections from Linux, I first had to first perform some prerequisite setup by root. Specifically installing unixODBC from the ol7_latest repo:# yum install -y unixODBC*
Verifying the location of the ODBC Driver Manager configuration files:
# odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/oracle/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
#
I then need to add the Oracle driver information to /etc/odbcinst.ini, providing the full path to the libsqora.so file from the $ORACLE_HOME. After adding we see:
# tail -7 /etc/odbcinst.ini
[OracleODBC]
Description = Oracle ODBC Driver
Driver = /u01/app/oracle/product/12.1.0/dbhome_1/lib/libsqora.so.12.1
Setup =
FileUsage =
CPTimeout =
CPReuse =
Now that the prerequisite work is done, testing as the "oracle" user again, I can setup some local DSNs in
~/odbc.ini. I've added two almost identical DSNs in my
~/odbc.ini file. The first one I've called "[ORCL_TNS]" and I specify "ServerName = ORCL" (referencing my TNS service name). The second DSN is called "[ORCL_EZ]" and it's the same except it uses "ServerName = 192.168.1.100:1521/ORCL" to force the EZconnect connection. In both cases the "UserID" DSN property is not set and I reference the Oracle database driver created previously via "Driver = OracleODBCDriver". Hence the entries are simply:
$ cat ~/.odbc.ini
[ORCL_TNS]
Driver = OracleODBCDriver
ServerName = ORCL
[ORCL_EZ]
Driver = OracleODBCDriver
ServerName = 192.168.1.100:1521/ORCL
$
Testing both entries :
$ echo "SELECT user FROM DUAL" | isql ORCL_TNS
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> SELECT user FROM DUAL
+-------------------------------+
| USER |
+-------------------------------+
| SCOTT |
+-------------------------------+
SQLRowCount returns -1
1 rows fetched
SQL>
$ echo "SELECT user FROM DUAL" | isql ORCL_EZ
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> SELECT user FROM DUAL
+-------------------------------+
| USER |
+-------------------------------+
| FRANKLIN |
+-------------------------------+
SQLRowCount returns -1
1 rows fetched
SQL>
Worked perfectly and was pretty simple to set up!
Conclusion
The above examples illustrate how simple it is to using SEPS and Oracle Wallets with various additional languages/protocols. (The previous articles covered making similar connections using the Oracle Call Interface [OCI] and tools like SQLPlus and RMAN). The only catch is that JDBC THIN connections are best suited with EZconnect connection strings (instead of TNS service entries) when using SEPS. Interestingly this discussion brings up an important point or risk: are your database passwords possibly exposed in your source code? Is that matter made worse due to the scope and visibility of that source code in your source control management system? Or subject to more risks of accidental exposure (such as in a repo clone). In which case, this is yet another strong justification for using SEPS in the first place as it means that your source code no longer is a security exposure due to hardcoded passwords!Additional References
Using a Secure External Password Store with the JDBC Thin Driver (Doc ID 1441745.1) How to Configure the Unix ODBC Driver Manager (64-bit) on Linux x86-64 (Doc ID 742548.1) How To Configure Oracle External Password Store (Wallet) To Work With Oracle ODBC (Doc ID 1430666.1)Share this
- Technical Track (967)
- Oracle (410)
- MySQL (140)
- Cloud (128)
- Microsoft SQL Server (117)
- Open Source (90)
- Google Cloud (81)
- Microsoft Azure (63)
- Amazon Web Services (AWS) (58)
- Big Data (52)
- Google Cloud Platform (46)
- Cassandra (44)
- DevOps (41)
- Pythian (33)
- Linux (30)
- Database (26)
- Performance (25)
- Podcasts (25)
- Site Reliability Engineering (25)
- PostgreSQL (24)
- Oracle E-Business Suite (23)
- Oracle Database (22)
- Docker (21)
- DBA (20)
- Security (20)
- Exadata (18)
- MongoDB (18)
- Oracle Cloud Infrastructure (OCI) (18)
- Oracle Exadata (18)
- Automation (17)
- Hadoop (16)
- Oracleebs (16)
- Amazon RDS (15)
- Ansible (15)
- Snowflake (15)
- ASM (13)
- Artificial Intelligence (AI) (13)
- BigQuery (13)
- Replication (13)
- Advanced Analytics (12)
- Data (12)
- GenAI (12)
- Kubernetes (12)
- LLM (12)
- Authentication, SSO and MFA (11)
- Cloud Migration (11)
- Machine Learning (11)
- Rman (11)
- Datascape Podcast (10)
- Monitoring (10)
- Apache Cassandra (9)
- ChatGPT (9)
- Data Guard (9)
- Infrastructure (9)
- Oracle Applications (9)
- Python (9)
- Series (9)
- AWR (8)
- High Availability (8)
- Oracle EBS (8)
- Oracle Enterprise Manager (OEM) (8)
- Percona (8)
- Apache Beam (7)
- Data Governance (7)
- Innodb (7)
- Microsoft Azure SQL Database (7)
- Migration (7)
- Myrocks (7)
- Performance Tuning (7)
- Data Enablement (6)
- Data Visualization (6)
- Database Performance (6)
- Oracle Enterprise Manager (6)
- Orchestrator (6)
- RocksDB (6)
- Serverless (6)
- Azure Data Factory (5)
- Azure Synapse Analytics (5)
- Covid-19 (5)
- Disaster Recovery (5)
- Generative AI (5)
- Google BigQuery (5)
- Mariadb (5)
- Microsoft (5)
- Scala (5)
- Windows (5)
- Xtrabackup (5)
- Airflow (4)
- Analytics (4)
- Apex (4)
- Cloud Security (4)
- Cloud Spanner (4)
- CockroachDB (4)
- Data Management (4)
- Data Pipeline (4)
- Data Security (4)
- Data Strategy (4)
- Database Administrator (4)
- Database Management (4)
- Database Migration (4)
- Dataflow (4)
- Fusion Middleware (4)
- Google (4)
- Oracle Autonomous Database (Adb) (4)
- Oracle Cloud (4)
- Prometheus (4)
- Redhat (4)
- Slob (4)
- Ssl (4)
- Terraform (4)
- Amazon Relational Database Service (Rds) (3)
- Apache Kafka (3)
- Apexexport (3)
- Aurora (3)
- Business Intelligence (3)
- Cloud Armor (3)
- Cloud Database (3)
- Cloud FinOps (3)
- Cosmos Db (3)
- Data Analytics (3)
- Data Integration (3)
- Database Monitoring (3)
- Database Troubleshooting (3)
- Database Upgrade (3)
- Databases (3)
- Dataops (3)
- Digital Transformation (3)
- ERP (3)
- Google Chrome (3)
- Google Cloud Sql (3)
- Google Workspace (3)
- Graphite (3)
- Heterogeneous Database Migration (3)
- Liquibase (3)
- Oracle Data Guard (3)
- Oracle Live Sql (3)
- Oracle Rac (3)
- Perl (3)
- Rdbms (3)
- Remote Teams (3)
- S3 (3)
- SAP (3)
- Tensorflow (3)
- Adf (2)
- Adop (2)
- Amazon Data Migration Service (2)
- Amazon Ec2 (2)
- Amazon S3 (2)
- Apache Flink (2)
- Ashdump (2)
- Atp (2)
- Autonomous (2)
- Awr Data Mining (2)
- Cloud Cost Optimization (2)
- Cloud Data Fusion (2)
- Cloud Hosting (2)
- Cloud Infrastructure (2)
- Cloud Shell (2)
- Cloud Sql (2)
- Conferences (2)
- Cosmosdb (2)
- Cost Management (2)
- Cyber Security (2)
- Data Analysis (2)
- Data Discovery (2)
- Data Engineering (2)
- Data Migration (2)
- Data Modeling (2)
- Data Quality (2)
- Data Streaming (2)
- Data Warehouse (2)
- Database Consulting (2)
- Database Migrations (2)
- Dataguard (2)
- Docker-Composer (2)
- Enterprise Data Platform (EDP) (2)
- Etl (2)
- Events (2)
- Gemini (2)
- Health Check (2)
- Infrastructure As Code (2)
- Innodb Cluster (2)
- Innodb File Structure (2)
- Innodb Group Replication (2)
- NLP (2)
- Neo4J (2)
- Nosql (2)
- Open Source Database (2)
- Oracle Datase (2)
- Oracle Extended Manager (Oem) (2)
- Oracle Flashback (2)
- Oracle Forms (2)
- Oracle Installation (2)
- Oracle Io Testing (2)
- Podcast (2)
- Power Bi (2)
- Redshift (2)
- Remote DBA (2)
- Remote Sre (2)
- SAP HANA Cloud (2)
- Single Sign-On (2)
- Webinars (2)
- X5 (2)
- Actifio (1)
- Adf Custom Email (1)
- Adrci (1)
- Advanced Data Services (1)
- Afd (1)
- Ahf (1)
- Alloydb (1)
- Amazon (1)
- Amazon Athena (1)
- Amazon Aurora Backtrack (1)
- Amazon Efs (1)
- Amazon Redshift (1)
- Amazon Sagemaker (1)
- Amazon Vpc Flow Logs (1)
- Analysis (1)
- Analytical Models (1)
- Anisble (1)
- Anthos (1)
- Apache (1)
- Apache Nifi (1)
- Apache Spark (1)
- Application Migration (1)
- Ash (1)
- Asmlib (1)
- Atlas CLI (1)
- Awr Mining (1)
- Aws Lake Formation (1)
- Azure Data Lake (1)
- Azure Data Lake Analytics (1)
- Azure Data Lake Store (1)
- Azure Data Migration Service (1)
- Azure OpenAI (1)
- Azure Sql Data Warehouse (1)
- Batches In Cassandra (1)
- Business Insights (1)
- Chown (1)
- Chrome Security (1)
- Cloud Browser (1)
- Cloud Build (1)
- Cloud Consulting (1)
- Cloud Data Warehouse (1)
- Cloud Database Management (1)
- Cloud Dataproc (1)
- Cloud Foundry (1)
- Cloud Manager (1)
- Cloud Networking (1)
- Cloud SQL Replica (1)
- Cloud Scheduler (1)
- Cloud Services (1)
- Cloud Strategies (1)
- Compliance (1)
- Conversational AI (1)
- DAX (1)
- Data Analytics Platform (1)
- Data Box (1)
- Data Classification (1)
- Data Cleansing (1)
- Data Encryption (1)
- Data Estate (1)
- Data Flow Management (1)
- Data Insights (1)
- Data Integrity (1)
- Data Lake (1)
- Data Leader (1)
- Data Lifecycle Management (1)
- Data Lineage (1)
- Data Masking (1)
- Data Mesh (1)
- Data Migration Assistant (1)
- Data Migration Service (1)
- Data Mining (1)
- Data Monetization (1)
- Data Policy (1)
- Data Profiling (1)
- Data Protection (1)
- Data Retention (1)
- Data Safe (1)
- Data Sheets (1)
- Data Summit (1)
- Data Vault (1)
- Data Warehouse Modernization (1)
- Database Auditing (1)
- Database Consultant (1)
- Database Link (1)
- Database Modernization (1)
- Database Provisioning (1)
- Database Provisioning Failed (1)
- Database Replication (1)
- Database Scaling (1)
- Database Schemas (1)
- Database Security (1)
- Databricks (1)
- Datascape 59 (1)
- DeepSeek (1)
- Duet AI (1)
- Edp (1)
- Gcp Compute (1)
- Gcp-Spanner (1)
- Global Analytics (1)
- Google Analytics (1)
- Google Cloud Architecture Framework (1)
- Google Cloud Data Services (1)
- Google Cloud Partner (1)
- Google Cloud Spanner (1)
- Google Cloud VMware Engine (1)
- Google Compute Engine (1)
- Google Dataflow (1)
- Google Datalab (1)
- Google Grab And Go (1)
- Graph Algorithms (1)
- Graph Databases (1)
- Graph Inferences (1)
- Graph Theory (1)
- GraphQL (1)
- Healthcheck (1)
- Information (1)
- Infrastructure As A Code (1)
- Innobackupex (1)
- Innodb Concurrency (1)
- Innodb Flush Method (1)
- It Industry (1)
- Kubeflow (1)
- LMSYS Chatbot Arena (1)
- Linux Host Monitoring (1)
- Linux Storage Appliance (1)
- Looker (1)
- MMLU (1)
- Managed Services (1)
- Migrate (1)
- Migrating Ssis Catalog (1)
- Migration Checklist (1)
- MongoDB Atlas (1)
- MongoDB Compass (1)
- Newsroom (1)
- Nifi (1)
- OPEX (1)
- ORAPKI (1)
- Odbcs (1)
- Odbs (1)
- On-Premises (1)
- Ora-01852 (1)
- Ora-7445 (1)
- Oracle Cursor (1)
- Oracle Database Appliance (1)
- Oracle Database Se2 (1)
- Oracle Database Standard Edition 2 (1)
- Oracle Database Upgrade (1)
- Oracle Database@Google Cloud (1)
- Oracle Exadata Smart Scan (1)
- Oracle Licensing (1)
- Oracle Linux Virtualization Manager (1)
- Oracle Oda (1)
- Oracle Openworld (1)
- Oracle Parallelism (1)
- Oracle RMAN (1)
- Oracle Rdbms (1)
- Oracle Real Application Clusters (1)
- Oracle Reports (1)
- Oracle Security (1)
- Oracle Wallet (1)
- Perfomrance (1)
- Performance Schema (1)
- Policy (1)
- Prompt Engineering (1)
- Public Cloud (1)
- Pythian News (1)
- Rdb (1)
- Replication Compatibility (1)
- Replication Error (1)
- Retail (1)
- Scaling Ir (1)
- Securing Sql Server (1)
- Security Compliance (1)
- Serverless Computing (1)
- Sso (1)
- Tenserflow (1)
- Teradata (1)
- Vertex AI (1)
- Vertica (1)
- Videos (1)
- Workspace Security (1)
- Xbstream (1)
- May 2025 (1)
- March 2025 (2)
- February 2025 (1)
- January 2025 (2)
- December 2024 (1)
- October 2024 (2)
- September 2024 (7)
- August 2024 (4)
- July 2024 (2)
- June 2024 (6)
- May 2024 (3)
- April 2024 (2)
- February 2024 (1)
- January 2024 (11)
- December 2023 (10)
- November 2023 (11)
- October 2023 (10)
- September 2023 (8)
- August 2023 (6)
- July 2023 (2)
- June 2023 (13)
- May 2023 (4)
- April 2023 (6)
- March 2023 (10)
- February 2023 (6)
- January 2023 (5)
- December 2022 (10)
- November 2022 (10)
- October 2022 (10)
- September 2022 (13)
- August 2022 (16)
- July 2022 (12)
- June 2022 (13)
- May 2022 (11)
- April 2022 (4)
- March 2022 (5)
- February 2022 (4)
- January 2022 (14)
- December 2021 (16)
- November 2021 (11)
- October 2021 (6)
- September 2021 (11)
- August 2021 (6)
- July 2021 (9)
- June 2021 (4)
- May 2021 (8)
- April 2021 (16)
- March 2021 (16)
- February 2021 (6)
- January 2021 (12)
- December 2020 (12)
- November 2020 (17)
- October 2020 (11)
- September 2020 (10)
- August 2020 (11)
- July 2020 (13)
- June 2020 (6)
- May 2020 (9)
- April 2020 (18)
- March 2020 (21)
- February 2020 (13)
- January 2020 (15)
- December 2019 (10)
- November 2019 (11)
- October 2019 (12)
- September 2019 (16)
- August 2019 (15)
- July 2019 (10)
- June 2019 (16)
- May 2019 (20)
- April 2019 (21)
- March 2019 (14)
- February 2019 (18)
- January 2019 (18)
- December 2018 (5)
- November 2018 (16)
- October 2018 (12)
- September 2018 (20)
- August 2018 (27)
- July 2018 (31)
- June 2018 (34)
- May 2018 (28)
- April 2018 (27)
- March 2018 (17)
- February 2018 (8)
- January 2018 (20)
- December 2017 (14)
- November 2017 (4)
- October 2017 (1)
- September 2017 (3)
- August 2017 (5)
- July 2017 (4)
- June 2017 (2)
- May 2017 (7)
- April 2017 (7)
- March 2017 (8)
- February 2017 (8)
- January 2017 (5)
- December 2016 (3)
- November 2016 (4)
- October 2016 (8)
- September 2016 (9)
- August 2016 (10)
- July 2016 (9)
- June 2016 (8)
- May 2016 (13)
- April 2016 (16)
- March 2016 (13)
- February 2016 (11)
- January 2016 (6)
- December 2015 (11)
- November 2015 (11)
- October 2015 (5)
- September 2015 (16)
- August 2015 (4)
- July 2015 (1)
- June 2015 (3)
- May 2015 (6)
- April 2015 (5)
- March 2015 (5)
- February 2015 (4)
- January 2015 (3)
- December 2014 (7)
- October 2014 (4)
- September 2014 (6)
- August 2014 (6)
- July 2014 (16)
- June 2014 (7)
- May 2014 (6)
- April 2014 (5)
- March 2014 (4)
- February 2014 (10)
- January 2014 (6)
- December 2013 (8)
- November 2013 (12)
- October 2013 (9)
- September 2013 (6)
- August 2013 (7)
- July 2013 (9)
- June 2013 (7)
- May 2013 (7)
- April 2013 (4)
- March 2013 (7)
- February 2013 (4)
- January 2013 (4)
- December 2012 (6)
- November 2012 (8)
- October 2012 (9)
- September 2012 (3)
- August 2012 (5)
- July 2012 (5)
- June 2012 (7)
- May 2012 (11)
- April 2012 (1)
- March 2012 (8)
- February 2012 (1)
- January 2012 (6)
- December 2011 (8)
- November 2011 (5)
- October 2011 (9)
- September 2011 (6)
- August 2011 (4)
- July 2011 (1)
- June 2011 (1)
- May 2011 (5)
- April 2011 (2)
- February 2011 (2)
- January 2011 (2)
- December 2010 (1)
- November 2010 (7)
- October 2010 (3)
- September 2010 (8)
- August 2010 (2)
- July 2010 (4)
- June 2010 (7)
- May 2010 (2)
- April 2010 (1)
- March 2010 (3)
- February 2010 (3)
- January 2010 (2)
- November 2009 (6)
- October 2009 (6)
- August 2009 (3)
- July 2009 (3)
- June 2009 (3)
- May 2009 (2)
- April 2009 (8)
- March 2009 (6)
- February 2009 (4)
- January 2009 (3)
- November 2008 (3)
- October 2008 (7)
- September 2008 (6)
- August 2008 (9)
- July 2008 (9)
- June 2008 (9)
- May 2008 (9)
- April 2008 (8)
- March 2008 (4)
- February 2008 (3)
- January 2008 (3)
- December 2007 (2)
- November 2007 (7)
- October 2007 (1)
- August 2007 (4)
- July 2007 (3)
- June 2007 (8)
- May 2007 (4)
- April 2007 (2)
- March 2007 (2)
- February 2007 (5)
- January 2007 (8)
- December 2006 (1)
- November 2006 (3)
- October 2006 (4)
- September 2006 (3)
- July 2006 (1)
- May 2006 (2)
- April 2006 (1)
- July 2005 (1)
No Comments Yet
Let us know what you think