Thursday, November 25, 2010

Add ASM Disk and check if Standby is recovering

##command to check provisioned disk ##
SQL> select 'ALTER DISKGROUP ADD DISK ''ORCL:'||label
||''''||' SIZE '||total_mb||' M;' gen_statement
from v$asm_disk
where header_status in ('PROVISIONED', 'CANDIDATE', 'FORMER')
order by 1;
2 3 4 5
GEN_STATEMENT
----------------------------------------------------------------------------------------------------------------------------
ALTER DISKGROUP ADD DISK 'ORCL:ASM34' SIZE 92952 M;
ALTER DISKGROUP ADD DISK 'ORCL:ASM35' SIZE 92952 M;
ALTER DISKGROUP ADD DISK 'ORCL:ASM36' SIZE 92952 M;



##command to add ##
ALTER DISKGROUP DATA01 ADD DISK 'ORCL:ASM34' SIZE 92952 M;

## Check ASM Disk group sizes ##

SQL> select TOTAL_MB,FREE_MB,USABLE_FILE_MB,NAME from V$asm_diskgroup;

pztbw_uxusnorw400_XPT.cargill.com
Archived Redo Log
TOTAL_MB FREE_MB USABLE_FILE_MB File Name
---------- ---------- -------------- -------------------------
2788560 92749 92749 DATA01
92952 7909 7909 MIRROR01
92952 5945 5945 ONLINE01
185904 33449 33449 RECOVER01




SQL> select TOTAL_MB,FREE_MB,USABLE_FILE_MB,NAME from V$asm_diskgroup
2 ;

TOTAL_MB FREE_MB USABLE_FILE_MB NAME
---------- ---------- -------------- ------------------------------
3067416 212906 212906 DATA01
92952 21164 21164 MIRROR01
92952 43453 43453 ONLINE01
371808 114877 114877 RECOVER01



## Command to start up recovery process ##
SQL> recover managed standby database using current logfile disconnect;
Media recovery complete.

## Check if MRP# is up and running ##
$> ps -ef | grep mrp | grep oracle

oracle 10248 16867 0 21:28 pts/2 00:00:00 grep mrp
oracle 29268 1 0 Nov16 ? 00:07:42 ora_mrp0_eminus

Tuesday, September 28, 2010

Query columns used by views

this SQL block will tell you all the columns being used by a view.

SET serveroutput ON
DECLARE
-- local variables, create a cursor for the records
CURSOR c1
IS
SELECT text,view_name FROM dba_views WHERE owner = &&OWNER1;
CURSOR c2
IS
SELECT table_name,
column_name
FROM dba_tab_columns
WHERE owner =
&&OWNER1
ORDER BY 1,2;
BEGIN
DBMS_OUTPUT.ENABLE(1000000);
FOR r2 IN c2
LOOP
FOR r1 IN c1
LOOP
IF (instr(lower(r1.text),lower(r2.column_name)) > 0) THEN
dbms_output.put_line(r1.view_name || ',' ||r2.column_name ||','||r2.table_name);
dBMS_OUTPUT.NEW_LINE;
END IF;
END LOOP;
END LOOP;
END;

Monday, September 20, 2010

useful when resizing datafile

this script i got from asktom.com is a usefull script to determine what object/s are in the end of the datafile which will cause for you to not to shrink it the way you want it to shrink :) (I mean if there is a big free space between that object and the other object)

column tablespace_name format a20
column "Name" format a45
break on file_id skip 1
ttitle &1
select file_id, block_id, blocks,
owner||'.'||segment_name "Name"
from sys.dba_extents
where tablespace_name = upper('&1')
UNION
select file_id, block_id, blocks,
'Free'
from sys.dba_free_space
where tablespace_name = upper('&1')
order by 1,2,3
/


set verify off
column file_name format a50 word_wrapped
column smallest format 999,990 heading "Smallest|Size|Poss."
column currsize format 999,990 heading "Current|Size"
column savings format 999,990 heading "Poss.|Savings"
set pages 3000
break on report
compute sum of savings on report

column value new_val blksize
select value from v$parameter where name = 'db_block_size'
/

select file_name,
ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) smallest,
ceil( blocks*&&blksize/1024/1024) currsize,
ceil( blocks*&&blksize/1024/1024) -
ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) savings
from dba_data_files a,
( select file_id, max(block_id+blocks-1) hwm
from dba_extents
group by file_id ) b
where a.file_id = b.file_id(+)
/

column cmd format a75 word_wrapped

select 'alter database datafile '''||file_name||''' resize ' ||
ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) || 'm;' cmd
from dba_data_files a,
( select file_id, max(block_id+blocks-1) hwm
from dba_extents
group by file_id ) b
where a.file_id = b.file_id(+)
and ceil( blocks*&&blksize/1024/1024) -
ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) > 0
/

Wednesday, September 15, 2010

Undo Rollback time

this query will show you how much time remaining for your rollback session.

for 9i and up

SET lines 500 pages 500 col PCT FOR a5
SELECT state ,
undoblocksdone ,
undoblockstotal ,
cputime ,
undoblocksdone / undoblockstotal * 100 percent,
TO_CHAR(((((undoblockstotal - undoblocksdone) / (undoblocksdone/cputime) / 3600) / 24) + sysdate),'dd-mon-yyyy hh24:mi:ss') timetocomplete
FROM v$fast_start_transactions;
--just a note if your doing a parallel rollback the values does not give the correct values


for 10g and up


SELECT ADDR,
ROUND(((KTUXESIZ*
(SELECT value FROM v$parameter WHERE name = 'db_block_size'
)/1024/1024)),2) "Undo Size",
KTUXESTA "Status" ,
KTUXECFL
FROM sys.x$ktuxe
WHERE KTUXESTA='ACTIVE'

Tuesday, March 02, 2010

Oracle: how to get the DDL of a certain object

I have a sql script here to extract DDL of all the objects in a schema, the example below will extract the indexes of a certain schema. this is already formatted so you can spool it in a sql file and later run it.

set feedback off echo off
set long 200000 pages 0 lines 400 trimspool on linesize 400
column txt format a400 word_wrapped
variable ind_owner varchar2(100);

begin
:ind_owner := &schema;
end;
/

exec dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, 'PRETTY', TRUE);
exec dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, 'SQLTERMINATOR', TRUE );
spool $ORACLE_SID-get_idx_ddl.sql
select dbms_metadata.get_ddl('INDEX',u.INDEX_NAME,:ind_owner) txt from dba_indexes u where owner = :ind_owner;
spool off
exit