Going Green with the Oracle Recyclebin

I’ve been seeing rather a lot of Chris Hemsworth lately…in more ways than one.
My most recent trip to the local Cinema saw him reprising the role of Thor, or “Phwoarrr !” as Deb insists on calling him.
No spoilers, but let’s just say that the scene with the topless blonde was not all I’d hoped for.
Not that I feel the need to compete but, like Chris, I can also do my bit to save the planet, courtesy of a bit of recycling.

Once upon a time, when you issued a DROP TABLE command, the table, together with it’s associated indexes and triggers, was wiped from the face of your database, as if it had never existed.
Of course, if you subsequently decided that you shouldn’t have dropped the table, your options were limited to re-creating it (and the data, indexes etc) by hand, or going through the fun and frolics of a point-in-time recovery.
Since 10g however, things have been a bit different. Continue reading

How Oracle uses Space, sort of.

Space. The Final Frontier.
My long-suffering Mrs does enjoy a bit of sci-fi especially if some hunky all-action type is wandering around with his shirt off.
“That man has such a nice personality”, she may well sigh, staring dreamily at the screen.

As with any software Oracle error messages can look as if they’ve been put together in some alien language.
This is especially true if your fairly new to Oracle.
When you get space errors in Oracle, the answer is not necessarily to simply add more space.

What we’re going to look at here is :

  • what a tablespace is and the various things they are used for
  • how redo logs work ( and how they are archived)
  • some of the space related errors you may encounter and what the underlying causes may be

Of necessity, I’ve made some generalisations here. The purpose of this post is not to provide an in-depth technical guide to the inner workings of Oracle. Rather it is to provide enough information for you to work out whether you should be looking up the phone number for your hard-pressed DBA, or looking at that bit of code you’ve just run.

Also, like the author, this post is a bit short of cache. For the sake of simplicity (and that weak pun), I’m going to pretend that Oracle uses memory in one amorphous lump.
Additionally, I’ve not taken into consideration Direct Path Inserts.

Continue reading

Re-structuring data for Hierarchical Queries – or (Tree) Walking With Big Macs

Steve McNulty. Even the name sounds a bit hard. This is not the hero in Jason Statham’s latest celluloid exploit. Neither is it the central character in a hard-bitten cop drama.
Steve McNulty is, in fact the current Luton Town captain and a member of an endangered species – the stopper Centre-Half.
When you first set eyes on him, he looks, well, a bit chunky. You might imagine his nickname to be “Big Mac” because of his penchant for a certain fast-food chain.
This is something of a mis-conception.
Firstly, he’s not overweight. In contrast to the other players on the pitch, his body has not so much been honed to athletic perfection as hewn from solid rock.
It is a build that has not been seen for years in the elite (effete ?) Premier League.
He’s not the fastest player, as you’d expect, but he’s strong in the tackle. When he heads the ball, adjectives such as cushioning and glancing do not apply. It’s a Kirby Kiss (he’s a Scouser). The ball is definitely not his friend.
So, Big Mac he is not. He couldn’t be associated with anything that’s served with namby-pamby french-fries. A McNulty burger is a huge slab of meat wedged between two halves of a cottage loaf. It would only ever be served with chunky chips.
It’s McNulty and friends that provide the inspiration for the examples that follow.
I recently came across a situation where I needed to take some relational data and convert it into a hierarchy for the purposes of dropping it into an APEX tree. This proved slightly more challenging than I originally thought. Continue reading

Native Dynamic SQL – Dodgy Code and DRS

Dynamic. That’s a positive word if ever there was one. Ascribing this adjective to anything would convey an image of energy and forward momentum.
On the question of Dynamic SQL, the images are rather more equivocal.
On the plus side, Native Dynamic SQL gives you the ability to :

  • execute DDL statements from within PL/SQL programs
  • code for instances where the required DML statement is not known ahead of time

On the flip side, it can also mean code that is:

  • difficult to read and maintain
  • prone to performance problems
  • insecure

To wander through this minefield, I have enlisted the support of a world where DRS does not stand for Dodgy Review System.
Yes, it’s the wacky and entertaining (not always intentionally so) world of Formula 1… Continue reading

Simple Pleasures…rlwrap and SQL*Plus Command Line editing on Linux

Fat, bald, likes a drink and a smoke. No, not me. That’s a description of Darren Lehman, the new coach of the Australian Cricket Team.
Sounds like a good bloke to me.
As a cricket fan, with the Ashes as the highlight of the sporting summer, I’m getting a horrible sense of deja vu.
If you read the press, Australian and English, you might be forgiven for thinking that the series is a foregone conclusion.
Yes, England should win, on paper. However, unless the groundsmen at the relevant venues have been doing something very innovative, the Tests themselves will be played on grass.
In order to take my mind off some of the more worrying parallels with this series and the one in 1989 – when Alan Border and a bunch of Aussie no-hopers demolished England 4-0 – I’ve been looking at one of those niggling little problems that I always mean to get sorted but never quite get round to.

Generally speaking, I much prefer Linux to Windows. There is however, on area where Windows has the upper hand.
When you’re working in SQL*Plus, Windows allows command line recall and editing by default. This feature is not present in Linux by default.
However, Linux, being Linux, there is a handy utility that can implement this functionality. It’s called rlwrap.
What I’m going to cover here is :

  • a recap of built-in SQL*Plus editing capabilities
  • Using rlwrap with SQL*Plus
  • The joys of TAB-Completion

Continue reading

Oracle Float to Integer fun and Sachin Tendulkar

I recently spent some time working with Venkata, an Oracle programmer and keen cricket fan :

Venkata smiling the smile of a man whose team have won the cricket world cup twice more than...er...Wales.

Venkata smiling the smile of a man whose team have won the cricket world cup twice more than…er…Wales.

This post is about the fun and games involved in the bulk loading of data into Oracle – especially when it includes floating point values.
In Venkata’s honour, I’m going to explore this topic through the medium of the career of Sachin Tendulkar…

At this point it’s probably worth wandering off the point to explore some of the highlights of The Little Master’s career.

India’s tour of England in 1996 has been largely forgotten. However, it proved to be a watershed in our hero’s test career.
The first test of the series at Edgebaston was not untypical of the time – Indian batsmen skittled in conditions totally alien to them. The could only muster a paltry 219 in their second innings and none of them got beyond 18…apart from Tendulkar, ninth out for 122, made with a serenity that contrasted starkly with the chaos surrounding him.
It was in the very next match, at Lords, that India granted test debuts to two batsmen who themselves would prove quite useful over the years. Surav Ganguly marked the occasion with a century. Rahul Dravid fell an agonising five runs short of doing the same.
The fourth member of India’s vaunted middle-order announced himself in the next series we look at, against Australia.
Having been soundly beaten in the first test of the series, India came back the hard way in the second test.
VVS Laxmans 281 not out, with the not inconsiderable assistance of Dravid (180) and Harbhajan (13-196) became only the third team in the history of Test Cricket to win after following on. This against arguably the best team to have ever played the game who had their record winning streak of 16 consecutive tests ended somewhat emphatically.
The 2004/05 series against Bangladesh is included because Tendulkar’s highest test score (248 not out) was made in this series.
The 2009/10 series against South Africa is indicative of the journey that India made during the course of Tendulkar’s career.
At this time they were vying with South Africa for the status of the world’s leading test nation.

Back to the techie stuff. What I’m going to cover is :

  • What happens when you insert a floating point value into an INTEGER column
  • How you can overcome this using SQL*Loader
  • An alternative approach using external tables

Continue reading