Re: SGA Help......

From: Sybrand Bakker <Sybrand.Bakker_at_bentley.nl>
Date: 1996/02/22
Message-ID: <312C2349.1C80_at_bentley.nl>#1/1


V.N.Saravana Vijayan wrote:
>
> Hi DBA's,
>
> I am just begining DBA(!!-) . I am getting this error
> when I am trying to do DML operation[
> 2000 SQL stmts I am executing one by one,
> commiting only each 16th SQL stmt].
>
> ORA-04031 Unable to allocate 744 bytes of shared
> memory("unknown object","sga heap","library cache")>!
>
> I dont want to keep increase shared spool size even
> for small DB's.
>
> Shared spool area 6000000
> db_block_size 4096
> db_block_buffers 2000
>
>
> THANKX IN ADVANCE.
>
> +--------------------------------------------------------------------+
> | V.N.Saravana Vijayan email: vijay_at_mercedes.bbn.hp.com |
> +--------------------------------------------------------------------+I think I have a feeling what happens, only I'm not very sure, as you
were not too specific about the nature of your transactions. Any statement that differs from any statement previously parsed will allocate memory in the library cache. Oracle computes a hash total for every statement, if one single character differs this is considered to be a "new" statement. For example:
select * from emp where ename = 'KING' and select * from emp where ename = 'JONES'
are considered to be different statements. This is especially applies to SQL*Plus where every statement is parsed and when you don't embed them in PL/SQL is considered to be a new statement.
When you are executing INSERTS in SQL*Plus, you might consider putting the data in a file and use SQL*Loader instead. As an alternative, somewhere in the utility routines shipped with Oracle there is a PL/SQL procedure that flushes the shared pool. Right now I can't check this in the documentation, because Oracle*Book has hang up.

Hth

Sybrand Bakker,
Senior IS Analyst
Bentley Systems Europe Received on Thu Feb 22 1996 - 00:00:00 CET

Original text of this message