Ron and Jonathan,
Glad to know the problem is solved. We do need SQL*Loader control file whenever
we have such a problem.
Any DDL would invalidate a cursor in library cache. I'm testing with the
"harmless" GRANT, which is a DDL.
SQL> create table yongtst (a number);
Table created.
SQL> delete from yongtst;
0 rows deleted.
SQL> select sql_text, invalidations from v$sql where sql_text like '%yongtst%';
SQL_TEXT
INVALIDATIONS
-------------------------------------------------------------------------------------
-------------
delete from yongtst
0
select sql_text, invalidations from v$sql where sql_text like '%yongtst%'
0
SQL> grant select on yongtst to system;
Grant succeeded.
SQL> select sql_text, invalidations from v$sql where sql_text like '%yongtst%';
SQL_TEXT
INVALIDATIONS
-------------------------------------------------------------------------------------
-------------
delete from yongtst
1
select sql_text, invalidations from v$sql where sql_text like '%yongtst%'
0
After GRANT, the delete statement has an invalidation of 1 so a hard parse will
occur next time. I think this hard parse is slightly less expensive than a
brand new SQL. After invalidation, the cursor (cursor head or parent cursor)
still shows up in v$sql, but it disappears from v$sql_plan. A brand new SQL
does not have an entry in v$sql.
Other "harmless" DDLs acting on tables are COMMENT, ANALYZE, REVOKE, but not
EXPLAIN PLAN as you might believe.
Yong Huang
--- Ron Rogers <[EMAIL PROTECTED]> wrote:
> Daniel,
> I understand what is you are saying and what you tested but I don't
> the why or what it means. Does it mean that the sql command is not
> going to work? Does it means that you have to issue it again to get it
> to work?
>
> Ref:
> Doc ID: Note:123214.1
> invalid
> Type: PROBLEM
> Status: PUBLISHED
> ....
> Seems that truncate command invalidates object definition and existence
> in library cache.
>
> Invalidation can also be seen on temporary tables!
>
> ..
>
> Jonathan,
> The memory problem is described in Doc id:1157495.8 Support
> Description of Bug 1157495
>
> Ron
>
> >>> [EMAIL PROTECTED] 11/12/2003 1:14:25 PM >>>
> Ron,
>
> I don't know about the TRUNCATE option w/ sql*loader, but the regular
> DDL
> TRUNCATE invalidates sql that references the table.
>
> Example:
>
> 1 select sql_text, invalidations
> 2 from v$sql
> 3* where sql_text = 'select * from emp'
> SQL> /
>
> SQL_TEXT INVALIDATIONS
> -------------------------------------------------- -------------
> select * from emp 0
>
> SQL> truncate table emp;
>
> Table truncated.
>
> SQL> select sql_text, invalidations
> 2 from v$sql
> 3 where sql_text = 'select * from emp'
> 4 /
>
> SQL_TEXT INVALIDATIONS
> -------------------------------------------------- -------------
> select * from emp 1
>
>
> Ron Rogers wrote:
>
> > Daniel,
> > How does using the TRUNCATE command is a sqlldr invalidate
> anything?
> > The sqlldr truncate command reuses the storage that the table
> originally
> > used and does not change the HW mark. If there are indexes on the
> tables
> > then they are placed in the "DIRECT PATH" state during the load and
> > updated with the now block info.
> > Please explain whet you mean by "invalidate".
> > Ron
__________________________________
Do you Yahoo!?
Protect your identity with Yahoo! Mail AddressGuard
http://antispam.yahoo.com/whatsnewfree
--
Please see the official ORACLE-L FAQ: http://www.orafaq.net
--
Author: Yong Huang
INET: [EMAIL PROTECTED]
Fat City Network Services -- 858-538-5051 http://www.fatcity.com
San Diego, California -- Mailing list and web hosting services
---------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from). You may
also send the HELP command for other information (like subscribing).