Girlgeek's Oracle Blog
A few basic notes on Oracle Database Administration.
Monday, October 12, 2009
It's wonderful, but will I survive?
It is all Wonderful. Just one little question. How am I going to survive 3 more days? I'm going to bed!
Wednesday, September 23, 2009
A trivial index demo
"It is an Ancient DBA and he stoppeth one of three."
I demonstrated the matter a bit to him.
Logged on as scott, I create a play table:
SQL> create table tmp(f1 number(4), f2 number(4), f3 number(4));
Table created.
SQL> insert into tmp values (1, 2, 3);
1 row created.
SQL> create index tmp_f2 on tmp(f2);
Index created.
SQL> drop index tmp_f2;
Index dropped.
All straight forward. The index was created 'explicitly' and there is no constraint that it affects if it is dropped, so I can drop it without problem.
Now to add a constraint, and an 'implicit' index.
SQL> alter table tmp modify f2 unique;
Table altered.
SQL> SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'TMP';
CONSTRAINT_NAME
------------------------------
SYS_C0011482
SQL> select index_name from user_indexes where table_name = 'TMP';
INDEX_NAME
------------------------------
SYS_C0011482
The constraint has been created as has an index
SQL> drop index SYS_C0011482;
drop index SYS_C0011482
*
ERROR at line 1:
ORA-02429: cannot drop index used for enforcement of unique/primary key
and as expected, the index cannot be dropped since it is used by the constraint.
It is all very trivial.
What did get a little interesting was that I was able to enter multiple rows of nulls in a field with a 'unique' constraint. I need to review the properties of null.
And the real question that was never answered
"Now wherefore stopp'st thou me?"
Saturday, August 22, 2009
OOW any free Discover tickets around?
I see that Oracle Open World Discover ticket costs $50. I remember that it cost something in prior years, but that there was some way to get it for free if you signed up by the early bird date. Is there such a thing again this year?
I have seen the 'chance for a full registration', and have entered, but I haven't seen the free 'discover' pass. Is it around?
TYIA
Tuesday, May 19, 2009
Making problems for myself
Playing around with my toy database I asked myself, "What happens if DUAL has more than 1 row?" I found out.
SQL> insert into dual values ('Y');
1 row created.
SQL> select * from dual;
D
-
X
SQL> select count(*) from dual;
COUNT(*) ---------- 1
I tried it again. Same result. "Oh, I guess I can't insert into DUAL", says I, and I went about my business.
Later I logged on as SCOTT and tried to drop a table. Playing I have more EMP tables than employees.
SQL> DROP TABLE EMP4;
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-01422: exact fetch returns more than requested number of rows
WHAT??!!?
Yes it is there and there is only 1 table called EMP4.
SELECT OWNER, OBJECT_NAME FROM ALL_OBJECTS WHERE OBJECT_NAME = 'EMP4'
OWNER OBJECT_NAME
------------------------------ ------------------------------
SCOTT EMP4
I looked the matter up at orafaq. and followed the instructions.
SQL> select * from dual;
D
-
X
SQL> create table temp_dual as select * from dual;
Table created.
SQL> select * from temp_dual;
D
-
X
Y
Y
Yes, I plead guilty. I DID succeed in inserting those rows into DUAL.
SQL> delete from dual where dummy = 'Y';
1 row deleted.
Strange. It deleted 1 row even though I had put 2 in.
SQL> drop table temp_dual;
drop table temp_dual
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-01422: exact fetch returns more than requested number of rows
I deleted the second excess row:
SQL> delete from dual where dummy = 'Y';
1 row deleted.
and I had a functioning database back.
SQL> DROP TABLE TMP_DUAL;
Table dropped.
and then as SCOTT
SQL> DROP TABLE EMP4;
Table dropped.
OK, I get it, Oracle consults DUAL in the drop process. And don't go messing up a database of any importance. But it is odd how the fact that I was succeeding to mess things up was hidden from me. Yes it told me that I had inserted the row, but then it didn't display it with a select. It was an interesting bit of play.
Saturday, October 18, 2008
Lazy Log Writer - Vindication & thank you Fitaloon
I crawled out of bed, bleary eyed, signed in, and tried to start it. I got:
ALTER DATABASE MOUNT
Sat Oct 11 00:35:05 2008
ORA-00202: control file: '/u01/control02.ctl'
ORA-27037: unable to obtain file status
That woke me up. OK, Who/what messed with the control file?
I tried to look at the file and got a message that told me that not only was the control file inaccessable, the entire drive /u01 was inaccessable.
I called across the great divide to the company who controls the hardware and eventually got, "The backup battery for the write cache needs replacing in the SAN".
Monday morning I resent my email to management from a week and a half before. I highlighted my paraphrasing of Fitaloon's comment to my first posting on this subject, "Could our problem be caused by the write cache on the disk having some sort of problem? For example, could it be something as simple as failed backup batteries for the write cache?" Thank you, Fitaloon. You hit the nail on the head.
Since the replacement of the battery, our log writer has been zipping right along, good performance, at last!
Sunday, September 28, 2008
Delete vs. Truncate - graphically

I had not been expecting such a graphical re-enforcement of the rule. I had found the full table delete in some executing code and was curious how much redo it was generating. I ran René Nyffenegger's script 'how_much_redo' .
Assuming that it is giving accurate results, here is what I got for the 3 operations.
SQL> INSERT INTO T1_DEL (SELECT * FROM T1);
1161874 rows created.
SQL> exec how_much_redo;
New Redo Bytes Written: 408985600 (390 MB of redo TO INSERT)
SQL> delete from T1_DEL;
1161874 rows deleted.
Elapsed: 00:06:30.90 (6 MINUTES TO DELETE)
New Redo Bytes Written: 661496320 (630 MB of redo TO DELETE)
SQL> truncate table T1;
Table truncated.
Elapsed: 00:00:06.80 (6 SECONDS TO TRUNCATE)
New Redo Bytes Written: 815616 (less than 1Mb of redo to TRUNCATE)
Saturday, September 27, 2008
Lazy Log Writer - The non Resolution
1. Management asked that the entire database be moved to the NAS disks because they initially seemed faster. I had to let them know, that, no, the writes there are not faster.
2. The efforts to cross the great divide and get the storage manager in the other company to actually look at his configuration resulted in, "Since the writes are slow on two different pieces of our machinery, it can't be our fault - it must be oracle. I'm debugging nothing."
3. The other company informed us, "By the way, we will be installing new hardware in a couple of weeks at the same time that you are making a major application upgrade." How does that sound for a prospect of a smooth transition? This was followed by an email, "Claudia, are you working with the other company on this?" Not only am I not working with them, I never heard of it!
4. Management informed me, "Since there will be a hardware change soon, don't bother to follow up on this problem."
So they will install the hardware, we will deploy the new application version, and there will be storm and drama about the excessive waits for redo log writes. I think that I should change my name to Cassandra.
A little bit about me.
- Claudia Zeiler
- Oracle DBA, OCP 10g, 9i, 8i Board Member of NoCOUG - (Northern California Oracle Users Group)