Skip to Main Content

Breadcrumb

Question and Answer

Tom Kyte

Thanks for the question, Prasanna.

Asked: July 15, 2001 - 10:05 pm UTC

Last updated: December 07, 2005 - 7:19 am UTC

Version: 8i

Viewed 1000+ times

You Asked

Hi Tom,
My application currently runs on 8i and we are planning to upgrade it to ORACLE 9i.
I would like to know few things before we go ahead,

1) What are the steps to be considered before migration from 8i to 9i. Most documentations talks about Oracle 7 To 8i Migration in detail, but not about the 8i to 9i migration.


2) What enhancements are there in PL/SQL in 9i over 8i.
i.e any features not available / available but not allowed in PL/SQL in 8i and allowed in 9i. Can you please provide me with the list of those features.

this can help me to decide whether we genuinely require 9i.

Regards
YERRA

and Tom said...

1) for a migration -- it is purely evolutionary, no big changes like from 7 to 8 for an existing app (there was that whole rowid thing, absolute to relative file numbering and so on).

An 8i app should (barring bugs or changes in the the expected behavior) run "as is". You can then go back and add 9i features to it as you see fit.


2) see
</code> http://otn.oracle.com/docs/products/oracle9i/doc_library/901_doc/appdev.901/a89856/whatsnew.htm#967650 <code>

for "whats new in ps/sql"

perhaps the biggest "whats new" (i haven't played with it but have high hopes) is Native compilation of PLSQL:

Improve performance by compiling Oracle-supplied and user-written stored
procedures into native executables, using typical C development tools. This
setting is saved so that the procedure is compiled the same way if it is later
invalidated.





Rating

  (30 ratings)

Is this answer out of date? If it is, please let us know via a Comment

Comments

A reader, July 15, 2001 - 10:41 pm UTC


Migration from 8i to 9i

Munz, June 06, 2002 - 9:23 pm UTC

Tom:

We have a html web application running as stored procedures in 8.1.7 database.

THe DBA wants to upgrade from 8.1.7 to 9.0.2 on IBM/AIX server.

Is there anything that we need to do or be aware of for the web applications. Do you have to test the application again using the 9i database?

Thank you,

Tom Kyte
June 06, 2002 - 9:37 pm UTC

Well, anytime you change ANYTHING -- you need to test. Period.

I would say an upgrade from 817 to 902 would deserve a "test" -- definitely, 100%, yes, certainly.

Upgrade

A reader, June 06, 2002 - 11:14 pm UTC

And even an upgrade to 9.2.0 as I don't believe there is such a beast as 9.0.2 :)

Tom Kyte
June 07, 2002 - 7:10 am UTC

sure there is. There was a 9.0.2 patchset.

Do you have to test the application again using the 9i database?

Mark A. Williams, June 06, 2002 - 11:34 pm UTC

Munz:

"Do you have to test the application again using the 9i database?"

What else would you do? Go with "Well, gee, it compiled under 9i, so it *must* be ok... no reason to do a proper job here"?

This isn't meant as a "slam", but of the many questions you've posed here, surely you've learned enough to be able to answer that question after a little thought...

- Mark

9.0.2 Patchset

Mark A. Williams, June 07, 2002 - 10:45 am UTC

Tom:

Which platform for the 9.0.2 patchset? I'm looking in MetaLink and only see:

9.2.0.1
9.0.1.3
9.0.1.2
9.0.1.1
9.0.1.0

Thanks!

Mark

Tom Kyte
June 07, 2002 - 11:47 am UTC

Contact support -- there is a 9.0.2 out there (ias and others are built on that set of RSF's)

it's the stuff that comes with the current ias release. There may not have been a 9.0.2 standalone db release now that I peek around.

What's new in 9i R2 ?

Andre, June 07, 2002 - 2:54 pm UTC

What can you say are the most important new features in 9i R2 compared to R1 ? Right now, I'm studying R1, but the OU books often say something like "... in a later release of 9i ..."

Tom Kyte
June 07, 2002 - 9:31 pm UTC

So far -- personal favorites are

o logical standby, as opposed to physical standby. the logical standby has all of the features of the current (9i and before) physical standby but it can also:

- be on a different OS/platform (hetergenous)
- be open for reading and even writing whilst being recovered to
- supports the addition of additional structures against the data being "guarded"
-- such as additional indexes and materialized views (making it excellent for
offloading dss type work)

to name a few

o rename a column (yeah)

o DBA can grant on another schema's objects (yeah)



No more GATHER STALE needed ?

Andre, June 10, 2002 - 4:30 pm UTC

Is it true 9i R2 has a new feature with which I don't have to "download" statistics generated by MONITORING using GATHER STALE any more ?

Tom Kyte
June 11, 2002 - 10:26 am UTC

Sort of -- but not quite. You still need to analyze...

see
</code> http://docs.oracle.com/docs/cd/B10501_01/server.920/a96533/sql_1016.htm#26070 <code>

Continued

Andre, June 11, 2002 - 10:47 am UTC

Well, it seems to me DYNAMIC SAMPLING is still just a worthy turnaround in some cases. But I imagine you still recommend using DBMS_STATS or ANALYZE with jobs or crontab. Right ?

Tom Kyte
June 11, 2002 - 2:23 pm UTC

Yes, where dynamic sampling might come in handy is....

o tables that frequently and continous change in size
o maybe useful with global temporary tables, but I haven't really played with that as yet.

New features

Andre, June 12, 2002 - 9:06 am UTC

Short answers would be fine...

1 - Is Data Guard sold separately from Oracle9i ?
2 - Can you give me or direct me to an overview of: EXPROC, create library, and their use with create procedure/function ? What are "agents" in this context ? (I know what a .so lib in UNIX is)
3 - I understand how an HS agent works internally. It seems to be used for connecting the Oracle server to other systems. Can you give me an example of such systems?


Tom Kyte
June 12, 2002 - 9:10 am UTC

1) it is part of 9i EE (enterprise)

2) my book -- i spend 70 pages on extprocs in C.... Agents are new with 9i, they let you run an extproc process for each library if you want. this is so that

a) code you write can run as "user1", code we write can run as "user2" (different
OS users with different OS privs
b) if your code crashes, it won't crash our extproc (and vice versa ;)

3) sqlserver, db2, any odbc compliant data source using the odbc gateway, etc etc
etc.



Oracle 9i new features details

N, July 08, 2002 - 12:21 am UTC

Hi tom.
Please point where to find O9i 9.0.1.1.1 features and its details
Thanks


Tom Kyte
July 08, 2002 - 7:33 am UTC

General question to all you out there --

is the documentation really that hard to discover???
is otn.oracle.com an "unknown" resource???

(this is not a slam to "N" here, I just really am wondering if something is totally broken).

goto </code> http://otn.oracle.com/ <code>

click on documentation. Then, since you are interested in the database, pick the release you want (901). Then, to get an inclusive list of books click on "list of books". Then click on New


Can you explain "native" execution?

Doug, July 17, 2002 - 4:45 pm UTC

Tom - you said way up at the top that your favorite feature was native PL/SQL execution. I looked a the doc. I'm confused. What's so un-native about PL/SQL in the first place? (I've always been confused by that term).

Tom Kyte
July 18, 2002 - 8:15 am UTC

Native COMPILATION -- not execution.

Native compilation (ncomp for short) is the ability to have plsql compiled into object (binary) code on the target operating system INSTEAD of it being turned into OS independent pcode (psuedo code) that is intepreted at runtime.

It makes it run faster.

A reader, July 18, 2002 - 9:06 am UTC


What is common SQL parser? Is this new in 9i? Thanks.

David, February 24, 2004 - 8:20 pm UTC


Tom Kyte
February 25, 2004 - 8:11 am UTC

in 8i and before plsql had its parser, the database had its parser and so on.  What this lead to was this behaviour at times:

ops$tkyte@ORA817DEV> select count(*) over () from dual;
 
COUNT(*)OVER()
--------------
             1
 
ops$tkyte@ORA817DEV>
ops$tkyte@ORA817DEV> begin
  2      for x in ( select count(*) over () from dual )
  3      loop
  4          null;
  5      end loop;
  6  end;
  7  /
    for x in ( select count(*) over () from dual )
                                    *
ERROR at line 2:
ORA-06550: line 2, column 37:
PLS-00103: Encountered the symbol "(" when expecting one of the following:
, from
 
<b>we know that sql is valid but the plsql parser hadn't yet caught up to this new feature, the workaround was:</b>
 
ops$tkyte@ORA817DEV>
ops$tkyte@ORA817DEV> declare
  2          type rc is ref cursor;
  3          C rc;
  4          l_cnt number;
  5  begin
  6          open c for 'select count(*) over () from dual';
  7          loop
  8                  fetch c into l_cnt;
  9                  exit when c%notfound;
 10          end loop;
 11          close c;
 12  end;
 13  /
 
PL/SQL procedure successfully completed.


<b>to use dynamic sql to hide the construct from plsql and let the rdbms parse the query itself.  In 9i, with the common parser (eg: sharing code), this is corrected for once and for all</b>

 

Thanks.

David, February 25, 2004 - 12:33 pm UTC


logical standby

Venkat, March 04, 2004 - 6:01 am UTC

Tom,

In logical db, redo from primary is converted into SQL and it is applied in the standby database. Will it take more time when compared to redo apply in physical?

Thanks,
Venkat

Tom Kyte
March 04, 2004 - 12:33 pm UTC

sure - but -- the db is open for read write access which is something that is just "not possible" with a physical standby

9.2.0.4

David, April 22, 2004 - 7:07 pm UTC

Oracle uses the second digit to indicate the maintenance release number. What is the significance of third digit that always is 0. Someone was telling me that third digit is used to specify application server release number. Is it true? If so, does it mean that application server release number is still 0? Thanks.

Tom Kyte
April 23, 2004 - 10:13 am UTC

8.1.7.4
9.0.1.0

always zero?



Common parser not quite there yet ?

A reader, September 17, 2004 - 10:11 am UTC

Tom,

Quote from one of your followups above
"
to use dynamic sql to hide the construct from plsql and let the rdbms parse 
the query itself.  In 9i, with the common parser (eg: sharing code), this is 
corrected for once and for all
"

Have you encountered the following ?

SQL> select *
  2  from v$version;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production
PL/SQL Release 9.2.0.5.0 - Production
CORE    9.2.0.6.0       Production
TNS for Linux: Version 9.2.0.5.0 - Production
NLSRTL Version 9.2.0.5.0 - Production

SQL>
SQL> select nvl2('yes','ja','nein')
  2  from dual;

NV
--
ja

SQL>
SQL> declare
  2     x varchar2(100);
  3  begin
  4     x := nvl2('yes','ja','nein');
  5  end;
  6  /
   x := nvl2('yes','ja','nein');
        *
ERROR at line 4:
ORA-06550: line 4, column 9:
PLS-00201: identifier 'NVL2' must be declared
ORA-06550: line 4, column 4:
PL/SQL: Statement ignored


SQL>
SQL> declare
  2     x varchar2(100);
  3  begin
  4     execute immediate 'select nvl2(:1,:2,:3) from dual'
  5     into x using 'yes','ja','nein';
  6  end;
  7  /

PL/SQL procedure successfully completed.

Hmmmm. I'm getting some strange 8i-deja-vu here...

Regards
Adrian

 

Tom Kyte
September 17, 2004 - 10:31 am UTC

nvl2 is a function, not sql, they apparently forgot to "map the function"

Forgot in 10G also

Adrian Billington, September 17, 2004 - 10:35 am UTC

Seems they forgot in 10g also ;o).

Actually, as NVL2 is a function, then it *should* in theory be a bit slower than CASE WHEN val IS NOT NULL THEN something ELSE something_else END. ( Which is actually what I was trying to test out in SQL and PLSQL ).

Any others you've come across ?

Regards
Adrian

Tom Kyte
September 17, 2004 - 11:50 am UTC

no, i haven't hit any others

Tom...off the cuff question

denni50, September 17, 2004 - 12:10 pm UTC

you wrote:
"perhaps the biggest "whats new" (i haven't played with it but have high hopes)is Native compilation of PLSQL"

"Native compilation vs Native executable"...

brought me back in time to an era when some of
my programming colleagues(including my fiancee at the time) were programming in Assembler Language.

Do they still program in Assembly Language today?
I stuck with the higher level languages Fortran,Cobol,PL/1.

just curious.








Tom Kyte
September 17, 2004 - 1:16 pm UTC

I'm sure they do. way back when (1990) I attempted to go back to school. They attempted to teach me m6800 assembler on a macintosh for some reason. learning assembler was easy. using a macintosh with a command line -- not so easy (i saw that stupid bomb so many times...)


PL/1 - my first real language, one of my favorites to this day.

HLASM

denni50, September 17, 2004 - 2:14 pm UTC

Hey Tom....did some research for the heck of it and
found there is a High Level Assembler Language.

I think I'll check it out.

here's a snippet of an Assembler Programmer's ode:

"Every bit is sacred, Every bit is right.
If a bit is wasted, I can't sleep at night.
Every bit is gorgeous, Every bit is free.
Admire the shape it forges, In hex and BCD!
(July 2001 Dr Dobbs Journal)"

</code> http://www.sysprog.net/hlasm.html <code>

Tom Kyte
September 17, 2004 - 2:19 pm UTC

lol for that "every bit is sacred" reminded me of Monty Pythons "The meaning of life" and their take on that song (thanks, now it is stuck in my head)

What Changed in 9.2.0.5.0 in Terms of FIRST_ROWS and/or ALL_ROWS?

Mac, January 25, 2005 - 9:19 am UTC

When we moved one of our databases to 9.2.0.5.0, a query's became very slow. We had to change our FIRST_ROWS mode to ALL_ROWS (for that query) for it to run as fast as before.

What is different about 9.2.0.5.0? FYI, all our init.ora and other settings are the same as before. Has any default value of some parameter changed in 9.2.0.5.0? Or any other changes?

Please help!

Tom Kyte
January 25, 2005 - 9:41 am UTC

you don't say what you moved *from*

Moved from 9.2.0.4 to 9.2.0.5.0

Mac, January 25, 2005 - 10:09 am UTC

Moved from 9.2.0.4.

Thank you for your prompt reply!

Tom Kyte
January 25, 2005 - 10:23 am UTC

do you still have 9204 -- there are many millions of changes with each release/patch.

what you would want to do is compare the tkprof before/after, or compare the 10053 trace before/after.

No More 9.2.0.4

Mac, January 25, 2005 - 11:25 am UTC

No more 9.2.0.4. It's history.

Tom Kyte
January 25, 2005 - 11:35 am UTC

then it'll be really hard to tell "whats different" in your case.



difference between features of 7.3 and 9i

amna, March 25, 2005 - 11:19 pm UTC

sir
please point me to some link which gives a concise list of the new features from Oracle 7.3 and 9i.i need it very urgently.I ma looking on your site but i am not so much lucky.
thanx and regards
aman

Tom Kyte
March 26, 2005 - 9:15 am UTC

why wouldn't you look in the documentation?

there is a new features guide. "concise" is a word you cannot use to describe the features added in 8.0, 8ir1, 8ir2, 8ir3, 9ir1 and 9ir2 (five MAJOR releases)

You'll want to look at the "getting to know" guide in the 8i doc set and the whats new in 9i and add them together:

</code> http://docs.oracle.com/docs/cd/A87860_01/doc/server.817/a76962/toc.htm http://docs.oracle.com/docs/cd/B10501_01/server.920/a96531/toc.htm <code>


9.2.0.4 to 9.2.0.6

atul, May 07, 2005 - 1:58 am UTC

Hi,

I need to upgrade our database to 9.2.0.6 to 9.2.0.4.
Correct me please

1)change oratab to 9.2.0.6 home.
2)export 9.2.0.6 HOME
2)export SID
3)run catpatch.sql


Is i am missing something?
Please let me know

Tom Kyte
May 07, 2005 - 8:03 am UTC

step 1: get patchset
step 2: read the readme
step 3: do what you learned in step 2, it has the step by step process listed very clearly.


you would not install into a separate oracle home, it fixes the existing software install.

PL/SQL native compilation

Govind Sharma, November 28, 2005 - 3:43 pm UTC

Tom,

Seeing your comments on PL/SQL Native compliation, I am eager to try for our current preformance problem on 9.2.0.5.

However, I would like to know if there are any pre-requists such as Pro C apart from a C compiler availability at OS level. (I have tried searching otn documentation and I could not find anything on pre-requists).

Also, the problem we are trying to fix is a performance issue with our APIs which does a lot of XML parsing, do you think Native compilation will help speed it up XML.

Thanks,

Govind

Tom Kyte
November 28, 2005 - 11:43 pm UTC

I had high hopes, best I've seen is a doubling of performance for numerically complex stuff - less/nothing for the rest.

The best performance kicker - going to 10g, hands down. change nothing but the plsql compiler ;)

you need a C compiler.

I do not believe it will affect XML parsing at all since current releases are already in C for the XML implementation.

NVL2

pradikan, December 07, 2005 - 5:49 am UTC

Hi TOm,

Is there a NVL2 Function available in the version 9.2.0.5.

If yes how can i use it with regular packages?

Thanks in Advance

Tom Kyte
December 07, 2005 - 7:19 am UTC

http://docs.oracle.com/docs/cd/B10501_01/server.920/a96540/functions89a.htm#91637

it was documented in the 9iR2 doc set....

ops$tkyte@ORA9IR2> select nvl2( '', 'a', 'b' ) from dual;

N
-
b

ops$tkyte@ORA9IR2> exec dbms_output.put_line(  nvl2( '', 'a', 'b' )  );
BEGIN dbms_output.put_line(  nvl2( '', 'a', 'b' )  ); END;

                             *
ERROR at line 1:
ORA-06550: line 1, column 30:
PLS-00201: identifier 'NVL2' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored


ops$tkyte@ORA9IR2> begin for x in ( select nvl2('','a','b') x from dual )
  2  loop
  3  dbms_output.put_line( x.x );
  4  end loop;
  5  end;
  6  /
b

PL/SQL procedure successfully completed.


looks like in plsql, you cannot call it "directly", but like decode - must "select it" 

NVL2 and PL/SQL

maaher, March 23, 2006 - 5:46 am UTC

The PL/SQL documentation (PL/SQL User's Guide and Reference, chapter 2 - Fundamentals of PL/SQL) has a list of all built-in functions of PL/SQL and NVL2 isn't mentioned there so it isn't that an implicit reference that you cannot use it in PL/SQL?

XMLDOM on 9i

Govind Sharma, May 11, 2006 - 11:16 am UTC

Hi Tom,

I have asked you a question on Native compilation on this thread before and the reason we were looking at it was to speed up our XML generation or reducde the CPU utilization when we try and generate XML out of our database using the XMLDOM package on Oracle 9i database.

We have got a situation where when there are 4-5 users on the XML application, the application eats up all the CPU of the database box (the DB Box is twin CPU Sun Sparc box with one cpu 1.2Ghz), however an Oracle forms application using the same database with 300 users can use the box without any problems and the box is not maxing out.

Looking at the above would you be able to give us pointers to any set-up changes ( e.g. changing some database parameters, unix setting etc.) we can do to magically fix this problem or get some improvement

Unfortunately, we are in a situation where we can not upgrade to 10g or re-write / analyse the application code because of the volume of the code and time constraints.

Many Thanks


A reader, May 18, 2006 - 1:15 pm UTC


More to Explore

PL/SQL demos

Check out more PL/SQL tutorials on our LiveSQL tool.

PL/SQL docs

PL/SQL reference manual from the Oracle documentation library