Friday, December 30, 2011

katezilla: potty trained!

While our life has been a blur at times, since having children, at other times, it feels like 100 years since Kate was born.

Most of you know it's been a long, difficult ride.

With all the frustration we've felt over the last few years, we finally have something real to point to. She's now potty trained!

Seven years ago we would never have imagined it would take so long (actually, we had more pressing worries then).

In October she started her new school, Sydney's School, Specializing in Autism and Related Disabilities. About a month ago they emailed us and asked if we wanted to do an intense one week potty training over the holidays.

Ummm...yeah?!

On Monday of last week, the first of four ABA therapists showed up at 8 AM. She and Kate sat in a cramped bathroom for three or four hours. Half asleep upstairs, I heard her first successful number one. w00t!

Before I made it downstairs for lunch, she was up to three successful number ones.

Of course her reward was getting to watch Dora the Explorer, who wouldn't go for that?

Two more therapists showed up that day, the last leaving around 8 PM. 12 hours. By then, Kate had moved out of the cramped bathroom, all the way out to the TV room. She was rocking it.

The next day, we were down to about 10 hours of therapist attendance. They were talking like that was all she would need, as she was already wearing shorts (they start her out naked from the waste down...we sent her brother over to his grandparents house). Let's just give it one more day, but we'll start later, 10 AM, and end sooner, 4 PM.

Kate had an accident or two, but overall, perfection!

We're only using diapers for bed time now...a huge step forward. So give it up for Kate the little monster.

Much thanks of course goes to the therapists from Sydney's School:
- Kristin
- Joy
- Jennifer
- Erin
- Katelyn

All of them were absolutely fantastic...now I need to figure out how to buy them all beers.

Thursday, December 15, 2011

Trace Data: Not Just For DBAs

On Wednesday, I attended Cary Millsap's Mastering Oracle Trace Data class here in Tampa.

Why?

Why would I go? I am working with OBIEE which is about 42 layers above the database...who cares about trace data? Well, performance is usually the number 1 item on everyone's list. Page loads to slow. Report takes to long to run. Whether it's trying to tune the application server (WLS) or figure out why Report A takes so long to run, we do a lot of performance analysis. In most cases, it ends up being the SQL that is run. What I mean by the SQL is that it's usually bringing back quite a few records. I've seen people try to pull back millions of records and then pivot all that data putting a nice load on the BI Server and hogging all the resources from everyone else.

On occasion though, there are other things that are going on (with the SQL) that we can't pinpoint.

Recently we had to back out a production implementation because one of the load processes seemed to just hang, threatening to slow down a larger process.

I asked the DBAs why.

Crickets.

Shouldn't that be an answer a DBA provides?

Disk? Network? CPU? Memory? Which one?

Crickets. (I didn't ask those exact questions, I think I said, "Reads? Writes? Network? Load?")

That is just one of the reasons I wanted to attend Mr. Millsap's class. That, and I've heard he's well regarded and does a pretty decent job presenting. OK, I admit it, I just want to show the DBA up. There, said it.

I really shouldn't have to though. It's supposed to be a partnership. They don't know much about OBIEE, so I help them there. I expect help in things like this.

Why? Part II

If you are a developer, understanding trace data will make you better. You'll no longer have to guess, you'll know.

Of course there's what I hinted at above, being able to go to your DBA(s) and prove something. No better feeling in the world.

How?

MR Trace is by far the easiest. It's integrated with SQL Developer. It's a great place to start.

MR Tools - For the more advanced professional. Mostly geared towards the DBA type, but incredibly useful to developers as well. It includes:

- mrskew - your trace file profiler and data miner
- mrls: your trace file lister
- mrcallrm: your trace file correction fluid
- mrtrim: your trace file tim calculator
- mrtrimfix: your trace file time value fixer

Method R Profiler:
The classic tool that started it all, the Method R Profiler is software that makes simple work of knowing exactly why your application consumes the response time it does. With minimal training, a Method R Profiler user can—in just minutes—identify the root cause of an Oracle-based application performance problem, propose sensible solutions to it, and predict the end-user response time impact of each proposed solution.

There are of course other products, check them out here.

Ask Mr. Millsap to come to your town. Try out MR Trace. You won't be sorry you did.

Monday, December 12, 2011

katezilla: 7

Five.

Six.

Another year, which always amazes us.

After suffering from analysis paralysis, we were put in touch with someone who helped get us unstuck. She told us how her school worked and the kind of treatment that Kate should be getting. When we told her Kate was getting an hour a month of speech, in a group, she almost cried. Her students got 25 hours a week, all year around, of ABA therapy. Kate was getting 1 or 2 a month. WTF?

With that, we moved her to a new school in October, Sydney's School, Specializing in Autism and Related Disabilities.

Despite the finances of the place (which so far, haven't been as terrible as I predicted...fingers crossed), we knew it was good for her within a week.

You see, we have stairs. Kate can't do stairs. We've been working with her for years to walk up the stairs. She can crawl up them, no problem, but she can't get down. I did manage to teach her to slide on her butt a bit, but she just wouldn't do it. Then Kelly, her caretaker started to work with her constantly on going up and down the stairs, upright. She still wouldn't do it, unprompted.

So Kris goes to pick up Kate near the end of that first week and asks her teacher how she's handled the stairs. "Fine, no problems."

Kris: "What?"

Teacher: "She goes up and down just fine. She needs a little assistance, but she mostly does it on her own."

Kris (thinking): "That little shit."

The last 2 months at Sydney's School have been amazing. We're finally seeing real progress. Can't wait to see what a year of this kind of therapy will do for her.

That's definitely been the highlight of our year. Now she's on to the 7th year, something we never thought we'd see. Kate's tough as ever, smart as ever and still happy as ever.

Tuesday, October 18, 2011

KScope + DevOps

Last year I had the pleasure of getting the Sunday Symposium together for KScope 11, this year, I have completed my takeover of the Database track by becoming the track lead.

I thought this was the best job ever, then I was attacked Nancy Kerrigan style by my handlers.

All that said, I think I've gathered a pretty good group of people to help review and select the abstracts for next year's conference (San Antonio, TX).

There will be 4 sub-tracks this year:
- Design/Data Modeling
- Maintenance (Performance, Tuning, Upgrades)
- MySQL
- (Dev)Operations

The one I am most excited about is the (Dev)Operations sub-track, aka, DevOps.

What is DevOps?

I'm glad you asked..

"DevOps" is an emerging set of principles, methods and practices for communication, collaboration and integration between software development (application/software engineering) and IT operations (systems administration/infrastructure) professionals.[1] It has developed in response to the emerging understanding of the interdependence and importance of both the development and operations disciplines in meeting an organization's goal of rapidly producing software products and services.

I am not necessarily a fan of the movement, but I am a fan of the principles behind it.

Every developer has a story about working with an evil DBA. LIkewise, every DBA has a story about some application that went to production where they were left completely out of the process.

But it is more than just a simple, "Can't we all just get along?" plea, this is about creating better software and streamlining processes.

My personal experience has been one of woeful cooperation, at any level. Our thought, our hope, is that this well help give other Oracle professionals better ideas on how to start down this road.

If you are interested in this topic, sign up. If you want to present on this (or any other) topic, register here.

Tuesday, October 11, 2011

Good DBA, Bad DBA, Deadlock

By Enrique Aviles

A few days ago a fellow DBA asked me to review an email he received from a developer. In the email, the developer explained his application was affected by database errors and asked us to check the attached file for details. The error was a database deadlock. Attached to the email was the trace file Oracle generates whenever a deadlock occurs in the database. I don’t see deadlocks regularly so I hardly ever need to dissect one of those trace files. The trace file contained the following information:
Deadlock graph:
                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TX-002b0006-00000968        23     223     X             25      35           X
TX-002c0007-00000b13        25      35     X             23     223           X
 
session 223: DID 0001-0017-000163D0     session 35: DID 0001-0019-00002809
session 35: DID 0001-0019-00002809      session 223: DID 0001-0017-000163D0
 
Rows waited on:
  Session 223: obj - rowid = 0001FBA6 - AAAfumAAFAAAWikAAA
  (dictionary objn - 129958, file - 5, block - 92324, slot - 0)
  Session 35: obj - rowid = 0001FBA6 - AAAfumAAFAAAWikAAB
  (dictionary objn - 129958, file - 5, block - 92324, slot - 1)
Session 223 holds an exclusive lock on a row and session 35 holds another exclusive lock on a different row. Session 35 wants to lock session 235 row and vice versa. This clearly shows there is a deadlock. Immediately following this section the SQLs involved in the deadlock are shown in the trace file. I was expecting to see two different queries but the current session and the “other” session executed exactly the same SQL:
UPDATE PERSON_TAB SET PERSON_ID=:1, 
  NAME=:2, FIRST_NAME=:3, 
  MIDDLE_NAME=:4, 
  LAST_NAME=:5, 
  DATE_OF_BIRTH=:6, 
  PHONE_NUMBER=:7, 
  ALT_PHONE_NUMBER=:8, 
  FAX_NUMBER=:9, 
  E_MAIL=:10 
where DATA_SOURCE_ID=:11
The fact that the same UPDATE was executed by both sessions against the same table confused me for a moment. For some reason I wanted to see two different tables but found the same table in both UPDATEs. I started thinking one session updated a row and another session wanted to update the same row. On that scenario the second session would just wait for the first session to either commit or rollback the update. Once that happens the exclusive lock on the row is released and the UPDATE from the second session goes through. How can that cause a deadlock? As you can tell, I didn’t read the trace file close enough. The rowids above are different so both sessions were trying to update different rows. Once again, I rushed to faulty reasoning thinking two sessions updating two different rows should not cause a deadlock. Clearly, Oracle is able to handle two sessions updating two different rows with ease. They are completely independent transactions so there shouldn’t be a deadlock. Remember, I don’t analyze deadlock trace files on a daily basis so that’s my defense for not being able to immediately explain what caused the deadlock. After a few moments trying to imagine what could have caused the deadlock I was able to see the full picture. The first session updates row 1, the second session updates row 2. The first session tries to update row 2 and the second session tries to update row 1. This sequence causes a deadlock. In order to validate my reasoning I opened two SQL*Plus sessions and ran the following:
On session #1:
SQL> CREATE TABLE T (N NUMBER);
SQL> INSERT INTO T VALUES (1);
SQL> INSERT INTO T VALUES (2);
SQL> COMMIT;
SQL> UPDATE T SET N = 10 WHERE N = 1;
On session #2:
SQL> UPDATE T SET N = 20 WHERE N = 2;
On session #1:
SQL> UPDATE T SET N = 20 WHERE N = 2; (this one blocks because it’s locked by session #2)
On session #2
SQL> UPDATE T SET N = 10 WHERE N = 1; (this one causes a deadlock)
After a few seconds the database reported a deadlock on session #1. As a result, the second update on session #1 was lost. After issuing a commit on both sessions I noticed the table didn’t contain two rows with 1 and 2 but 10 and 20. No updates were lost because both sessions tried to update the table with the same values. The same would happen if the UPDATEs on PERSON_TAB contained the same values on all columns. If PHONE_NUMBER was different on both sessions one of them would be lost as a result of the deadlock. With this information on hand my colleague replied the email with a detailed explanation as to what caused the deadlock and provided the small case scenario to help the developer reproduce the issue. We also supplied the SQL showing the table involved in the deadlock.

We acted as good DBAs (we think so) because we took the time to examine the trace file, compose a detailed explanation, and supply steps on how to reproduce the issue.

What would a bad DBA do if faced with the same request? The bad DBA would open the trace file and copy the following section on a reply email:
The following deadlock is not an ORACLE error. It is a
deadlock due to user error in the design of an application
or from issuing incorrect ad-hoc SQL.
The email would close with a simple “fix your code”.

Thursday, September 29, 2011

Great Night of Baseball

If you are a baseball fan, last night was spectacular.

Even more so, if like me, you were fans of either the Tampa Bay Rays, Boston Red Sox, Atlanta Braves or St. Louis Cardinals.

Well, the Braves and Red Sox fan's wouldn't call last night spectacular...spectacularly horrible...maybe.

I decided to take LC and my father to the game last name, the Three Chet's if you will.



David Price was pitching for the Rays and the Yankees were throwing Johnny Bullpen, or the remainder of their 40 man roster, to save their arms for the post-season. The Yankees had already clinched their spot, the Rays were tied with the Red Sox for the Wild Card slot. Boston was playing the Baltimore Orioles at the same time.

On September 3rd, the Red Sox had a 9 game lead over the Rays, a seemingly insurmountable lead. But this is baseball, it's not over until the fat lady sings. The fact that the Rays were now tied with the Red Sox was a testament to the Ray's pitching and the utter collapse of the Boston Red Sox.

It didn't look good for the Rays. In the 6th inning, the Rays were down 7-0. Evan Longoria struck out with men on base to end the inning. He couldn't have looked more dejected...he just flipped his bat at home and starting walking out to 3rd base. That's when we decided to leave.

First, it was a school night. It was after 9 PM and it would take about 45 minutes to drop my dad off and another 15 minutes to get home. Second, it was 7-0 and the Rays appeared to have given up. So off we went.

We listened to the game on the way home, hearing that the Red Sox vs. Orioles game was in rain-delay. Dropping me dad off, we watched a little bit of the top of the 8th inning before heading home.

The Rays scored 1 run, 2 runs, 3 runs and had 2 men on base with Longoria coming to bat. I'm thinking he needs to hit a double...home runs are rally-killers (no one is on base...it just "seems" desolate out in the field). Before we could turn onto the freeway, Longoria hits a 3 run homerun to bring the score to 7-6 in the bottom of the 8th. Wow, just wow.

100 MPH on the Veteran's Expressway to get home...

Sitting in front of the TV...we watch the first 2 hitters in the bottom of the 9th make outs. They pinch-hit Dan Johnson, hitting .108 this season. Johnson was pulled up from the minors just a couple of weeks ago:

HE'S BAAACK: The Rays are bringing their lucky charm to Boston, having called up Dan Johnson, whose list of key hits includes the monumental and momentous pinch-homer off Red Sox closer Jonathan Papelbon on Sept. 9, 2008, with the bat mounted in his house as a memento.

Johnson said he'd welcome the chance for history to repeat itself: "I would love to add a bat to the collection, no doubt."

Johnson, 32, was thrilled just to be back in the majors, having been sent down in late May and hampered much of the year by a wrist injury.

With 2 strikes Johnson wrapped one around the right field foul pole to tie the game. LC and I jumped up, hi-fived, screamed and yelled...wow, just wow.

At 11:17, the 10th inning I believe, I sent LC to bed.

Around midnight, the Orioles/Red Sox game had resumed and it was now the bottom of the 9th, with Papelbon in to pitch. He strikes out the first 2 hitters. With 2 strikes, Chris Davis doubled. Nolan Reimold doubled to switch places with Davis, tie game. Then Robert Andino singled to left scoring the pinch-runner giving the Orioles the win.

As this was announced, Longoria was coming to the plate for the Rays (this is how I remember it anyway)...couple of pitches later, he hits a screamer down the left field line barely clearing the left field wall. Rays win, Rays win!

Tuesday, September 27, 2011

OOW 2011: No Soup For You!

For those that don't understand the reference.

I didn't ask for bread, I didn't break any of the rules...but I will not be attending Oracle OpenWorld this year.

Family matters require that I be home.

I'm sure I've suffered from some level of depression over the years since Kate was born, it hasn't kept me from working (an escape, to be sure), but it has affected me. I don't think I've understood the extent to which it has affected my family, as a whole though.

So I'm taking some time to help where I can.

Of course I'll miss seeing my friends, hanging out with the smart people...in other words, being there.

Family is simply more important.

Wednesday, September 21, 2011

katezilla: 7.62

So today was Kate's evaluation.

Nothing really new to report there. She's...Kate.

We're planning on getting her started in school as soon as possible, which looks like October 3rd. Awesomesauce.

Then we had to talk about money.

Ugh.

School: 15k/year

Not terrible for a private school, a little over 1k a month. Fortunately for us, the McKay Scholarship for Students with Disabilities will most likely cover most of that.

Therapy: 4k...per month

Ouch. They recommended 4.5 hours per day for Kate (we were expecting 5). Let's round up to 5 per day. Multiply that by 5 days, 25 hours per week. Approximately 4 weeks in a month, that's 100 hours per month. (No, I'm not going to use SQL to do the math this time). ABA therapy is approximately $45 per hour. That by the way is way cheaper than what we're paying for an in-home therapist for 6-7 hours per week.

Me: "Doesn't the McKay Scholarship cover some of that?"

School: "No, the McKay Scholarship covers tuition for school, not therapy"

Me: "But..."

School: "I know..."

Fun huh? It covers her school, i.e. getting her ready for the real world...but in order for her to be ready for the real world, she needs to be, I don't know, potty trained?

Insurance

A cursory examination of our policy revealed that Kate's ABA therapy will be covered, somewhat. 80%. That's awesome right?!

Up to $15k per year.

Ugh.

That means that from May through December...it'll be a load of fun.

We'll figure out a way of course...Kris is awesome at bureaucracy...or wading through it.

The hard part, for us anyway, is that so many people think that this is all free. I wish it were.

I tend towards the libertarian side of things, politically speaking, but there has to be help for those that can't help themselves doesn't there? I saw a Dennis Miller comedy show fairly recently and he said something along the lines of "fuck the clueless and help the helpless." I like that. Kate's not helpless of course, she has us (and you) as advocates for her...WTF?!

Monday, September 19, 2011

OOW: Predictions

I haven't seen too many (ok, none) of these this year, but one today hit home:

Predicting OBIEE 11.1.1.6 by Joe Leva.

I've been lucky enough to hang out (err, stalk, as he would say) with Joe in the recent past, he's a smart dude. Here's his prediction in short:

Prior keynotes have brought us Exadata (and Exadata 2) and Exalogic. The Oracle database is clearly a pillar of their business, it was a good first choice for a machine. The middleware stack is another large area of the Oracle product line, hence Exalogic. Wouldn’t it be nice if you could run OBIEE on the Exalogic? What would we call an OBIEE machine? ExaIntelligence? The Oracle BI Machine?

Now, just in case I’m right on this, how do I support this? The packaged software and hardware in the “machines” is a way for Oracle to capture revenue that would otherwise go to implementation partners. The BI machine is a logical inevitable progression, if it doesn’t come this year it will be next year. The economics demand it.

Now wouldn't that be cool, an OBIEE machine a la Exadata or Exalogic? I'll take 1, or 2.

Do you have any predictions for what will be announced this year? FMW will be big I'm sure. There's a big announcement on September 21st (Wednesday), maybe it's the Exadata Mini(-me)?

Let's hear some more fun predictions...

katezilla: 7.6

I have no idea what the 8.3 is, other than it's a guess at how far she is into her 7th year.

Kris and I have suffered a bit of analysis paralysis lately. Fortunately, a friend of mine whose sister works for another Autism school (not in Florida), agreed to talk with me. That helped to shake the cobwebs off and get moving forward again.

After describing Kate's circumstances, she was shocked to hear that she was receiving 1 hour a week of group therapy by her school. Her kids received 25 hours, per week, 12 months a year, of Applied Behavior Analysis (ABA) therapy. As LC would say, "shocked and stunned." The people at school love Kate, we have no doubt about that...but to think that she can thrive on 1 hour per week of group therapy? WTF?

Our friend also did some research and told us we did well in picking Dr. Sutton and that everything she did was spot on. That was great to hear from an objective observer, especially since we both believe we got bamboozled by The Tridas Center early last year.

So we found 2 schools that cater specifically to Kate, one is the Florida Autism Center of Excellence (FACE) and the other is Sydney's School. Last week Kris and I took a tour of Sydney's School and we both liked it. Small, 30 or so kids with onsite ABA therapy. It's not quite 25 hours per week, but we at least have the option to get more once we see how it's going.

That of course brings us to insurance...the school is checking to make sure that our insurance does cover Kate's school/therapy. It's required by law...if you're in a group plan with 50 or more people. Ugh. We're on a private plan. But we're hopeful still. We may also have access to the McKay Scholarships for Students with Disabilities Program. That would be awesome, of course.

As for Kate...we're starting to worry about her future and what that will entail. I believe that we have accepted that, at a minimum, she will be in some sort of group home, or with us. As she gets older, we worry more and more about that. What's cute now...she still looks like a toddler...won't necessarily be cute when she's physically mature. We'll deal with that as it comes though and try to prepare her for as much independence as possible.

She continues to light up the room though (and she knows this...the little shit). I'm sure the cute factor with Kate affects how other people treat her, in that she might not receive the discipline she deserves for some given infraction. Words, talking, is still a ways away. We see glimpses of progress every now and again, but nothing sticks yet. She is able to go up and down the stairs, walking. Just not unaided yet. What more can I say? She's just awesome.

The Exadata Mini - Exclusive Picture!

Early this morning ZDNet's Larry Dignan reported that Oracle would be announcing the "Exadata Mini" edition: Oracle's 'Exadata mini' would aim for midmarket

Well, through tireless research and a lot of hacking, I've found a picture of said machine:



Vern Troyer, the actor who plays "Mini-me" from the Austin Powers movies, stands 32 inches tall, which for the rest of the world, is 81.28 centimeters.

It stands at 20" tall, and as Mr. Dignan reports, this could fit under your desk.

If you're curious to know how Oracle was able to reduce the size...check out this video:

Friday, September 16, 2011

More T-Shirts

Recently I was asked to create some merchandise that fell outside of my norm.

Specifically, I was asked to create a onesie, or piece baby outfit. I tried using my normal method of creating a simple png (pixel) graphic in gimp, however, when I tried to add that to something other than a regular old t-shirt, the application didn't give me the option to do so. Apparently I needed to use vector graphics. I should have known this, since I'm a design genius and all that.

I thought I could continue to use gimp and simply save the file as an encapsulated post script and upload it. Spreadshirt has a semi-automated system that, apparently, attempts to open the file. If it can't, it sends it off for review by their staff. Sometime in the next day or 2, I get an email telling me whether it has passed or not. None of my 3 attempts passed. In my rejection notice, they said I could send them the file directly and ask what's wrong. That's when I got a nice primer on vector vs. pixel graphics. I needed to use a tool like Corel Draw, Illustrator or Inkscape. I chose Inkscape, it was free and runs on Linux. Yay for me. Yay for OSS.

So here are my first 2 attempts at using vector graphics.

First, the custom order:



Next, the LOWER( ORACLENERD ) edition:



There's still time to get one before Oracle OpenWorld, just a little over 2 weeks away.

Thursday, September 15, 2011

Prepping for Oracle OpenWorld 2011

SQL> SELECT TO_DATE( 20111001, 'YYYYMMDD' ) - SYSDATE time_to_oow
  2  FROM dual;

TIME_TO_OOW
-----------
 15.8921065
Wow. Just a little over 2 weeks to go. Time certainly flies.

As I'm wont to do, I've put off just about everything. For the last 2 weeks I've been scrambling to get a room. Two days ago I looked at the prices in downtown San Francisco and I thought I might be living sleeping on someone's floor, or sleeping on the street (don't think I haven't done that). It was even more serious because I had promised a friend of mine that I would cover his accommodations; he had helped me out last year when Kate got sick by buying me a ticket to get home immediately (end of the month, I was out of funds).

Yesterday I finally scored a place through airbnb. Somewhere on Lombard street, Russian Hill? Whatever. It's 1.7 miles to the Moscone Center.



In San Francisco, 1.7 miles is nothing. Far too many great distractions (people watching) for it to feel like a long walk. Bonus points for staying (getting) in shape while there. Bonus points for helping the effects of the beer wear off before sleep. Negative bonus points if I get lost, which I will, especially if I am alone. No sherpa this year unfortunately.

As soon as I booked my room, I booked my flight. They're still cheap too.

I haven't even looked at the sessions yet. Shocking.

Lots of activities planned though:

- Sunday - Oracle ACE dinner thingy.
- Monday - Customer meeting and OTN party.
- Tuesday - Nothing yet.
- Wednesday - Blogger meet-up, Appreciation Event
- Thursday - Nothing
- Friday - OBIEE Meetup thingy with product development.

Somewhere in there I'm supposed to fight with Kellyn Pot'Vin. Additional fun will be a repeat of last year's game, The Piwowar challenge. Personally, I like Pot' Wen(ch), but that might get me punched again.

I've been throwing a little bit too. They have this Home Run Derby...area, where I can go and throw my arm out trying to see how hard I can throw after 10 years. I may be in a sling after the first day.

It's gonna be a hoot. So excited to hang out with a bunch of smart, passionate people and talk shop (or beer). I don't think I've left my house in weeks, I really need to get out.

OOW 2011 Twitter List

For the past couple of years George Woods has been compiling a list of Twitterites who will be attending Oracle OpenWord. 2009 and 2010. I realized this year I hadn't seen it yet, so I emailed him. Unfortunately he will be unable to attend, he's working with that other database right now.

There is no planned event for us yet, but it can't hurt to have if something does come up.

If you plan on attending, please fill out this simple form; twitter handle is the only thing required.



You can find the document here. If I can figure out how to embed the list here, I will do so.

OK, I just stole the iframe method from the above form. It's ugly, but it's better than nothing.



If you know of a better (and easy) way, let me know.

Wednesday, September 14, 2011

OBIA: Installing Informatica 9.0.1

I'm in the process of building out a tip-to-tail dev/test system that includes the components from OBIA.

The components include:
- EBS Vision database
- Informatica PowerCenter 9.0.1
- Data Warehouse Administration Console (DAC)
- OBIEE 11.1.1.5
- OBIA 7.9.6.3

I recently rebuilt my EBS instance. I put my last go at it on a removable disk and seem to have misplaced it.

This will be part of a series of posts describing the entire process. I don't do it often enough and so I have to "remember" what I did, now I'll have my own reference.

Environment

As usual, this is running in a VirtualBox virtual machine.
- Host: Ubuntu 11.04, Natty Narwhal
- VirtualBox: 4.1.2
- Guest: Oracle Enterprise Linux (64 bit)
Linux oracle-web-tier 2.6.32-200.13.1.el5uek #1 SMP
x86_64 x86_64 x86_64 GNU/Linux
- Installed software: 11gR2 Database, OBIEE 11.1.1.5, Oracle Web Tier

I grabbed the download from edelivery, file name is: V26109-01.zip.

Other references:

- OBIA 7.9.6.3 Documentation Library
- OBIA Installation Guide for Informatica PowerCenter Users Release 7.9.6.3: Specifically this section, Installing Informatica PowerCenter Services.

Step 1, create a database account.
CREATE USER infa IDENTIFIED BY testing
  DEFAULT TABLESPACE users;

GRANT DBA TO infa;
**Note I have given DBA privileges, this is not necessary.**

It is simply easier, for now, to do it this way.

Step 2, unzip the files on your system.

It is recommended that you create an OS user specific to this task. I am using my previously existing oracle (dba, oinstall) account

Step 3, run the install.sh file
[oracle@oracle-web-tier infa_zips]$ ./install.sh
OS detected is Linux
unjar task is in progress.............
unjar of ESD completed.....
Do you want to continue installation (y/n) ?
y
Starting installation ...

\***************************************************************************
\* Welcome to the Informatica 9.0.1 HotFix 2 Server Installer.  *
\***************************************************************************


To verify whether a machine meets the system requirements for an Informatica installation, 
run the Pre-Installation System Check Tool (i9Pi) before you start the installation process. 
You can find the i9Pi tool in the following directory: /i9Pi


Before you continue, read the 9.0.1 HotFix 2 Installation Guide and Release Notes.
You can find the 9.0.1 HotFix 2 documentation in the Documentation Center at 
http://my.informatica.com
Configure the LANG and LC_ALL variables to generate appropriate code pages and 
create and connect to repositories and Repository Services.
Do you want to continue? (Y/N)Y
Installer requires operating system Linux version 2.6 and later.
Current operating system Linux version 2.6.
Current operating system meets minimum requirements.

 Select a choice :  
1.   Install Informatica 9.0.1 with Hot Fix 2 or Upgrade from a previous version of Informatica 
to Informatica 9.0.1 with Hot Fix 2 
2.   Apply Informatica 9.0.1 Hot Fix 2 to existing 9.0.1 install.
Enter the choice(1 or 2):1
 
-----------------------------------------------------------
Checking for existing 9.0.1 HotFix 2 product installation.
Select (G)UI mode (needs X Window support) or (C)onsole mode (G/C):G
Launching installer in GUI mode ...
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...

Launching installer...

Preparing SILENT Mode Installation...

===============================================================================
Informatica 9.0.1 Services HotFix2               (created with InstallAnywhere)
-------------------------------------------------------------------------------


System Requirements:



License Key and installation directory:



Confirmation:



Running...



Configuring...



Create a domain and Enable HTTPS. Enable HTTPS is checked by default, I won't be using it.



Configure the database connection and JDBC URL



Testing the connection...



Informatica Domain. I'm going to accept the defaults:



Summary


===============================================================================
Configuring Installation...
---------------------------

 [==================|==================|==================|==================]
 [------------------|------------------|------------------|------------------]

Installation Complete.
To verify your installation, open up http://localhost:6007/administrator/, username is administrator and the password is the one you supplied during installation.



You'll be redirected to this page.



Next steps will be to cover the Information Repository Service and Informatica Integration Service. That of couse, is later.

Tuesday, September 13, 2011

Pythian Acquires "Dude Who Gets Stuff Done"

Pythian, the world's leading remote DBA service company, has announced the (non-hostile) acquisition of John Piwowar.

Wait, Pythian didn't announce it, officially anyway...



Source



Source

Maybe it was John?

...Starting today, I begin the "on-boarding" process at Pythian, as a member of one of their ERP teams.
In a way, it feels as much like starting school as it does a new job. This move represents my biggest career challenge to date, and I
look forward to learning a ton (and contributing a ton) in the company of a lot of smart, talented people. Since I'm going to be packing
my brain full of new things over the next 3 weeks, I expect that the only blog activity here will be from pre-scheduled posts, drafts that
I'd been putting off finishing until recently. Once I'm up to speed on the new system, you'll hopefully be hearing more from me on the
Pythian blog!

I think it's obvious from John's post how excited he is. I am excited for him too. John's an awesome dude, sherpa (for me), protector (of me, from myself), and DBA.

Find John in the following locations:

- Twitter
- Blog
- LinkedIn
- oraclenerd

OK, this didn't turn out as funny as I had intended, whatever.

Great move for both parties. Can't wait to see what John does with the vast resources available to him now.

Saturday, September 10, 2011

OBIEE: Start/Stop Individual Components (Manually)

Previously I wrote about how to start and stop individual components via Enterprise Manager.

This time, I'm going to run through the manual steps to do the same, start and stop individual components using the Oracle Process Manager and Notification Server (OPMN) Tool.

First, navigate to the ORACLE_INSTANCE/bin directory. For me on Linux, that is /obiee/Middleware/instances/instance. List out the directory contents and you should see the opmnctl
[oracle@oracle-web-tier bin]$ ls -lah
total 56K
drwx------  3 oracle dba 4.0K Aug 16 00:53 .
drwx------ 14 oracle dba 4.0K Sep  8 17:09 ..
drwxr-x---  2 oracle dba 4.0K Aug 16 00:53 essbase_ha
-rwx------  1 oracle dba  44K Aug 16 00:53 opmnctl
Let's see what is running:
[oracle@oracle-web-tier bin]$ ./opmnctl status

Processes in Instance: instance1
---------------------------------+--------------------+---------+---------
ias-component                    | process-type       |     pid | status  
---------------------------------+--------------------+---------+---------
coreapplication_obiccs1          | OracleBIClusterCo~ |    1525 | Alive   
coreapplication_obisch1          | OracleBIScheduler~ |    1443 | Alive   
coreapplication_obijh1           | OracleBIJavaHostC~ |    1487 | Alive   
coreapplication_obips1           | OracleBIPresentat~ |    1469 | Alive   
coreapplication_obis1            | OracleBIServerCom~ |   30698 | Alive
All of the components are running. Good. Let's shut down everything.
[oracle@oracle-web-tier bin]$ ./opmnctl shutdown
[oracle@oracle-web-tier bin]$ ./opmnctl status
opmnctl status: opmn is not running.
And bring everything back up.
[oracle@oracle-web-tier bin]$ ./opmnctl startall
opmnctl startall: starting opmn and all managed processes...
[oracle@oracle-web-tier bin]$ ./opmnctl status

Processes in Instance: instance1
---------------------------------+--------------------+---------+---------
ias-component                    | process-type       |     pid | status  
---------------------------------+--------------------+---------+---------
coreapplication_obiccs1          | OracleBIClusterCo~ |    3124 | Alive   
coreapplication_obisch1          | OracleBIScheduler~ |    3123 | Alive   
coreapplication_obijh1           | OracleBIJavaHostC~ |    3121 | Alive   
coreapplication_obips1           | OracleBIPresentat~ |    3120 | Alive   
coreapplication_obis1            | OracleBIServerCom~ |    3122 | Alive
Now, let's stop the BI Server, coreapplication_obis1 or OrcleBIServerCom~. There are 2 ways to bring this down. Well, one command, stopproc, but 2 different ways. Notice the column headers up above, you have ias-component and process-type. Using ias-component:
[oracle@oracle-web-tier bin]$ ./opmnctl stopproc ias-component=coreapplication_obis1
opmnctl stopproc: stopping opmn managed processes...
[oracle@oracle-web-tier bin]$ ./opmnctl status

Processes in Instance: instance1
---------------------------------+--------------------+---------+---------
ias-component                    | process-type       |     pid | status  
---------------------------------+--------------------+---------+---------
coreapplication_obiccs1          | OracleBIClusterCo~ |    3124 | Alive   
coreapplication_obisch1          | OracleBIScheduler~ |    3123 | Alive   
coreapplication_obijh1           | OracleBIJavaHostC~ |    3121 | Alive   
coreapplication_obips1           | OracleBIPresentat~ |    3120 | Alive   
coreapplication_obis1            | OracleBIServerCom~ |     N/A | Down
Start it back up.
[oracle@oracle-web-tier bin]$ ./opmnctl startproc ias-component=coreapplication_obis1
opmnctl startproc: starting opmn managed processes...
[oracle@oracle-web-tier bin]$ ./opmnctl status

Processes in Instance: instance1
---------------------------------+--------------------+---------+---------
ias-component                    | process-type       |     pid | status  
---------------------------------+--------------------+---------+---------
coreapplication_obiccs1          | OracleBIClusterCo~ |    3124 | Alive   
coreapplication_obisch1          | OracleBIScheduler~ |    3123 | Alive   
coreapplication_obijh1           | OracleBIJavaHostC~ |    3121 | Alive   
coreapplication_obips1           | OracleBIPresentat~ |    3120 | Alive   
coreapplication_obis1            | OracleBIServerCom~ |    3525 | Alive 
process-type shutdown:
[oracle@oracle-web-tier bin]$ ./opmnctl stopproc process-type=OracleBIServerComponent
opmnctl stopproc: stopping opmn managed processes...
[oracle@oracle-web-tier bin]$ ./opmnctl status

Processes in Instance: instance1
---------------------------------+--------------------+---------+---------
ias-component                    | process-type       |     pid | status  
---------------------------------+--------------------+---------+---------
coreapplication_obiccs1          | OracleBIClusterCo~ |    3124 | Alive   
coreapplication_obisch1          | OracleBIScheduler~ |    3123 | Alive   
coreapplication_obijh1           | OracleBIJavaHostC~ |    3121 | Alive   
coreapplication_obips1           | OracleBIPresentat~ |    3120 | Alive   
coreapplication_obis1            | OracleBIServerCom~ |     N/A | Down
Note that I didn't use OracleBIServerCom~. It expects the full name of the component, in this case, OracleBIServerComponent. If you use the shortened name, you'll get this:
[oracle@oracle-web-tier bin]$ ./opmnctl stopproc process-type=OracleBIServerCom~
opmnctl stopproc: stopping opmn managed processes...
================================================================================
opmn id=oracle-web-tier:9501
    No processes or applications match the specified configuration.
Finally, bring the BI Server back up.
[oracle@oracle-web-tier bin]$ ./opmnctl startproc process-type=OracleBIServerComponent
opmnctl startproc: starting opmn managed processes...
[oracle@oracle-web-tier bin]$ ./opmnctl status

Processes in Instance: instance1
---------------------------------+--------------------+---------+---------
ias-component                    | process-type       |     pid | status  
---------------------------------+--------------------+---------+---------
coreapplication_obiccs1          | OracleBIClusterCo~ |    3124 | Alive   
coreapplication_obisch1          | OracleBIScheduler~ |    3123 | Alive   
coreapplication_obijh1           | OracleBIJavaHostC~ |    3121 | Alive   
coreapplication_obips1           | OracleBIPresentat~ |    3120 | Alive   
coreapplication_obis1            | OracleBIServerCom~ |    3803 | Alive
Fairly simple.

For a full list of opmnctl commands, simply run ./opmnctl help and you'll get the following output:
[oracle@oracle-web-tier bin]$ ./opmnctl help

usage: opmnctl [verbose] [<scope>] <command> [<options>]

verbose: print detailed execution message if available

Permitted <scope>/<command>/<options> combinations are:

 scope    command     options
-------  ---------   ---------
          start                         - Start opmn
          startall                      - Start opmn & all managed processes
          stopall                       - Stop opmn & all managed processes
          shutdown                      - Shutdown opmn & all managed processes
[<scope>] startproc   [<attr>=<val> ..] - Start opmn managed processes
[<scope>] restartproc [<attr>=<val> ..] - Restart opmn managed processes
[<scope>] stopproc    [<attr>=<val> ..] - Stop opmn managed processes
[<scope>] reload                        - Trigger opmn to reread opmn.xml
[<scope>] status      [<options>]       - Get managed process status
[<scope>] metric      [<attr>=<val> ..] - Get DMS metrics for managed processes
[<scope>] dmsdump     [<dmsargs>]       - Get DMS metrics for opmn
[<scope>] debug       [<attr>=<val> ..] - Display opmn server debug information
[<scope>] set         [<attr>=<val> ..] - Set opmn log parameters
[<scope>] query       [<attr>=<val>]    - Query opmn log parameters
          launch      [<attr>=<val> ..] - Launch a configured target process
          phantom     [<attr>=<val> ..] - Register phantom processes
          ping        [<max-retry>]     - Ping local opmn
          validate    [<filename>]      - Validate the given opmn xml file
          help                          - Print brief usage description
          usage       [<command>]       - Print detailed usage description
          createinstance                - Create an Oracle Instance
          createcomponent               - Create a specified component
          deleteinstance                - Delete an instance and components
          deletecomponent               - Delete a specified component
          registerinstance              - Register with admin server
          redeploy                      - Redeploy the admin server application
          unregisterinstance            - Unregister with admin server
          updateinstanceregistration    - Update instance registration
          updatecomponentregistration   - Update component registration

Friday, September 9, 2011

OBIEE: Start/Stop Individual Components (Enterprise Manager)

The very first thing I thought, after firing up my first OBIEE 11g instance, was how freaking intimidating it was.

You have Enterprise Manager, the WLS Console and regular old /analytics. Nah...not too much.

Whatever.

Of course I'm still learning it daily, but most of the basics I have down now.

A basic concept which was super-easy in 10g, like stopping and starting individual services like the BI Server and Presentation Server, didn't seem so easy any more.

Now this isn't rocket science, but I'm sure it will help someone new (and intimidated!) by OBIEE 11g.

First, using Enterprise Manager.

After logging in, you'll see the Farm_bifoundation_domain (essentially your home) page:



From there, navigate to the Business Intelligence folder and click on coreapplication:



This will take you to your coreapplication (BI) page:



From there, you can stop all components of the BI Server; BI Server, Presentation, Java Host, etc.



Easy.

Sometimes though, you just need to restart one of the services, usually the BI Server or the Presentation Server.

Easy enough, see that tab Capacity Management, click on it:



That'll take you here, where you can start, stop and restart individual services:



Simply select the service you want to stop, start or restart like so:



Then select Stop Selected and you'll be prompted to confirm your selection:



Now you've stopped the BI Server service.



You can confirm this by looking at the Overview page as well:



There is also a manual way of doing this. Since it's Friday evening, I will wait until later to write that one up. Must go watch Megamind or some other fun kids movie with one of the monsters.

OBIEE 11g: Unresolved table: "**NONE**". (HY000)

Yesterday I was having problems simply converting the Usage Tracking catalog. It may or may not be related to having Web Tier (or any other non-OBIEE component) installed, I can't say with certainty though.

The reason that you have to convert/upgrade the Usage Tracking RPD/Web Catalog is because a pre 11g version was inadvertently shipped. Good news though, if you have upgrade issues like I've had, you can get an 11g copy of the RPD (both 11.1.1.3 and 11.1.1.5) on MOS. No upgraded web catalog though.

I managed to merge the Usage Tracking metadata into my RPD, then I was off to make the web catalog work. I copied the Usage Tracking web catalog over to the SampleAppLIte web catalog and tried to run it.



If you can't read that, it says:
[nQSError: 27004] Unresolved table: "**NONE**". (HY000)
I went in and played with the permissions, restarted the server, nothing worked. I kept getting the same message.

Twitter machine to the rescue.



I started to go through the criteria for one specific report.

The only thing that jumped out at me was that none of the folder qualifiers had quotes around them, like Measures."Some Measure". That's OK, because there is no space.

I replaced each and every criteria in the report, ran it, same error.

Wait, there's a filter.

Remove it.

The report runs.

w00t.

So I went into Catalog Manager > Properties > Edit XML and sure enough:



I replaced **NONE** with Usage Tracking, reloaded the metadata (and bounced the server for good measure), and voila!

Thursday, September 8, 2011

OBIEE 11g: UPGCMP-02712

Amusingly, the Usage Tracking components (RPD, Web Catalog) must be upgraded from 10g to 11g (11.1.1.5 for me). Not sure how this was missed, but it was.

I've run through the Upgrade Assistant multiple times, each one failing.



Here's the log:
[2011-09-08T03:07:12.156-04:00] [Framework] [NOTIFICATION] [] [upgrade.Framework] [tid: 13] 
[ecid: 0000J97r9aPFw000jzwkno1EQ6_m000004,0] Start 11g Components: false
[2011-09-08T03:07:12.185-04:00] [Framework] [NOTIFICATION] [] [upgrade.Framework] [tid: 13] 
[ecid: 0000J97r9aPFw000jzwkno1EQ6_m000004,0] Starting to upgrade BIEE.
[2011-09-08T03:07:12.239-04:00] [Framework] [ERROR] 
[UPGAST-00138] [upgrade.Framework] [tid: 13] [ecid: 0000J97r9aPFw000jzwkno1EQ6_m000004,0] 
upgrade exception occurred
[2011-09-08T03:07:12.239-04:00] [Framework] [ERROR] [] [upgrade.Framework] [tid: 13] 
[ecid: 0000J97r9aPFw000jzwkno1EQ6_m000004,0] 
Cause: An unexpected upgrade exception has occurred. Action: See the secondary error message 
for additional details.
[2011-09-08T03:07:12.239-04:00] [Framework] [ERROR] [] [upgrade.Framework] [tid: 13] 
[ecid: 0000J97r9aPFw000jzwkno1EQ6_m000004,0] 
UPGCMP-02712: Expected oracle.biee.admin:oracleInstance=*,type=BIDomain.OracleInstance,
group=Service Oracle instance, found 2
[2011-09-08T03:07:12.240-04:00] [Framework] [ERROR] [] [upgrade.Framework] [tid: 13] 
[ecid: 0000J97r9aPFw000jzwkno1EQ6_m000004,0] 
UPGCMP-02712: Expected oracle.biee.admin:oracleInstance=*,type=BIDomain.OracleInstance,
group=Service Oracle instance, found 2
[2011-09-08T03:07:12.240-04:00] [Framework] [NOTIFICATION] [] [upgrade.Framework] [tid: 13] 
[ecid: 0000J97r9aPFw000jzwkno1EQ6_m000004,0] 
Finished upgrading BIEE with status: Failure.
[2011-09-08T03:07:12.241-04:00] [Framework] [NOTIFICATION] [] [upgrade.Framework] [tid: 13] 
[ecid: 0000J97r9aPFw000jzwkno1EQ6_m000004,0] 
Finished upgrading components.
[2011-09-08T03:07:12.241-04:00] [Framework] [NOTIFICATION] [] [upgrade.Framework] [tid: 13] 
[ecid: 0000J97r9aPFw000jzwkno1EQ6_m000004,0]   
0 components upgraded with success.
[2011-09-08T03:07:12.241-04:00] [Framework] [NOTIFICATION] [] [upgrade.Framework] [tid: 13] 
[ecid: 0000J97r9aPFw000jzwkno1EQ6_m000004,0]   
1 components upgraded with failure.
My Oracle Support (MOS) didn't turn up any hits on that error number. The Google Machine did though. This OTN Forum post has the same exact problem. It appears that Merlin128 is talking to him or herself. I'm ok with that.

yes it was the web-tier.. or actually any component that creates a second instance...the upgrade utility only works with 1 instance installed.. to temporarily have only one instance.. I was able to change this file. run the upgrade. then change it back...middleware\user_projects\domains\bifoundation_domain\opmn\topology.xml

I tried that, commented out the second ias-instance section and restarted all the services (Linux 64).

Run the Upgrade Assistant, no joy.

With a little more research on MOS, I found note ID 1336567.1 which provides an 11.1.1.3 and 11.1.1.5 RPD. Yay.

To my above comment about how a pre-11g component got in there, the MOS note says:

The UsageTracking.rpd shipped is actually a pre 11.1.1.3 version and cannot be opened in the current versions of OBIEE 11g Administrator. It was shipped inadvertently.

All was not lost, I did find the master note for Usage Tracking Issues, ID 1293415.1.

So, I can't open the Usage Tracking web catalog in Catalog Manager (runcat.sh). I tried to deploy just the Usage Tracking catalog...and the BI Presentation server wouldn't come back up. Upgrade Assistant still doesn't work.

Help?

Update 09/08/2011 13:33 EST

So I thought I could use the Oracle created SampleApp (v105, not v107) and received a similar failure:
[2011-09-08T10:29:57.471-07:00] [Framework] [ERROR] [UPGAST-00138] 
[upgrade.Framework] upgrade exception occurred
[2011-09-08T10:29:57.471-07:00] [Framework] [ERROR] 
[upgrade.Framework] 
Cause: An unexpected upgrade exception has occurred. 
Action: See the secondary error message for additional details.
[2011-09-08T10:29:57.471-07:00] [Framework] [ERROR] [upgrade.Framework] 
UPGCMP-02712: Expected oracle.biee.local:* Oracle instance, found 0
[2011-09-08T10:29:57.471-07:00] [Framework] [ERROR] [upgrade.Framework] 
UPGCMP-02712: Expected oracle.biee.local:* Oracle instance, found 0
That VM has Essbase, amongst other components. I speculate there is some sort of (yet unknown) weirdness going on when you don't have a straight (just OBIEE) install.

Wednesday, September 7, 2011

DROP DATABASE;

I decided to blow away one of my newly created databases. Instead of using the DBCA, I decided to try it manually.
DROP DATABASE;

DROP DATABASE
*
ERROR at line 1:
ORA-01586: database must be mounted EXCLUSIVE and not open for this operation
Not it.
SQL> SHUTDOWN;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP MOUNT EXCLUSIVE;
ORACLE instance started.

Total System Global Area 1048059904 bytes
Fixed Size                  2219992 bytes
Variable Size             608174120 bytes
Database Buffers          432013312 bytes
Redo Buffers                5652480 bytes
Database mounted.
SQL> DROP DATABASE;
DROP DATABASE
*
ERROR at line 1:
ORA-12719: operation requires database is in RESTRICTED mode
Ugh.
SQL> STARTUP NOMOUNT;
ORACLE instance started.

Total System Global Area 1048059904 bytes
Fixed Size                  2219992 bytes
Variable Size             608174120 bytes
Database Buffers          432013312 bytes
Redo Buffers                5652480 bytes
SQL> DROP DATABASE;
DROP DATABASE
*
ERROR at line 1:
ORA-01507: database not mounted


SQL> ALTER DATABASE MOUNT;

Database altered.

SQL> DROP DATABASE;
DROP DATABASE
*
ERROR at line 1:
ORA-12719: operation requires database is in RESTRICTED mode
Not it. Here's the SQL Reference. Maybe that RESTRICTED reference means something...
SQL> STARTUP MOUNT RESTRICTED;
ORACLE instance started.

Total System Global Area 1048059904 bytes
Fixed Size                  2219992 bytes
Variable Size             608174120 bytes
Database Buffers          432013312 bytes
Redo Buffers                5652480 bytes
ORA-01504: database name 'RESTRICTED' does not match parameter db_name
'TESTING'
Barnacles. Perhaps the Administrator's Guide has something.
SQL> STARTUP MOUNT TESTING;
ORACLE instance started.

Total System Global Area 1048059904 bytes
Fixed Size                  2219992 bytes
Variable Size             608174120 bytes
Database Buffers          432013312 bytes
Redo Buffers                5652480 bytes
Database mounted.
SQL> DROP DATABASE;
DROP DATABASE
*
ERROR at line 1:
ORA-12719: operation requires database is in RESTRICTED mode


SQL> ALTER DATABASE RESTRICTED;
ALTER DATABASE RESTRICTED
                        *
ERROR at line 1:
ORA-02231: missing or invalid option to ALTER DATABASE


SQL> ALTER DATABASE READ ONLY;
ALTER DATABASE READ ONLY
                    *
ERROR at line 1:
ORA-02231: missing or invalid option to ALTER DATABASE
Last try
SQL> STARTUP NOMOUNT RESTRICT;
ORACLE instance started.

Total System Global Area 1048059904 bytes
Fixed Size                  2219992 bytes
Variable Size             608174120 bytes
Database Buffers          432013312 bytes
Redo Buffers                5652480 bytes
SQL> DROP DATABASE;
DROP DATABASE
*
ERROR at line 1:
ORA-01507: database not mounted


SQL> ALTER DATABASE MOUNT;

Database altered.

SQL> DROP DATABASE;

Database dropped.

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Voila!

OEL: Add More Disk(s)

Many of you know I'm still relatively new to non-Windows platforms. I've been running Ubuntu (from 9.04 > 11.04) at home for a few years now though, in an effort to better understand what I am doing when I don't have to just point-and-click. Fortunately for me, Ubuntu has a pretty slick UI so it's not all done at the command line.

During that same time, I've taken to using Oracle Enterprise Linux for all my software installs, from the database (11gR1 > 11gR2), OBIEE (10.1.3.4 > 11.1.1.5), Informatica components, so on and so forth. I can say with all honesty now, that I would prefer a nix install over a Windows 2008 Server install (security being the biggest issue I have, not that it's bad, I have no idea...let's just say I find it annoying that if I can install the software, I should have access to the directories...which apparently I don't).

All of my testing is done with VirtualBox. For my XP virtual machines, I've gotten to the point where I simply clone an existing "base" VDI and use that (for clients mostly, and some OBIEE software).

Often times I'll allocate n GBs of space. Occasionally, like with my first few attempts with OBIEE, I don't allocate enough space. For me, that means recreating the entire VM with n + x number of GBs. Silly, I know.

I don't have to do that any longer, I finally learned how to add space without starting from scratch. Yay for me.

First up, I go into the settings of the VM (while stopped, of course) and add a new SATA controller. I select Create new disk.



Please ignore the "10" GBs part, I had taken those screenshots last week. I'm actually adding 100 GBs for the remainder of this exercise. I choose a location, name it and give it a size in GBs.



Now you can see (forget the 10, it's 100) it listed in the Storage section of the VM Settings



So now I fire up my VM (OEL 5.7), go to System > Administration > Logical Volume Managment. You'll be prompted for the root password.



Under the Uninitialized Entities, you should see the disk you just added. Select Initialize Entry.

3

Blah blah blah. Yes.



Blah blah blah. Yes.



Now it's migraterd up to your Unallocated Volumes section. Add to existing Volume Group.



You should be prompted with your currently existing Volume Group, in my case, VolGroup00. Select it and then click Add.



Here's a picture of what I have allocated so far, 4.8 GiB (the rest is swap space)



Now, under VolGroup00 (Logical View), select Edit Properties



You'll be prompted with the Edit Logical Volume dialog. On the slider, you can see that it goes up to 104.97 and just below that a, "Use remaining space for this volume: 99.97 Gigabytes"



You can choose either one.



Now you can usee that VolGroup00 has 2 physical volumes which comprise it, sda2 and sdb1, sdb1 is the one I've just added. To the right, you can see the Volume Group Size is now 109.84.



And finally, System Monitor shows that I now have a total of 101.7 GiBs associated with VolGroup00-LogVol00



It's as simple as that.

Someday I'll figure out how to add different disks (well, technically they are different disks, just logically only 1) so that I can layout my tablespaces a bit better. For now though, no more recreating virtual machines just because I didn't plan well enough.