Blogs

Functions in the WHERE clause...

Business logic. Sometimes it lives in the application, sometimes it lives in the database. I'll save the application/db argument for each individual case that I encounter. But if you do have significant business logic in your database, there will probably come a time when someone wants to incorporate some of that logic into a query they are writing.

I am often asked to improve the speed of queries that have User Defined Functions (UDF) in the where clause. Sometimes I am successful at tuning them, sometimes a major structural or logic change is required to get good performance.

A complete sandbox installation for VirtualBox... Thanks to Developer Days!

Oracle is supplying some ready-to-run downloadable VMs including Operating Systems, OSes with Oracle already installed and ready-to-run RAC systems. I was hoping to leverage these to save some time for sandbox environments but from what I have seen so far they are only for the enterprise level Oracle VM product. I only have the horsepower to run Oracle VirtualBox which is their workstation level product. It seems they use different formats for each product and while it may be possible to convert VMs backs and forth, I'm just not up for it right now.

Diffing 2 Tables

If you have a need to diff tables in schemas and databases you might want to check out Diff Kit at http://www.diffkit.org/.

It looks to be a little bit heavier duty than a standard MINUS/UNION query but it looks like it will talk to Oracle, MySQL, DB2 or any JDBC data source.

From the website:

Tags: 

Did you know... Writing to the alert log?

Came upon this post during my travels. Jonathan Lewis reveals how to write a string to the Alert Log, Current Session Trace File, or Both. Also a few misc functions are included.

dbms_system.ksdwrt(1,'test')
writes to alert log

dbms_system.ksdwrt(2,'test')
writes to session's trace file

dbms_system.ksdwrt(3,'test')
writes to both

see also
dbms_system.ksddt - writes a date-time stamp
dbms_system.ksdind(N) - indents text using ":' characters

Tags: 

Dynamically Branching To Pages and Passing Parameters in Application Express

I have a love/hate relationship with frameworks. Once you get proficient with a framework (like Application Express) you can get a lot done quickly. The framework can also stand in your way if you encounter a bug or maybe a gray area where the Framework wasn't fully fleshed out. Sometimes it takes some digging to find a workaround.

In this case I have a simple reporting application that I built in Application Express. I wanted the user to select a report, then continue to a Criteria screen, enter some date ranges and then hit 'Submit' to render the report.

Tags: 

Pesky .nfs files showing up in my directory - what are they?

> du .nfs*
0       .nfsFCE32
0       .nfsFDE93
0       .nfsFE2E
195048  .nfsDDE4
757032  .nfsE9BC11

.nfsxxxxx files are orphaned files that were deleted from an NFS mount but are still in use by a process. Once the final process using the file releases its file handle the file will be deleted. Because of the shared nature of NFS mounts, the files can be viewed from any of the machines connected to the mount. Keep in mind the process may be running on any of the machines connected to the mount.

Tags: 

Monitoring Oracle Change Data Capture Queues

I shared a shell script that will check Oracle CDC Queues to make sure they aren't going stale. If your CDC consumer has not picked up changes in 48-72 hours then something may be wrong. The scripts can be customized to alert at any interval, hopefully this will serve as a good 'nudge' to get you going in the right direction.

Everything you need is here.

If you are an OEM user you can probably grab the SQL I shared and modify it for use with OEM User Defined Metrics or alerting.

-Dave

WHERE column IS NULL and index usage...

I have a customer with a million row 125mb table. A query they are running returns very slowly:

explain plan for SELECT * FROM BIGTABLE WHERE col1 IS NULL;
SELECT * FROM TABLE(dbms_xplan.display);

--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 96 | 1436 |

Tags: 

Recording User Defined Metrics in Oracle Enterprise Manager OEM

Did you know that OEM has a built in interface for executing simple ad-hoc queries and recording the results?

Here is how I set up a recurring query to find the number of user logins every 15 minutes and record the data.

1) Navigate to a database instance in OEM

2) Select the Related Links -> User Defined Metrics link from the bottom of the Database Instance Home tab.

3) Select the Create button to create a new User Defined Metric
a. Enter the Metric Name

Finding Query Block names for a SQL that you can't modify...

I recently had an issue where a query being submitted to the database had a large change in performance. I could attribute the change to a recent change in object statistics, but the query wasn't behaving because of a combination of a view, subquery, UNION, and LIKE operators. After spending too much time on this statement I decided to hint it to make it perform like it did before the most recent stats change.

Pages

Subscribe to RSS - blogs