Tuesday, February 14, 2012

EXP-00011 Table or View Does not exist in 11gR2

EXP-00011 Table or View Does not exist in 11gR2

connect scott/tiger
create table table1 (no number, value varchar2(20));

create table table2 (no number, value varchar2(20));
insert into table2 values (1, ‘’);
commit;

exp scott/tiger file=have_fun.dmp table1, table2

Export: Release 11.2.0.1.0 – Production on Wed Jan 19 10:38:10 2011

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – 64bit Production
About to export specified tables via Conventional Path …

EXP-00011: SCOTT.table1 does not exist

. . exporting table                  table2             1 rows exported
Export terminated successfully with warnings.

Oracle has introduced new feature called deferred segment creation.

In Oracle Database 11g Release 2, when creating a non-partitioned heap-organized table in a locally managed tablespace,
table segment creation is deferred until the first row is inserted.  This is set via setting the initialization parameter DEFERRED_SEGMENT_CREATION TRUE,
which is default when you create DB.  Having said that unless you insert first record object is not visible to our traditional exp tool.

Solutions :

Option – 1: Add dummy entry into table1 and let oracle to allocate first extent one-time.

Option – 2: Create a table with segment creation immediate option.

create table table1 (no number, value varchar2(20)) segment creation immediate;

Option 3: set initialize parameter DEFERRED_SEGMENT_CREATION=FALSE.It requires bounce.

Friday, February 10, 2012

Getting Db Startup And Shut Down timings from Alert log



My  alert log name is  alert_ORCL.log
and it  is located at  '/home/app/oracle/diag/rdbms/orcl/ORCL/trace';
 i am creating a  logical directory name as  ALERT_DIR pointing to  alert log directory

CREATE DIRECTORY DATA_DIR AS '/home/app/oracle/diag/rdbms/orcl/ORCL/trace';




Now i am creaing external table which reads data from alert_orcl.log file using the directory  ALERT_DIR

CREATE TABLE ALERTLOG_CONTENT
(
text_line varchar2(255)
)
ORGANIZATION EXTERNAL
(
    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY  ALERT_DIR
    ACCESS PARAMETERS
    (
        records delimited by newline
        fields
        REJECT ROWS WITH ALL NULL FIELDS
    )
    LOCATION
    (
        'alert_ORCL.log'
    )
)
REJECT LIMIT unlimited



------------ Query to retrieve data regarding  Shut Down Timings

SELECT * FROM (
select rownum RWNUM1,TO_CHAR(TO_DATE(UPPER(timeid),'DY MON DD HH24:MI:SS YYYY'),'DD-MON-YYYY HH24:MI:SS')  TIMEID,text_line  from (
select  text_line ,lag(text_line,1) over(order by 1) timeid
from ALERTLOG_CONTENT
where text_line like '___ ___ __ __:__:__ 20__'
or text_line like 'Shutting down instance (%') where text_line like 'Shutting down instance (%')
ORDER BY TO_DATE(timeid,'DD-MON-YYYY HH24:MI:SS')





------------ Query to retrieve data regarding  Start up  Timings

SELECT * FROM (
select rownum RWNUM2,TO_CHAR(TO_DATE(timeid,'DY MON DD HH24:MI:SS YYYY'),'DD-MON-YYYY HH24:MI:SS') TIMEID,text_line  from (
select  lag(text_line,1) over(order by 1) timeid,text_line
from ALERTLOG_CONTENT
where text_line like '___ ___ __ __:__:__ 20__'
or text_line like 'Starting ORACLE instance %'
) where text_line like 'Starting ORACLE instance %')
ORDER BY TO_DATE(timeid,'DD-MON-YYYY HH24:MI:SS')

Thursday, February 9, 2012

Compound Trigger

CREATE TABLE TRIGG_COMPOUND_EXMP_TABLE (
  id           NUMBER,
  description  VARCHAR2(50)
);

CREATE OR REPLACE TRIGGER TRIGG_COMPOUND_EXMP
  FOR INSERT OR UPDATE OR DELETE ON TRIGG_COMPOUND_EXMP_TABLE
    COMPOUND TRIGGER

  -- Global declaration.
  TYPE COLL_T IS TABLE OF VARCHAR2(50);
  OBJ_T COLL_T := COLL_T();

  BEFORE STATEMENT IS
  BEGIN
    OBJ_T.extend;
    CASE
      WHEN INSERTING THEN
        OBJ_T(OBJ_T.last) := 'BEFORE STATEMENT - INSERT';
      WHEN UPDATING THEN
        OBJ_T(OBJ_T.last) := 'BEFORE STATEMENT - UPDATE';
      WHEN DELETING THEN
        OBJ_T(OBJ_T.last) := 'BEFORE STATEMENT - DELETE';
    END CASE;
  END BEFORE STATEMENT;

  BEFORE EACH ROW IS
  BEGIN
    OBJ_T.extend;
    CASE
      WHEN INSERTING THEN
        OBJ_T(OBJ_T.last) := 'BEFORE EACH ROW - INSERT (new.id=' || :new.id || ')';
      WHEN UPDATING THEN
        OBJ_T(OBJ_T.last) := 'BEFORE EACH ROW - UPDATE (new.id=' || :new.id || ' old.id=' || :old.id || ')';
      WHEN DELETING THEN
        OBJ_T(OBJ_T.last) := 'BEFORE EACH ROW - DELETE (old.id=' || :old.id || ')';
    END CASE;
  END BEFORE EACH ROW;

  AFTER EACH ROW IS
  BEGIN
    OBJ_T.extend;
    CASE
      WHEN INSERTING THEN
        OBJ_T(OBJ_T.last) := 'AFTER EACH ROW - INSERT (new.id=' || :new.id || ')';
      WHEN UPDATING THEN
        OBJ_T(OBJ_T.last) := 'AFTER EACH ROW - UPDATE (new.id=' || :new.id || ' old.id=' || :old.id || ')';
      WHEN DELETING THEN
        OBJ_T(OBJ_T.last) := 'AFTER EACH ROW - DELETE (old.id=' || :old.id || ')';
    END CASE;
  END AFTER EACH ROW;

  AFTER STATEMENT IS
  BEGIN
    OBJ_T.extend;
    CASE
      WHEN INSERTING THEN
        OBJ_T(OBJ_T.last) := 'AFTER STATEMENT - INSERT';
      WHEN UPDATING THEN
        OBJ_T(OBJ_T.last) := 'AFTER STATEMENT - UPDATE';
      WHEN DELETING THEN
        OBJ_T(OBJ_T.last) := 'AFTER STATEMENT - DELETE';
    END CASE;
   
    FOR i IN OBJ_T.first .. OBJ_T.last LOOP
      DBMS_OUTPUT.put_line(OBJ_T(i));
    END LOOP;
    OBJ_T.delete;
  END AFTER STATEMENT;

END TRIGG_COMPOUND_EXMP_trg;
/

Controlling Execution Order of Triggers on a Table

Oracle allows more than one trigger to be created for the same timing point on a table , but it has never guaranteed the execution order of those triggers.
The Oracle 11g trigger syntax now includes the FOLLOWS clause to guarantee execution order for triggers defined with the same timing point.
The following example creates a table with two triggers for the same timing point.

CREATE TABLE TRIGG_EXMP_FOLLOWS (
  id          NUMBER,
  description VARCHAR2(50)
);

CREATE OR REPLACE TRIGGER TRIGG_EXMP_FOLLOWS_1
BEFORE INSERT ON TRIGG_EXMP_FOLLOWS
FOR EACH ROW
BEGIN
  DBMS_OUTPUT.put_line('TRIGG_EXMP_FOLLOWS_1 - Executed');
END;
/

CREATE OR REPLACE TRIGGER TRIGG_EXMP_FOLLOWS_2
BEFORE INSERT ON TRIGG_EXMP_FOLLOWS
FOR EACH ROW
BEGIN
  DBMS_OUTPUT.put_line('TRIGG_EXMP_FOLLOWS_2 - Executed');
END;
/


Defining Order of Excecution of Trigger using FOLLOW keyword

CREATE OR REPLACE TRIGGER TRIGG_EXMP_FOLLOWS_1
BEFORE INSERT ON TRIGG_EXMP_FOLLOWS
FOR EACH ROW
FOLLOWS TRIGG_EXMP_FOLLOWS_2
BEGIN
  DBMS_OUTPUT.put_line('TRIGG_EXMP_FOLLOWS_1 - Executed');
END;
/

Tuesday, February 7, 2012

ORA-06554: package DBMS_STANDARD must be created before using PL/SQL


in the day starting  i was trying to  execute  procedures then it  given a error ORA-6554  error
.

06554, 00000, "package DBMS_STANDARD must be created before using PL/SQL"
// *Cause:    The DBMS specific extensions to PL/SQL's package "STANDARD"
//            are in package "DBMS_STANDARD".  This package must be
//            created before using PL/SQL.
// *Action:   Create package "DBMS_STANDARD".  The source for this
//            PL/SQL stored package is provided with the distribution.

i have tried to  execute  dbms_standard package provided by the oracle .  even then also i faced same
problem.then i  opened database in upgrade mode and executed dbms_standard package. my problem was solved