среда, 9 октября 2013 г.

Recovery using the SWITCH DATABASE TO COPY command

Recover database from copy

  1. rm users*.dbf
  2. rman target /
  3. RMAN> shutdown abort
  4. # Recover database from copy
  5. RMAN> startup mount;
  6. RMAN> switch database to copy;
  7. RMAN> recover database;
  8. RMAN> alter database open;
  9. SQL> select name,status from v$datafile;

Recover tablespace from copy

  1. rm users*.dbf
  2. rman target /
  3. # Recover tablespace from copy
  4. RMAN> sql 'alter tablespace users offline immediate';
  5. RMAN> switch tablespace users to copy;
  6. RMAN> recover tablespace users;
  7. RMAN> sql 'alter tablespace users online';
  8. SQL> select file_name from dba_data_files where tablespace_name='USERS';
  9. NAME
  10. ----------------------------
  11. /data/users01.dbf
  12. /backup/users02.dbf
  13. # Move datafile from /backup/$ORACLE_SID to /data/$ORACLE_SID directory
  14. # while the Database is online
  15. SQL> alter tablespace users offline;
  16. # Move the file /db_backup/ptdb1/users02.dbf using operating system command
  17. cp /backup/users02.dbf /data/users02.dbf
  18. # Update the database data dictionary
  19. SQL> alter database rename file '/backup/users02.dbf' to '/data/users02.dbf';
  20. # Take tablespace USERS online:
  21. SQL> alter tablespace users online;
  22. # Delete file from old location using operating system command
  23. rm /backup/users02.dbf

пятница, 6 сентября 2013 г.

Check tablespace size usage

Rewritten version from Top DBA Shell Scripts for Monitoring the Database based on MAXBYTES of each file within tablespace:
  1. SELECT F.TABLESPACE_NAME,
  2. TO_CHAR ((T.ALLOCATED_SPACE - F.FREE_SPACE),'999,999') "USED (MB)",
  3. TO_CHAR (T.TOTAL_SPACE, '999,999') "TOTAL (MB)",
  4. TO_CHAR (T.TOTAL_SPACE - (T.ALLOCATED_SPACE - F.FREE_SPACE), '999,999') "FREE (MB)",
  5. TO_CHAR ((ROUND (((T.TOTAL_SPACE - (T.ALLOCATED_SPACE - F.FREE_SPACE))/T.TOTAL_SPACE)*100)),'999')||' %' PER_FREE
  6. FROM (
  7. SELECT TABLESPACE_NAME,
  8. ROUND (SUM (BLOCKS*(SELECT VALUE/1024
  9. FROM V$PARAMETER
  10. WHERE NAME = 'db_block_size')/1024)
  11. ) FREE_SPACE
  12. FROM DBA_FREE_SPACE
  13. GROUP BY TABLESPACE_NAME
  14. ) F,
  15. (
  16. SELECT TABLESPACE_NAME,
  17. ROUND(SUM (MAXBYTES/1048576)) TOTAL_SPACE,
  18. ROUND (SUM (BYTES/1048576)) ALLOCATED_SPACE
  19. FROM DBA_DATA_FILES
  20. GROUP BY TABLESPACE_NAME
  21. ) T
  22. WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME
  23. --AND ROUND (((T.TOTAL_SPACE - (T.ALLOCATED_SPACE - F.FREE_SPACE))/T.TOTAL_SPACE)*100) < 10;

Restore archivelog from backup by logseq/scn

See details in RMAN effective use
  1. set archivelog destination to '/disk1/oracle/temp_restore';
  2. #restore archivelog from scn=460779 until scn =506141
  3. restore archivelog from logseq 1 until logseq 10;

пятница, 16 августа 2013 г.

ADRCI usage examples

Usage example 1:
  1. [oracle@host ~]$ adrci
  2. adrci> show homes
  3. set home diag/rdbms/orcl/orcl
  4. # Output with enter to editor
  5. show alert -p "ORIGINATING_TIMESTAMP >= '2014-02-24 00:00:00'"
  6. # Output to termnal without enter to editor
  7. show alert -p "ORIGINATING_TIMESTAMP >= '2014-02-24 00:00:00'" -term
  8. # Show all 'ORA-%' and 'TNS-%' messages
  9. show alert -p "ORIGINATING_TIMESTAMP >= '2014-02-24 00:00:00' AND (MESSAGE_TEXT LIKE '%ORA-%' or MESSAGE_TEXT LIKE '%TNS-%')" -term
  10. # Show all 'ORA-%' and 'TNS-%' messages with exclude from output specified
  11. show alert -p "ORIGINATING_TIMESTAMP > '2013-08-16 00:00:00' AND (MESSAGE_TEXT LIKE '%ORA-%' or MESSAGE_TEXT LIKE '%TNS-%') AND (MESSAGE_TEXT NOT LIKE '%TNS-12502%' AND MESSAGE_TEXT NOT LIKE '%TNS-12537%' AND MESSAGE_TEXT NOT LIKE '%ORA-609%')" -term
  12. show alert -tail -f
  13. exit
Usage example 2:
  1. [oracle@host ~]$ adrci
  2. adrci> show homes
  3. set home diag/rdbms/orcl/orcl
  4. show alert -tail -f
  5. exit
Incident & Problem
  1. adrci>
  2. show problem
  3. show incident
  4. show incident -mode detail -p "incident_id=6201"
  5. show trace /u01/app/oracle/diag/rdbms/orcl/orcl/incident/incdir_6201/orcl_ora_2299_i6201.trc
Creation of Packages & ZIP files to send to Oracle Support
  1. adrci>
  2. ips create package problem 1 correlate all
  3. ips generate package 2 in "/home/oracle"
Managing, especially purging of tracefiles
  1. adrci>
  2. show tracefile -rt
  3. show control
  4. set control (SHORTP_POLICY = 360)
  5. set control (LONGP_POLICY = 2190)
  6. show control
  7.  
  8. # Purge tracefiles manually
  9. purge -age 2880 -type trace
  10. show tracefile -rt
  11.  
  12. # Purge log directories for listener ADRCI Home
  13. for i in `adrci exec="show homes"|grep listener`;do
  14. # Purge ADRCI Homes log directories older 60 days ago
  15. #for i in `adrci exec="show homes"|sed '1d'`;do
  16. du -hs $ORACLE_BASE/$i | sort -rh
  17. du -hs $ORACLE_BASE/$i/* | sort -rh
  18. du -hs $ORACLE_BASE/$i/trace | sort -rh
  19.  
  20. # Purge listener log directory older 60 days ago
  21. # (60 days * 24h * 60 mins = 86400 mins)
  22. # -age - The data older than ago will be purged
  23. echo "adrci exec=\"set home $i;purge -age 86400\""
  24. adrci exec="set home $i;purge -age 86400";
  25. adrci exec="set home $i;show control;set control \(SHORTP_POLICY = 180\);set control \(LONGP_POLICY = 720\);show control";
  26. du -hs $ORACLE_BASE/$i | sort -rh
  27. du -hs $ORACLE_BASE/$i/* | sort -rh
  28. du -hs $ORACLE_BASE/$i/trace | sort -rh
  29. done
  30. # Check ADRCI Homes policy
  31. for i in `adrci exec="show homes"|sed '1d'`;do
  32. adrci exec="set home $i;show control;";
  33. done
  34. # Set ADRCI Homes policy
  35. for i in `adrci exec="show homes"|sed '1d'`;do
  36. adrci exec="set home $i;show control;set control \(SHORTP_POLICY = 180\);set control \(LONGP_POLICY = 720\);show control";
  37. done

понедельник, 1 апреля 2013 г.

Read data from clob

Read data from clob:
  1. declare
  2. v_body clob;
  3. offset number := 1;
  4. v_str varchar(32767);
  5. amount number := 32767;
  6. begin
  7. v_body := rpad('Big clob data ', 32767 * 4, 'Big clob data ');
  8. while(offset <= dbms_lob.getlength(v_body)) loop
  9. dbms_lob.read(v_body, amount, offset, v_str);
  10.  
  11. -- Operate with v_str:
  12. --dbms_output.put_line(v_str);
  13.  
  14. offset := offset + amount;
  15. end loop;
  16. end;