Wednesday, March 26, 2008

How to Purge the RECYCLEBIN in Oracle 10g

THE RECYCLE BIN
*****************


The Recycle Bin is a virtual container where all dropped objects reside. Underneath the covers, the objects are occupying the same space as when they were created. If table EMP was created in the USERS tablespace, the dropped table EMP remains in the USERS tablespace. Dropped tables and any associated objects such as indexes, constraints, nested tables, and other dependant objects are not moved, they are simply renamed with a prefix of BIN$$. You can continue to access the data in a
dropped table or even use Flashback Query against it. Each user has the same rights and privileges on Recycle Bin objects before it was dropped. You can view your dropped tables by querying the new RECYCLEBIN view. Objects in the Recycle Bin will remain in the database until the owner of the dropped objects decides to permanently remove them using the new PURGE command. The Recycle Bin objects are counted against a user's quota. But Flashback Drop is a non-intrusive feature. Objects in the Recycle Bin will be automatically purged by the space reclamation process if

o A user creates a new table or adds data that causes their quota to be exceeded.
o The tablespace needs to extend its file size to accommodate create/insert operations.


There is no issues with DROPping the table, behaviour wise. It is the same as in 8i / 9i. The space is not released immediately and is accounted for within the same tablespace / schema after the drop.

When we drop a tablespace or a user there is NO recycling of the objects.

o Recyclebin does not work for SYS objects

Checking the RECYCLEBIN Objects
*******************************


SELECT object_name,original_name,operation,type,dropscn,droptime FROM user_recyclebin;

SELECT owner,original_name,operation,type FROM dba_recyclebin;


Purging the Recyclebin
**************************

Subject: 10g Recyclebin Features And How To Disable it( _recyclebin )
Doc ID: Note:265253.1 Type: BULLETIN

Applies to: Oracle Server - Enterprise Edition - Version: 10.1.0.2 to 10.2.0.0
Information in this document applies to any platform.
Purpose:- This bulletin illustrates the new recyclebin functionality provided with the 10g database

Scope and ApplicationCan be used by Oracle Support Analyst and DBA

10g Recyclebin Features And How To Disable it( _recyclebin )ABOUT 10g RECYCLEBIN
In order to have FLASHBACK DROP functionality a recyclebin is provided to every oracle user.

SQL> desc recyclebin
Name Null? Type
----------------------------------------- -------- ------------
OBJECT_NAME NOT NULL VARCHAR2(30)
ORIGINAL_NAME VARCHAR2(32)
OPERATION VARCHAR2(9)
TYPE VARCHAR2(25)
TS_NAME VARCHAR2(30)
CREATETIME VARCHAR2(19)
DROPTIME VARCHAR2(19)
DROPSCN NUMBER
PARTITION_NAME VARCHAR2(32)
CAN_UNDROP VARCHAR2(3)
CAN_PURGE VARCHAR2(3)
RELATED NOT NULL NUMBER
BASE_OBJECT NOT NULL NUMBER
PURGE_OBJECT NOT NULL NUMBER
SPACE NUMBER

The recyclebin is a public synonym and it is based on the view user_recyclebin which in turn is based on sys.recyclebin$ table.

Related recyclebin objects:

SQL> SELECT SUBSTR(object_name,1,50),object_type,owner
FROM dba_objects
WHERE object_name LIKE '%RECYCLEBIN%';
/
SUBSTR(OBJECT_NAME,1,50) OBJECT_TYPE OWNER
--------------------------- ------------------- ----------
RECYCLEBIN$ TABLE SYS
RECYCLEBIN$_OBJ INDEX SYS
RECYCLEBIN$_TS INDEX SYS
RECYCLEBIN$_OWNER INDEX SYS
USER_RECYCLEBIN VIEW SYS
USER_RECYCLEBIN SYNONYM PUBLIC
RECYCLEBIN SYNONYM PUBLIC
DBA_RECYCLEBIN VIEW SYS
DBA_RECYCLEBIN SYNONYM PUBLIC

9 rows selected.

EXAMPLE
SQL> SELECT * FROM v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bi
PL/SQL Release 10.1.0.2.0 - Production
CORE 10.1.0.2.0 Production
TNS for Solaris: Version 10.1.0.2.0 - Production
NLSRTL Version 10.1.0.2.0 - Production

SQL> sho user
USER is "BH"

SQL> SELECT object_name,original_name,operation,type,dropscn,droptime
2 FROM user_recyclebin
3 /
no rows selected

SQL> CREATE TABLE t1(a NUMBER);
Table created.

SQL> DROP TABLE t1;
Table dropped.

SQL> SELECT object_name,original_name,operation,type,dropscn,droptime
2 FROM user_recyclebin
3 /
OBJECT_NAME ORIGINAL_NAME OPERATION TYPE DROPSCN DROPTIME
------------------------------ -------------------------------- --------- ------------------------- ---------- -------------------
BIN$1Unhj5+DSHDgNAgAIKds8A==$0 T1 DROP TABLE 8.1832E+12 2004-03-10:11:03:49

SQL> sho user
USER is "SYS"

SQL> SELECT owner,original_name,operation,type
2 FROM dba_recyclebin
3 /

OWNER ORIGINAL_NAME OPERATION TYPE
------------------------------ -------------------------------- --------- ------
BH T1 DROP TABLE

We can also create a new table with the same name at this point.

@NOTE:
@Pre-10.1.0.3, the recycled objects can also be viewed in user_tables and dba_tables
@Fix for Bug 3255906 changed this behaviour to maintain compatibility with 9i



PURGING
********


In order to completely remove the table from the DB and to release the space the new PURGE command is used.

From BH user:
SQL> PURGE TABLE t1;
Table purged.

OR

SQL> PURGE TABLE "BIN$1UtrT/b1ScbgNAgAIKds8A==$0";
Table purged.

From SYSDBA user:
SQL> SELECT owner,original_name,operation,type
2 FROM dba_recyclebin
3 /
no rows selected

From BH user:
SQL> SHOW recyclebin
SQL>

There are various ways to PURGE objects:

PURGE TABLE t1;
PURGE INDEX ind1;
PURGE recyclebin; (Purge all objects in Recyclebin)
PURGE dba_recyclebin; (Purge all objects / only SYSDBA can)
PURGE TABLESPACE users; (Purge all objects of the tablespace)
PURGE TABLESPACE users USER bh; (Purge all objects of the tablspace belonging to BH)

For an object, the owner or a user with SYSDBA privilege or a user with DROP ANY... system privilege for the type of object to be purged can PURGE it.


DISABLING RECYCLEBIN
**********************


We can DROP and PURGE a table with a single command

From BH user:
SQL> DROP TABLE t1 PURGE;
Table dropped.

SQL> SELECT *
2 FROM recyclebin
3 /
no rows selected

There is no need to PURGE.

On 10gR1, in case we want to disable the behavior of recycling, there is an underscore parameter
"_recyclebin" which defaults to TRUE. We can disable recyclebin by setting it to FALSE.

From SYSDBA user:
SQL> SELECT a.ksppinm, b.ksppstvl, b.ksppstdf
FROM x$ksppi a, x$ksppcv b
WHERE a.indx = b.indx
AND a.ksppinm like '%recycle%'
ORDER BY a.ksppinm
/
Parameter Value Default?
---------------------------- ---------------------------------------- --------
_recyclebin TRUE TRUE

From BH user:
SQL> CREATE TABLE t1(a NUMBER);
Table created.

SQL> DROP TABLE t1;
Table dropped.

SQL> SELECT original_name
FROM user_recyclebin;
ORIGINAL_NAME
--------------
T1

From SYSDBA user:
SQL> ALTER SYSTEM SET "_recyclebin"=FALSE SCOPE = BOTH;
System altered.

SQL> SELECT a.ksppinm, b.ksppstvl, b.ksppstdf
FROM x$ksppi a, x$ksppcv b
WHERE a.indx = b.indx
AND a.ksppinm like '%recycle%'
ORDER BY a.ksppinm
/
Parameter Value Default?
---------------------------- ---------------------------------------- --------
_recyclebin FALSE TRUE

From BH user:
SQL> CREATE TABLE t1(a NUMBER);
Table created.

SQL> DROP TABLE t1;
Table dropped.

SQL> SELECT original_name
FROM user_recyclebin;
no rows selected

There is no need to PURGE.

As with anyother underscore parameter, setting this parameter is not recommended unless
advised by oracle support services.

On 10gR2 recyclebin is a initialization parameter and bydefault its ON.
We can disable recyclebin by using the following commands:

SQL> ALTER SESSION SET recyclebin = OFF;
SQL> ALTER SYSTEM SET recyclebin = OFF;

The dropped objects, when recyclebin was ON will remain in the recyclebin even if we set the recyclebin parameter to OFF.

21 Comments:

Anonymous said...

Good One. Now only i understand the concept of purging in oracle.

Thanks

Unknown said...

I have a table (in fact created while creating AW by name STDC) by name AW$STDC which after dropping is figuring in DBA_TABLES:

SQL> SELECT * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for HPUX: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production


SQL> drop table ADWGD_OLAP_AW1.aw$stdc;
drop table ADWGD_OLAP_AW1.aw$stdc
*
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> PURGE TABLE adwgd_olap_aw1.aw$stdc;
PURGE TABLE adwgd_olap_aw1.aw$stdc
*
ERROR at line 1:
ORA-38307: object not in RECYCLE BIN


SQL> select owner, table_name, status, dropped from dba_tables where table_name = 'AW$STDC';

OWNER TABLE_NAME STATUS DRO
------------------------------ ------------------------------ -------- ---
ADWGD_OLAP_AW1 AW$STDC VALID NO

Could you see where I'm going wrong!

Anonymous said...

While logged on as ADWGD_OLAP_AW1
DROP TABLE "AW$STDC" PURGE;

-Jerry R.

Waldo said...

Only one comment
When you use : PURGE recyclebin; (Purge all objects in Recyclebin)
but purge only one schema or user connect. (not all objects)


Waldo

Anonymous said...

I am designing a purge process that only purges objects that have been dropped N days ago. I plan to drive the script with an oracle dba user. I have tested the basics. One can use the Alter session set current_schema=SCOTT and then purge items in the recycle bin that are owned by Scott even though you are loged in as another user. Food for thought.
Thanks
Greg Knobel.

Rachat de credit said...

Thanks it has been a fantastic help, now to purge the recyclebin in oracle 10g is definitely simple with your tips. Kudos

Anonymous said...

top [url=http://www.001casino.com/]online casino[/url] coincide the latest [url=http://www.realcazinoz.com/]casino[/url] manumitted no store reward at the best [url=http://www.baywatchcasino.com/]casino online
[/url].

Anonymous said...

Poezi Dashurie

Anonymous said...

Hey! І undегstanԁ this is somеwhat off-tοpic but I hаd to ask.
Dοes runnіng a well-establiѕhed blog such аs yours
require a largе amοunt of work? I'm brand new to running a blog however I do write in my diary everyday. I'd like to start a blоg sо I
ωill bе able to share my реrsonal expеrіence and
feelings online. Pleaѕe let me know if you have any kind
of reсommеndatіοns or tips fοr neω
aspiring blog oωners. Thаnkyou!

Feel free to visit my web-ѕite: cover iphone 4 leather

Anonymous said...

Have уou evеr thought about creating an e-book оr guest authоring οn
othеr websіtes? I have a blog сentered on the same information
you dіscuss аnd would lovе to haνe уou share sοme stories/information.
І know my viеwers wοulԁ enjoy youг woгκ.
If you are even remοtely inteгеsted, feel frеe to send me an
e-mail.

My homepage: iphone 4s metal bumper

Anonymous said...

This is very nice explanation of PURGE command.
Hope you will release more here.

Thanking you

---
Mohammad Shahnawaz

Anonymous said...

Superb site you have here but I was wanting to know if you knew of any user discussion forums
that cover the same topics talked about here? I'd really like to be a part of group where I can get advice from other experienced people that share the same interest. If you have any suggestions, please let me know. Bless you!

Check out my site www.illiivat.com

Anonymous said...

I do nоt even understand how I stοpped up heгe, hoωеѵer I thοught this submit used to be great.

Ι ԁon't know who you are but definitely you are going to a famous blogger if you happen to aren't already.
Cheеrs!

Here is my web sіte ... apartments for rent

Anonymous said...

I'm impressed, I have to admit. Rarely do I encounter a blog that's equally educative and engaging, and without a doubt, you
have hit the nail on the head. The problem is something too few men and women are speaking intelligently about.

Now i'm very happy I came across this during my hunt for something concerning this.

My website :: wiki.idebate.org

Anonymous said...

I loved as much as you will receive carried out right here.
The sketch is tasteful, your authored material stylish.
nonetheless, you command get got an shakiness over that you wish be delivering the following.
unwell unquestionably come more formerly again since exactly the same nearly very often inside
case you shield this hike.

Feel free to surf to my homepage ... breville juice fountain

Anonymous said...

Wow! This blog looκѕ just liκе mу
оld one! It's on a entirely different subject but it has pretty much the same layout and design. Excellent choice of colors!

my web-site; Red Kings Poker Bonus ()

Anonymous said...

With havin so much content do you ever run into any issues
of plagorism or copyright violation? My website has a
lot of unique content I've either created myself or outsourced but it looks like a lot of it is popping it up all over the internet without my permission. Do you know any solutions to help protect against content from being stolen? I'd really appreciate
it.

Here is my web page - garage door openers phoenix

Anonymous said...

Poezi Dashurie

Unknown said...

If i have purge recycle bin for a specific user, pleae let me know how it can be done.

Unknown said...

Thanks in advance.

Anonymous said...

Hi,

Shall i use delete with purge. I have a table I and want to delete data from jun to now. its huge data more then 1000000. If i delete this data it will not go recyclebin. Thats why am asking purge with delete option.