XPP A Practices Solutions

Download as pdf or txt
Download as pdf or txt
You are on page 1of 276

Appendix A Practices and Solutions

Table of Contents
Practices for Lesson 1 ......................................................................................................... 4 Practice 1-2: Reviewing the Database Architecture ............................................... 5 Practices for Lesson 2 ......................................................................................................... 6 Practice 2-1: Configuring ARCHIVELOG Mode .................................................. 6 Practice 2-2: Resizing the Flash Recovery Area..................................................... 8 Practice 2-3: Verifying the Backup Destination ................................................... 12 Practice 2-4: Configuring the Retention Policy .................................................... 15 Practices for Lesson 3 ....................................................................................................... 16 Practice 3-1: Creating a Recovery Catalog........................................................... 16 Practice 3-2: Creating the Recovery Catalog Owner............................................ 24 Practice 3-3: Creating the Recovery Catalog........................................................ 25 Practice 3-4: Registering a Database in the Recovery Catalog............................. 26 Practice 3-5: Backing up the Recovery Catalog ................................................... 29 Practices for Lesson 4 ....................................................................................................... 33 Practice 4-1: Setting the Date and Time Format for RMAN ................................ 33 Practice 4-2: Enabling Control File Autobackup.................................................. 35 Practice 4-3: Configuring Devices for Backup..................................................... 37 Practices for Lesson 5 ....................................................................................................... 39 Practice 5-1: Creating Fast Incremental Backups................................................. 39 Practice 5-2: Cross-Checking Backups................................................................. 42 Practice 5-3: Listing Backup Files and Creating Archival Backup ...................... 47 Practices for Lesson 6 ....................................................................................................... 58 Practice 6-1: Backing up the Database ................................................................. 58 Practice 6-2: Recovering from the Loss of a Data File......................................... 61 Practice 6-3: Recovering from the Loss of all Control Files ................................ 66 Practice 6-4: Recovering from the Loss of a Redo Log Group ............................ 71 Practices for Lesson 7 ....................................................................................................... 75 Practice 7-1: Recovering Image Copies................................................................ 75 Practice 7-2: Performing Fast Recovery ............................................................... 83 Practices for Lesson 8 ....................................................................................................... 90 Practice 8-1: Monitoring RMAN Jobs.................................................................. 90 Practices for Lesson 9 ....................................................................................................... 93 Practice 9-1: Diagnostic Scenario......................................................................... 94 Practice 9-2: Repairing Block Corruption .......................................................... 109 Practices for Lesson 10 ................................................................................................... 116 Practice 10-1: Flashback Transaction Backout................................................... 117 Practices for Lesson 11 ................................................................................................... 118 Practice 11-1: Using Flashback Data Archive .................................................... 119 Practice 11-2: Using the Recycle Bin ................................................................. 133 Practices for Lesson 12 ................................................................................................... 138 Practice 12-1: Flashback Database ..................................................................... 139 Practices for Lesson 13 ................................................................................................... 146 Practice 13-1: Using Automatic Memory Management ..................................... 147 Practices for Lesson 14 ................................................................................................... 165

Oracle Database 11g: Administration Workshop II A - 2

Practice 14-1: Monitoring Services .................................................................... 165 Practices for Lesson 15 ................................................................................................... 173 Practice 15-1: Using Automatic SQL Tuning..................................................... 174 Practices for Lesson 16 ................................................................................................... 194 Practice 16-1: Managing Resources.................................................................... 195 Practices for Lesson 17 ................................................................................................... 212 Practice 17-1: Creating Scheduler Components ................................................. 213 Practice 17-2: Creating Lightweight Scheduler Jobs.......................................... 226 Practice 17-3: Monitoring the Scheduler ............................................................ 231 Practices for Lesson 18 ................................................................................................... 239 Practice 18-1: Managing Storage........................................................................ 240 Practices for Lesson 19 ................................................................................................... 258 Practice 19-1: Managing Space for the Database ............................................... 259 Practices for Lesson 20 ................................................................................................... 260 Practice 20-1: Duplicating a Database................................................................ 261

Oracle Database 11g: Administration Workshop II A - 3

Practices for Lesson 1

The paper practices for this lesson are embedded in the lesson itself, to facilitate reviewing the database architecture for yourself and in class. Below are possible answers.

Oracle Database 11g: Administration Workshop II A - 4

Practice 1-1: Reviewing the Database Architecture


For page 1-3: Naming the Core Components of an Oracle Database Server 1) The two main components of a basic Oracle Database system: instance and database. 2) The Instance consists of memory structures and background processes. 3) The three major structures in Oracle Database server architecture are: memory structures, process structures and storage structures. 4) A session is a connection between the user login and the database instance. 5) The graphic on slide 1-4 is the answer to the task on slide 1-3 For page 1-7: Naming the Memory Structures of an Oracle Database 1) Which are the components of the PGA: stack space and user global area. 2) Name the main components of the SGA: Shared pool Database buffer cache Redo log buffer Large pool Java pool Streams pool Keep buffer pool Recycle buffer pool nK buffer pool

3) The graphic on slide 1-8 is the answer to the task on slide 1-7. For page 1-14: Adding Process Names 1) The DBWn process writes the dirty buffers to the data files. 2) The LGWR process writes the redo entries to the online redo log files. 3) The CKPT process writes checkpoint information in the control file and each data file header. 4) The SMON process performs recovery on instance startup. 5) The PMON process performs process recovery when a user process fails. 6) The RECO process resolves in-doubt distributed transactions. 7) The ARCn processes copy redo log files to a designated storage device.

Oracle Database 11g: Administration Workshop II A - 5

Practices for Lesson 2


General Practice Note: To reduce clutter in the output, product banners, space lines and other repeating information is only shown when they first appear. Later, they are removed to not distract from the essence of a practice.

Practice 2-1: Configuring ARCHIVELOG Mode


In this practice, you configure your database to archive redo logs before reusing them. 1) Set up the environment for the ORCL database, using the oraenv script, and enter orcl when prompted for ORACLE_SID. If it is already set up for orcl (that is, you see orcl in the brackets), press Enter. Note: This command is a period, followed by a space, and then the oraenv script name.
$ . oraenv ORACLE_SID = [orcl] ? orcl The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle

2) Use labs as your working directory. Unless otherwise indicated, always work from that directory.
$ cd ~/labs

3) Determine the archive mode your database is running in now.


$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Tue Jul 21 14:32:29 2009 Copyright (c) 1982, 2009, Oracle. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> archive log list Database log mode Automatic archival Archive destination Oldest online log sequence Current log sequence SQL>

No Archive Mode Disabled USE_DB_RECOVERY_FILE_DEST 6 8

Note that it is running in NOARCHIVELOG mode.

Oracle Database 11g: Administration Workshop II A - 6

Practice 2-1: Configuring ARCHIVELOG Mode (continued)


4) Because you can change the ARCHIVELOG mode only when the database is mounted, shut down the database.
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down.

5) Mount the database.


SQL> startup mount ORACLE instance started. Total System Global Area Fixed Size Variable Size Database Buffers Redo Buffers Database mounted. SQL> 481259520 1337324 339740692 134217728 5963776 bytes bytes bytes bytes bytes

6) Alter the database to use ARCHIVELOG mode.


SQL> alter database archivelog; Database altered. SQL>

7) Open the database.


SQL> alter database open; Database altered. SQL>

Oracle Database 11g: Administration Workshop II A - 7

Practice 2-2: Resizing the Flash Recovery Area


In this practice, you enlarge the Flash Recovery Area. 1) Determine how big the Flash Recovery Area is now.
SQL> show parameter recovery_file_dest_size NAME TYPE VALUE ------------------------------------ ----------- ------------db_recovery_file_dest_size big integer 4062M SQL>

Note that it is 4062 MB or 4 GB in size. 2) How big could the Flash Recovery Area be? a) Determine where the Flash Recovery Area is located.
SQL> show parameter recovery_file_dest NAME -----------------------------------db_recovery_file_dest db_recovery_file_dest_size SQL> TYPE ----------string big integer VALUE ------------+FRA 4062

Note that the Flash Recovery Area is in the FRA disk group. Do not exit from your SQL*Plus session. 3) Use the https://<hostname>:1158/em URL to log into Enterprise Manager, as the SYS user with the oracle_4U password, and connect as SYSDBA. Note: The first time that you are using a newly configured machine, you may be asked to add a security exception. The exact formulation and number of pages depends on your web browser. Follow the prompts and add the exception in the training environment. Note 2: Also if Enterprise Manager shows, that the database is down, wait a minute and refresh the page. (This can occur due to the time intervals in which the database agent works.) 4) On the database home page, click the +ASM_<hostname> link.

Oracle Database 11g: Administration Workshop II A - 8

Practice 2-2: Resizing the Flash Recovery Area (continued)

5) Click the Disk Groups tab.

6) If prompted for ASM login credentials, enter sys as username and oracle_4U as password. Connect as SYSASM, click Save as Preferred Credential, and then click Login.

7) When the disk group list appears, note the Usable Free column for the FRA disk group.

Oracle Database 11g: Administration Workshop II A - 9

Practice 2-2: Resizing the Flash Recovery Area (continued)

Note that the FRA disk group has enough usable free space to enlarge the Flash Recovery Area considerably, although your displayed values may be a little different. 8) Change the Flash Recovery Area size to 6 GB. a) Navigate to Database > Availability > Recovery Settings and change the Flash Recovery Area Size to 6 GB.

b) Click Show SQL, and note the SQL that will be run. This is important to know because if the Flash Recovery Area is having sizing problems, you may not be able to run Enterprise Manager to change it.
ALTER SYSTEM SET db_recovery_file_dest_size = 6442450944 SCOPE=BOTH

c) Click Return, and then click Apply.

Oracle Database 11g: Administration Workshop II A - 10

Practice 2-2: Resizing the Flash Recovery Area (continued)


9) Verify the size of the Flash Recovery Area by using SQL*Plus. Then exit your SQL*Plus session.
SQL> show parameter recovery_file_dest_size NAME TYPE VALUE ------------------------------------ ----------- ------------db_recovery_file_dest_size big integer 6G SQL> exit Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options

Oracle Database 11g: Administration Workshop II A - 11

Practice 2-3: Verifying the Backup Destination


In this practice, you test the backup destination to see where backups are written. Use the oraenv script to ensure you are still using the orcl instance in your terminal session.
$ . oraenv ORACLE_SID = [orcl] ? orcl

1) Start RMAN.
$ rman target / Recovery Manager: Release 11.2.0.1.0 - Production on Tue Jul 21 14:52:20 2009 Copyright (c) 1982, 2009, Oracle and/or its affiliates. rights reserved. connected to target database: ORCL (DBID=1220535480) RMAN> All

2) See if the control files are automatically backed up.


RMAN> show CONTROLFILE AUTOBACKUP; using target database control file instead of recovery catalog RMAN configuration parameters for database with db_unique_name ORCL are: CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default RMAN>

Note that automatic backup is not enabled. 3) Configure RMAN to automatically back up the control file when any backups are done.
RMAN> configure controlfile autobackup on; new RMAN configuration parameters: CONFIGURE CONTROLFILE AUTOBACKUP ON; new RMAN configuration parameters are successfully stored RMAN>

4) List the database files in your schema, to understand which file you back up in the next task.
RMAN> report schema; Report of database schema for database with db_unique_name ORCL List of Permanent Datafiles Oracle Database 11g: Administration Workshop II A - 12

Practice 2-3: Verifying the Backup Destination (continued)


=========================== File Size(MB) Tablespace RB segs Datafile Name ---- -------- -------------------- ------- ----------------------1 680 SYSTEM YES +DATA/orcl/datafile/system.256.692754557 2 590 SYSAUX NO +DATA/orcl/datafile/sysaux.257.692754559 3 100 UNDOTBS1 YES +DATA/orcl/datafile/undotbs1.258.692754561 4 5 USERS NO +DATA/orcl/datafile/users.259.692754561 5 100 EXAMPLE NO +DATA/orcl/datafile/example.265.692754837 List of Temporary Files ======================= File Size(MB) Tablespace Maxsize(MB) Tempfile Name ---- -------- -------------- ----------- --------------------1 28 TEMP 32767 +DATA/orcl/temp01.dbf RMAN>

5) Which tablespace is stored in file 5? Answer: The EXAMPLE tablespace 6) Take a backup of data file 5, and note where the backup is written, then exit.
RMAN> backup datafile 5; Starting backup at 21-JUL-09 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=55 device type=DISK channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00005 name=+DATA/orcl/datafile/example.265.692754837 channel ORA_DISK_1: starting piece 1 at 21-JUL-09 channel ORA_DISK_1: finished piece 1 at 21-JUL-09 piece handle=+FRA/orcl/backupset/2009_07_21/nnndf0_tag20090721t14535 8_0.260.692808839 tag=TAG20090721T145358 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:15

Oracle Database 11g: Administration Workshop II A - 13

Practice 2-3: Verifying the Backup Destination (continued)


Finished backup at 21-JUL-09 Starting Control File and SPFILE Autobackup at 21-JUL-09 piece handle=+FRA/orcl/autobackup/2009_07_21/s_692808854.261.6928088 57 comment=NONE Finished Control File and SPFILE Autobackup at 21-JUL-09 RMAN> RMAN> exit

Note that the backup file is written to the FRA.

Oracle Database 11g: Administration Workshop II A - 14

Practice 2-4: Configuring the Retention Policy


In this practice, you change the retention policy for backups. Note that the default retention policy in Oracle Database 11g Release 2 is already set to redundancy 1. So this practice is for training purposes only. 1) Use the oraenv script to ensure that you are still using the ORCL instance in your terminal session.
$ . oraenv ORACLE_SID = [orcl] ? orcl

2) Return to the RMAN session (or if you closed it, start a new one) and show the current retention policy setting.
$ rman target / RMAN> show retention policy; RMAN configuration parameters for database with db_unique_name ORCL are: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default RMAN>

3) If your redundancy is 1, go to step 5 and exit. If your redundancy had another value, change it to ensure that one copy of each file is backed up.
RMAN> configure retention policy to redundancy 1; old RMAN configuration parameters: CONFIGURE RETENTION POLICY TO NONE; new RMAN configuration parameters: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; new RMAN configuration parameters are successfully stored RMAN>

4) Check the retention policy setting again.


RMAN> show retention policy; RMAN configuration parameters for database with db_unique_name ORCL are: CONFIGURE RETENTION POLICY TO REDUNDANCY 1;

5) Exit RMAN.
RMAN> exit Recovery Manager complete.

Oracle Database 11g: Administration Workshop II A - 15

Practices for Lesson 3


Practice 3-1: Creating a Recovery Catalog
In this practice, you create a recovery catalog. 1) Use DBCA to start the process of creating a recovery catalog database.
$ dbca

2) On the Welcome page, click Next. 3) On the Operations page, select the Create a Database option, and then click Next. 4) On the Database Templates page, leave the default of General Purpose or Transaction Processing, and then click Next. 5) On the Database Identification page, enter the name of the recovery catalog database. Use rcat.example.com as the Global Database Name. Then click Next.

6) On the Management Options page, deselect the Configure Enterprise Manager option, and then click the Automatic Maintenance Tasks tab.

7) On the Automatic Maintenance Tasks page, deselect Enable automatic maintenance tasks and then click Next.

Oracle Database 11g: Administration Workshop II A - 16

Practice 3-1: Creating a Recovery Catalog (continued)

8) On the Database Credentials page, select the option Use the Same Administrative Password for All Accounts. Then enter oracle_4U in the password fields and click Next.

9) On the Database File Locations Page, select Automatic Storage Management (ASM) as Storage Type. Click Use Common Location for All Database Files and then use the Browse button to select the +DATA disk group, and click OK.

Oracle Database 11g: Administration Workshop II A - 17

Practice 3-1: Creating a Recovery Catalog (continued)

10) Then click Next. 11) On the Recovery Configuration page, select Specify Flash Recovery Area, use the Browse button to select the +FRA diskgroup (click OK) and ensure that the Flash Recovery Area Size is 4062 M Bytes. Then click Next.

12) On the Database Content page, confirm that the Sample Schemas option is not selected, and then click Next.

Oracle Database 11g: Administration Workshop II A - 18

Practice 3-1: Creating a Recovery Catalog (continued)

13) On the Initialization Parameter page, set the memory size to 303 MB, click Use Automatic Memory Management, and then click the Character Sets tab.

14) Click Use Unicode (AL32UTF8) and then click Next.

Oracle Database 11g: Administration Workshop II A - 19

Practice 3-1: Creating a Recovery Catalog (continued)

15) If the Security Settings page appears, keep the defaults, and then click Next. 16) On the Database Storage page, review the configuration, and then click Next.

17) On the Creation Options page, make sure that Create Database is the only option selected, and then click Finish.

Oracle Database 11g: Administration Workshop II A - 20

Practice 3-1: Creating a Recovery Catalog (continued)

18) Review the Confirmation page, and then click OK to start the database creation process.

Oracle Database 11g: Administration Workshop II A - 21

Practice 3-1: Creating a Recovery Catalog (continued)

19) The Database Creation Assistant now creates the database.

Oracle Database 11g: Administration Workshop II A - 22

Practice 3-1: Creating a Recovery Catalog (continued)

20) When the Database Configuration Assistant finishes running, view the final page, and then click Exit.

Oracle Database 11g: Administration Workshop II A - 23

Practice 3-2: Creating the Recovery Catalog Owner


In this practice, you configure the recovery catalog database with a user ID and appropriate privileges, and register a database. 1) Use SQL*Plus to configure the recovery catalog database. Connect to it as SYS to the RCAT database.
$ sqlplus sys as sysdba Enter password: oracle_4U@rcat SQL> <<<not displayed

2) Create a tablespace named RCAT to hold the repository data. Make it 15 MB in size.
SQL> CREATE TABLESPACE rcat DATAFILE '+DATA/rcat01.dbf' SIZE 15M; Tablespace created. SQL>

3) Create a user who will own the recovery catalog data. Name the user RCATOWNER. The default tablespace should be the RCAT tablespace, and the user should have unlimited quota on that tablespace.
SQL> CREATE USER rcatowner IDENTIFIED BY "oracle_4U" 2 DEFAULT TABLESPACE rcat QUOTA unlimited on rcat; User created. SQL>

4) Grant the RECOVERY_CATALOG_OWNER role to the RCATOWNER user.


SQL> GRANT recovery_catalog_owner to rcatowner; Grant succeeded. SQL> exit

Oracle Database 11g: Administration Workshop II A - 24

Practice 3-3: Creating the Recovery Catalog


In this practice, you create the recovery catalog inside the recovery catalog database you have prepared. 1) Connect to the recovery catalog database using RMAN. Log in as the recovery catalog owner you just created.
$ rman catalog rcatowner@rcat Recovery Manager: Release 11.2.0.1.0 - Production on Fri Jul 10 19:54:04 2009 Copyright (c) 1982, 2009, Oracle and/or its affiliates. rights reserved. All

recovery catalog database Password:oracle_4U <<<not displayed connected to recovery catalog database RMAN>

2) Create the recovery catalog. This command may take several minutes to complete.
RMAN> create catalog; recovery catalog created RMAN> exit

Oracle Database 11g: Administration Workshop II A - 25

Practice 3-4: Registering a Database in the Recovery Catalog


In this practice, you register the ORCL database in the recovery catalog that you have just created. 1) Set up the environment for the ORCL database.
$ . oraenv ORACLE_SID = [orcl] ? orcl

2) Connect to the target database (to be registered) and the recovery catalog database using RMAN.
$ rman target / catalog rcatowner@rcat Recovery Manager: Release 11.2.0.1.0 - Production on Tue Jul 21 15:30:32 2009 Copyright (c) 1982, 2009, Oracle and/or its affiliates. rights reserved. All

connected to target database: ORCL (DBID=1220535480) recovery catalog database Password:oracle_4U <<<not displayed connected to recovery catalog database RMAN>

3) Register the database in the catalog.


RMAN> register database; database registered in recovery catalog starting full resync of recovery catalog full resync complete RMAN> exit

4) Register the recovery catalog to be used by Enterprise Manager. a) In EM, navigate to Availability > Recovery Catalog Settings. b) Click Add Recovery Catalog.

c) Enter the following information, then click Next:

Oracle Database 11g: Administration Workshop II A - 26

Practice 3-4: Registering a Database in the Recovery Catalog (continued)


Host: Port: SID: Recovery Catalog Username: Recovery Catalog Password: <your_hostname> 1521 rcat rcatowner oracle_4U

d) On the Review page, click Finish.

e) Back on the Recovery Catalog Settings page, select Use Recovery Catalog. Make sure that the recovery catalog you just registered is selected in the drop-down list, and enter the following values: Recovery Catalog Username: Recovery Catalog Password: Username: Password: oracle oracle rcatowner oracle_4U

Oracle Database 11g: Administration Workshop II A - 27

Practice 3-4: Registering a Database in the Recovery Catalog (continued)

f) Click Save as Preferred Credential and then click OK.

Oracle Database 11g: Administration Workshop II A - 28

Practice 3-5: Backing up the Recovery Catalog


In this practice, you configure the retention policy for the recovery catalog and back up your recovery catalog itself. 1) Set up the environment for the ORCL database.
$ . oraenv ORACLE_SID = [orcl] ? orcl

2) Start RMAN, use the recovery catalog database as the target, with no catalog specified.
$ rman target sys@rcat target database Password: oracle_4U <<< not displayed connected to target database: RCAT (DBID= 464959795) RMAN>

3) Make sure that the retention policy for the recovery catalog is set to redundancy greater than 1. If it is not, set it to at least 2.
RMAN> show retention policy; using target database control file instead of recovery catalog RMAN configuration parameters for database with db_unique_name RCAT are: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default RMAN> configure retention policy to redundancy 2; new RMAN configuration parameters: CONFIGURE RETENTION POLICY TO REDUNDANCY 2; new RMAN configuration parameters are successfully stored RMAN>

4) Try to back up the database.


RMAN> backup database; Starting backup at 18-JUL-07 ORACLE error from target database: ORA-00258: manual archiving in NOARCHIVELOG mode must identify log using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=137 device type=DISK specification does not match any archived log in the recovery catalog backup cancelled because all files were skipped

Oracle Database 11g: Administration Workshop II A - 29

Practice 3-5: Backing up the Recovery Catalog (continued)


Finished backup at 18-JUL-07 Starting backup at 18-JUL-07 using channel ORA_DISK_1 channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of backup plus archivelog command at 07/18/2007 22:55:45 ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode RMAN>

Note that you cannot back up an open database that is not in ARCHIVELOG mode. The recovery catalog database should be run in ARCHIVELOG mode for maximum availability. 5) Exit RMAN.
RMAN> exit

6) First, set up the environment for the RCAT database and then run the rcat_to_archivelog.sh script to change the recovery catalog database to run in ARCHIVELOG mode.
$ . oraenv ORACLE_SID = [orcl] ? rcat $ cd ~/labs $ ./rcat_to_archivelog.sh Database closed. Database dismounted. ORACLE instance shut down. ORACLE instance started. Total System Global Area Fixed Size Variable Size Database Buffers Redo Buffers Database mounted. Database altered. Database altered. $ 263639040 1299164 230690084 25165824 6483968 bytes bytes bytes bytes bytes

Oracle Database 11g: Administration Workshop II A - 30

Practice 3-5: Backing up the Recovery Catalog (continued)


7) Set up the environment for the ORCL database.
$ . oraenv ORACLE_SID = [rcat] ? orcl

8) Log in to RMAN again, as in the preceding step.


$ rman target sys@rcat target database Password: oracle_4U <<< not displayed connected to target database: RCAT (DBID= 464959795) RMAN>

9) Back up the recovery catalog database. This time the operation should be successful.
RMAN> backup database; Starting backup at 21-JUL-09 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=40 device type=DISK channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00001 name=+DATA/rcat/system01.dbf input datafile file number=00002 name=+DATA/rcat/sysaux01.dbf input datafile file number=00003 name=+DATA/rcat/undotbs01.dbf input datafile file number=00005 name=+DATA/rcat01.dbf input datafile file number=00004 name=+DATA/rcat/users01.dbf channel ORA_DISK_1: starting piece 1 at 21-JUL-09 channel ORA_DISK_1: finished piece 1 at 21-JUL-09 piece handle=+FRA/rcat/backupset/2009_07_21/nnndf0_tag20090721t15532 5_0.263.692812405 tag=TAG20090721T155325 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:02:37 channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set including current control file in backup set including current SPFILE in backup set channel ORA_DISK_1: starting piece 1 at 21-JUL-09 channel ORA_DISK_1: finished piece 1 at 21-JUL-09 piece handle=+FRA/rcat/backupset/2009_07_21/ncsnf0_tag20090721t15532 5_0.264.692812569 tag=TAG20090721T155325 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03 Finished backup at 21-JUL-09 RMAN> exit

Oracle Database 11g: Administration Workshop II A - 31

Practice 3-5: Backing up the Recovery Catalog (continued)


10) Run the disable_asynch_io.sh script to disable asynchronous input/output (I/O). After altering the system, the database is restarted. This improves performance on the following labs:
$ ~/labs/disable_asynch_io.sh Setting up ORCL environment. ORACLE_SID = [orcl] ? The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle SQL*Plus: Release 11.2.0.1.0 Production on Tue Jul 21 15:58:51 2009 Copyright (c) 1982, 2009, Oracle. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> System altered. SQL> System altered. SQL> Database closed. Database dismounted. ORACLE instance shut down. SQL> ORACLE instance started. Total System Global Area 481259520 bytes Fixed Size 1337324 bytes Variable Size 360712212 bytes Database Buffers 113246208 bytes Redo Buffers 5963776 bytes Database mounted. Database opened. SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options

Oracle Database 11g: Administration Workshop II A - 32

Practices for Lesson 4


Practice 4-1: Setting the Date and Time Format for RMAN
In this practice, you set the date/time format that RMAN uses for displaying timestamps. 1) Set the NLS_LANG and NLS_DATE_FORMAT variables such that RMAN includes time information in any timestamp values. Add the following two lines to the ~oracle/.bashrc file. Then exit all of your terminal windows. This ensures that when you create new ones, these settings will be in effect.
export NLS_LANG=american_america.al32utf8 export NLS_DATE_FORMAT="yyyy-mm-dd:hh24:mi:ss"

2) Start a new terminal window, and verify the settings by starting RMAN and listing the backups of the recovery catalog database. a) Set up the environment for the ORCL database.
$ . oraenv ORACLE_SID = [orcl] ? orcl

b) Log in to RMAN.
$ rman target sys@rcat target database Password: oracle_4U <<< not displayed connected to target database: RCAT (DBID= 464959795)

c) List the backups, and note the timestamp format.


RMAN> list backup; using target database control file instead of recovery catalog List of Backup Sets =================== BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ -----------------1 Full 9.36M DISK 00:00:06 2009-0721:15:42:05 BP Key: 1 Status: AVAILABLE Compressed: NO Tag: TAG20090721T154159 Piece Name: +FRA/rcat/backupset/2009_07_21/ncsnf0_tag20090721t154159_0.262 .692811721 SPFILE Included: Modification time: 2009-07-21:15:32:47 SPFILE db_unique_name: RCAT

Oracle Database 11g: Administration Workshop II A - 33

Practice 4-1: Setting the Date and Time Format for RMAN (continued)
Control File Included: Ckp SCN: 803770 07-21:15:41:59 . . . RMAN> Ckp time: 2009-

Note: Because the output of the RMAN commands can be quite long, consider using the RMAN SPOOL LOG command to direct the output to your specified file.

Oracle Database 11g: Administration Workshop II A - 34

Practice 4-2: Enabling Control File Autobackup


In this practice, you configure RMAN to back up the control file and SPFILE each time it takes a backup of anything in the RCAT database. 1) In the same recovery catalog RMAN session, make sure that control file autobackup is enabled.
RMAN> show controlfile autobackup; RMAN configuration parameters for database with db_unique_name RCAT are: CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default RMAN>

2) Enable control file autobackup.


RMAN> configure controlfile autobackup on; new RMAN configuration parameters: CONFIGURE CONTROLFILE AUTOBACKUP ON; new RMAN configuration parameters are successfully stored RMAN>

3) Verify that it is enabled by backing up the archive logs for the recovery catalog. Then exit RMAN.
RMAN> backup archivelog all; Starting backup at 2009-07-21:16:22:10 current log archived allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=47 device type=DISK channel ORA_DISK_1: starting archived log backup set channel ORA_DISK_1: specifying archived log(s) in backup set input archived log thread=1 sequence=5 RECID=1 STAMP=692814135 channel ORA_DISK_1: starting piece 1 at 2009-07-21:16:22:18 channel ORA_DISK_1: finished piece 1 at 2009-07-21:16:22:21 piece handle=+FRA/rcat/backupset/2009_07_21/annnf0_tag20090721t16221 6_0.266.692814139 tag=TAG20090721T162216 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:04 Finished backup at 2009-07-21:16:22:21 Starting Control File and SPFILE Autobackup at 2009-0721:16:22:21 piece handle=+FRA/rcat/autobackup/2009_07_21/s_692814141.267.6928141 45 comment=NONE Finished Control File and SPFILE Autobackup at 2009-0721:16:22:28

Oracle Database 11g: Administration Workshop II A - 35

Practice 4-2: Enabling Control File Autobackup (continued)


RMAN> exit

Note that the control file and SPFILE are automatically backed up now.

Oracle Database 11g: Administration Workshop II A - 36

Practice 4-3: Configuring Devices for Backup


In this practice, you configure a tape device for use in making backups. Note: This channel definition is used in the RMAN monitoring and tuning practice. Therefore, steps 1-4 are mandatory; step 5 (performing a backup) is recommended, but optional. 1) Make sure the SID variable is set to ORCL.
$ . oraenv ORACLE_SID = [orcl] ? orcl

2) Start RMAN by connecting to the ORCL as the target database and using the recovery catalog database.
$ rman target / catalog rcatowner@rcat recovery catalog database Password: oracle_4U <<<not displayed RMAN>

3) Show all configuration settings to see whether there are any tape devices defined.
RMAN> show all; RMAN configuration parameters for database with db_unique_name ORCL are: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default CONFIGURE BACKUP OPTIMIZATION OFF; # default CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE MAXSETSIZE TO UNLIMITED; # default CONFIGURE ENCRYPTION FOR DATABASE OFF; # default CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_orcl.f'; # default RMAN>

Note that there are no tape devices. 4) Define a channel for a tape device that uses the test interface. This actually writes to disk in the /tape directory.

Oracle Database 11g: Administration Workshop II A - 37

Practice 4-3: Configuring Devices for Backup (continued)


RMAN> configure channel device type sbt 2> parms='SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=/tape)'; new RMAN configuration parameters: CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=/tape)'; new RMAN configuration parameters are successfully stored starting full resync of recovery catalog full resync complete RMAN>

5) Perform a backup to the tape device to make sure it works. Back up the USERS tablespace. Then exit RMAN.
RMAN> backup device type sbt tablespace users; Starting backup at 2009-07-21:16:32:09 allocated channel: ORA_SBT_TAPE_1 channel ORA_SBT_TAPE_1: SID=53 device type=SBT_TAPE channel ORA_SBT_TAPE_1: WARNING: Oracle Test Disk API channel ORA_SBT_TAPE_1: starting full datafile backup set channel ORA_SBT_TAPE_1: specifying datafile(s) in backup set input datafile file number=00004 name=+DATA/orcl/datafile/users.259.692754561 channel ORA_SBT_TAPE_1: starting piece 1 at 2009-0721:16:32:10 channel ORA_SBT_TAPE_1: finished piece 1 at 2009-0721:16:32:11 piece handle=05kkn0sa_1_1 tag=TAG20090721T163210 comment=API Version 2.0,MMS Version 8.1.3.0 channel ORA_SBT_TAPE_1: backup set complete, elapsed time: 00:00:01 Finished backup at 2009-07-21:16:32:11 Starting Control File and SPFILE Autobackup at 2009-0721:16:32:11 piece handle=c-1220535480-20090721-02 comment=API Version 2.0,MMS Version 8.1.3.0 Finished Control File and SPFILE Autobackup at 2009-0721:16:32:16 RMAN> exit

Note that it uses a channel called ORA_SBT_TAPE_1 to perform the backup.

Oracle Database 11g: Administration Workshop II A - 38

Practices for Lesson 5

Practice 5-1: Creating Fast Incremental Backups


In this practice, you enable block change tracking so that you can make incremental backups more quickly. 1) Use Enterprise Manager Database Control to configure backup optimization and enable block change tracking. Allow a default block change tracking file to be used. a) From the Database home page of EM, navigate to Availability > Backup Settings > Policy, and enable backup optimization and block change tracking.

b) Click OK. c) If you see the following error, you have not entered the operating system credentials. Continue with the following steps if that is the case.

d) Scroll to the bottom of the page, and enter oracle as username and oracle as password. Also, select the option to save this as the preferred credential.

Oracle Database 11g: Administration Workshop II A - 39

Practice 5-1: Creating Fast Incremental Backups (continued)

e) Click OK. 2) Make sure that the ORACLE_SID variable is set to ORCL.
$ . oraenv ORACLE_SID = [orcl] ? orcl

3) Log in to RMAN and create an incremental level 0 backup.


$ rman target / catalog rcatowner@rcat recovery catalog database Password: oracle_4U <<<not displayed RMAN> backup incremental level 0 database plus archivelog; starting full resync of recovery catalog full resync complete . . . piece handle=+FRA/orcl/backupset/2009_07_21/annnf0_tag20090721t19055 7_0.273.692823957 tag=TAG20090721T190557 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03 Finished backup at 21-JUL-09 Starting Control File and SPFILE Autobackup at 21-JUL-09 piece handle=+FRA/orcl/autobackup/2009_07_21/s_692823962.274.6928239 65 comment=NONE Finished Control File and SPFILE Autobackup at 21-JUL-09 RMAN>

4) Now that you have a level 0 incremental backup, you can take advantage of block change tracking to make fast incremental backups. Take a level 1 incremental backup.
RMAN> backup incremental level 1 database plus archivelog; Starting backup at 21-JUL-09 current log archived using channel ORA_DISK_1 . . Oracle Database 11g: Administration Workshop II A - 40

Practice 5-1: Creating Fast Incremental Backups (continued)


. Finished Control File and SPFILE Autobackup at 21-JUL-09 RMAN>

5) In another terminal window, make sure you are at the ~/labs directory.
$ cd ~/labs

6) Review and execute the query_block_count.sh script to query V$BACKUP_DATAFILE to see how many of the blocks were read for creating the level 1 incremental backup.
$ cat query_block_count.sh export ORACLE_SID=orcl sqlplus / as sysdba <<-EOI select file#, avg(datafile_blocks), avg(blocks_read), avg(blocks_read/datafile_blocks) * 100 as PCT_READ_FOR_BACKUP, avg(blocks) from v\$backup_datafile where used_change_tracking = 'YES' and incremental_level > 0 group by file#; quit EOI $./query_block_count.sh SQL> 2 3 4 5 6 7 8 FILE# AVG(DATAFILE_BLOCKS) AVG(BLOCKS_READ) PCT_READ_FOR_BACKUP AVG(BLOCKS) ---------- -------------------- ---------------- ------------------ ----------1 87040 173 .198759191 34 2 75520 957 1.26721398 344 5 12800 1 .0078125 1 4 640 1 .15625 1 3 12800 311 2.4296875 96 $

Note that the percentage of blocks read for making the backup is very low in most cases, and sometimes very close to zero.

Oracle Database 11g: Administration Workshop II A - 41

Practice 5-2: Cross-Checking Backups


In this practice, you cross-check backups against the recovery catalog, identifying and deleting any backups that are obsolete. 1) Make sure that you are at the ~/labs directory, and that the ORACLE_SID variable is set to ORCL.
$ cd ~/labs $ . oraenv ORACLE_SID = [orcl] ? orcl

2) Use the RMAN session from the previous practice or start RMAN. Make sure that you connect to both your target database and the recovery catalog database.
$ rman target / catalog rcatowner@rcat connected to target database: ORCL (DBID=1220535480) recovery catalog database Password: oracle_4U <<<not displayed connected to recovery catalog database RMAN>

3) List backups of data file 5, noting the entry corresponding to the example data file.
RMAN> list backup of datafile 5; BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ ------------------37 Full 68.99M DISK 00:00:13 2009-07-21:14:54:11 BP Key: 40 Status: AVAILABLE Compressed: NO Tag: TAG20090721T145358 Piece Name: +FRA/orcl/backupset/2009_07_21/nnndf0_tag20090721t145358_0.260.692808839 List of Datafiles in backup set 37 File LV Type Ckp SCN Ckp Time Name ---- -- ---- ---------- ------------------- ---5 Full 908595 2009-07-21:14:53:59 +DATA/orcl/datafile/example.265.692754837 BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ ------------------172 Incr 0 1.07G DISK 00:02:47 2009-07-21:19:05:44 BP Key: 176 Status: AVAILABLE Compressed: NO Tag: TAG20090721T190255 Piece Name: +FRA/orcl/backupset/2009_07_21/nnndn0_tag20090721t190255_0.271.692823777 List of Datafiles in backup set 172 File LV Type Ckp SCN Ckp Time Name ---- -- ---- ---------- ------------------- ---5 0 Incr 924152 2009-07-21:19:02:57 +DATA/orcl/datafile/example.265.692754837 BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ ------------------237 Incr 1 3.74M DISK 00:00:02 2009-07-21:19:10:35

Oracle Database 11g: Administration Workshop II A - 42

Practice 5-2: Cross-Checking Backups (continued)


BP Key: 241 Status: AVAILABLE Compressed: NO Tag: TAG20090721T191031 Piece Name: +FRA/orcl/backupset/2009_07_21/nnndn1_tag20090721t191031_0.277.692824233 List of Datafiles in backup set 237 File LV Type Ckp SCN Ckp Time Name ---- -- ---- ---------- ------------------- ---5 1 Incr 924953 2009-07-21:19:10:33 +DATA/orcl/datafile/example.265.692754837 RMAN>

Take note of the only backup that is a full backup of data file 5. Also note that the Piece Name is the name of the ASM file where the backup file resides. 4) In an OS terminal window, delete the backup set file. Start a separate terminal session, so the RMAN session can stay connected. Use the +ASM environment variables, review and execute the rm_asm_file.sh script to do this. Supply YOUR full Piece Name as an argument to the script.
$ . oraenv ORACLE_SID = [orcl] ? +ASM $ cat rm_asm_file.sh export ORACLE_SID=+ASM asmcmd <<-EOI rm -f $1 exit EOI Exit ./rm_asm_file.sh \
> +FRA/orcl/backupset/2009_07_21/nnndf0_tag20090721t145358_0.260.692808839

ASMCMD> ASMCMD> $ $

5) In your still connected RMAN session, list the backups again, and look for the backup that corresponds to the example data file.
RMAN> list backup of datafile 5;

List of Backup Sets =================== BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ ------------------37 Full 68.99M DISK 00:00:13 2009-07-21:14:54:11 BP Key: 40 Status: AVAILABLE Compressed: NO Tag: TAG20090721T145358 Piece Name: +FRA/orcl/backupset/2009_07_21/nnndf0_tag20090721t145358_0.260.692808839 List of Datafiles in backup set 37 File LV Type Ckp SCN Ckp Time Name ---- -- ---- ---------- ------------------- ----

Oracle Database 11g: Administration Workshop II A - 43

Practice 5-2: Cross-Checking Backups (continued)


5 Full 908595 2009-07-21:14:53:59 +DATA/orcl/datafile/example.265.692754837 BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ ------------------172 Incr 0 1.07G DISK 00:02:47 2009-07-21:19:05:44 BP Key: 176 Status: AVAILABLE Compressed: NO Tag: TAG20090721T190255 Piece Name: +FRA/orcl/backupset/2009_07_21/nnndn0_tag20090721t190255_0.271.692823777 List of Datafiles in backup set 172 File LV Type Ckp SCN Ckp Time Name ---- -- ---- ---------- ------------------- ---5 0 Incr 924152 2009-07-21:19:02:57 +DATA/orcl/datafile/example.265.692754837 BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ ------------------237 Incr 1 3.74M DISK 00:00:02 2009-07-21:19:10:35 BP Key: 241 Status: AVAILABLE Compressed: NO Tag: TAG20090721T191031 Piece Name: +FRA/orcl/backupset/2009_07_21/nnndn1_tag20090721t191031_0.277.692824233 List of Datafiles in backup set 237 File LV Type Ckp SCN Ckp Time Name ---- -- ---- ---------- ------------------- ---5 1 Incr 924953 2009-07-21:19:10:33 +DATA/orcl/datafile/example.265.692754837 RMAN>

Note that the backups are still listed as before. That is because the repository is not aware of the fact that the file for the backup piece is missing. 6) Cross-check the backup sets to make the recovery catalog aware of the missing backup file.
RMAN> crosscheck backupset; allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=48 device type=DISK allocated channel: ORA_SBT_TAPE_1 channel ORA_SBT_TAPE_1: SID=57 device type=SBT_TAPE channel ORA_SBT_TAPE_1: WARNING: Oracle Test Disk API crosschecked backup piece: found to be 'EXPIRED' backup piece handle=+FRA/orcl/backupset/2009_07_21/nnndf0_tag20090721t14535 8_0.260.692808839 RECID=1 STAMP=692808839 crosschecked backup piece: found to be 'AVAILABLE'. . . . RMAN>

Note that the backup in question has expired.


Oracle Database 11g: Administration Workshop II A - 44

Practice 5-2: Cross-Checking Backups (continued)


7) Delete all the expired backup sets.
RMAN> delete expired backupset; using channel ORA_DISK_1 using channel ORA_SBT_TAPE_1 List of Backup Pieces BP Key BS Key Pc# Cp# Status Device Type Piece Name ------- ------- --- --- ----------- ----------- ---------40 37 1 1 EXPIRED DISK +FRA/orcl/backupset/2009_07_21/nnndf0_tag20090721t145358_0.260 .692808839 Do you really want to delete the above objects (enter YES or NO)? YES deleted backup piece backup piece handle=+FRA/orcl/backupset/2009_07_21/nnndf0_tag20090721t14535 8_0.260.692808839 RECID=1 STAMP=692808839 Deleted 1 EXPIRED objects RMAN>

8) List the backup sets again. See that the backup you just deleted is no longer listed.
RMAN> list backup of datafile 5;

List of Backup Sets ===================

BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ -----------------172 Incr 0 1.07G DISK 00:02:47 2009-0721:19:05:44 BP Key: 176 Status: AVAILABLE Compressed: NO Tag: TAG20090721T190255 Piece Name: +FRA/orcl/backupset/2009_07_21/nnndn0_tag20090721t190255_0.271 .692823777 List of Datafiles in backup set 172 File LV Type Ckp SCN Ckp Time Name ---- -- ---- ---------- ------------------- ---5 0 Incr 924152 2009-07-21:19:02:57 +DATA/orcl/datafile/example.265.692754837 BS Key Time Type LV Size Device Type Elapsed Time Completion

Oracle Database 11g: Administration Workshop II A - 45

Practice 5-2: Cross-Checking Backups (continued)


------- ---- -- ---------- ----------- ------------ -----------------237 Incr 1 3.74M DISK 00:00:02 2009-0721:19:10:35 BP Key: 241 Status: AVAILABLE Compressed: NO Tag: TAG20090721T191031 Piece Name: +FRA/orcl/backupset/2009_07_21/nnndn1_tag20090721t191031_0.277 .692824233 List of Datafiles in backup set 237 File LV Type Ckp SCN Ckp Time Name ---- -- ---- ---------- ------------------- ---5 1 Incr 924953 2009-07-21:19:10:33 +DATA/orcl/datafile/example.265.692754837 RMAN>

Oracle Database 11g: Administration Workshop II A - 46

Practice 5-3: Listing Backup Files and Creating Archival Backup


In this practice, you list backup files. 1) Continue to use the RMAN session from the previous practice, and generate a report of all the obsolete backup files.
RMAN> report obsolete; RMAN retention policy will be applied to the command RMAN retention policy is set to redundancy 1 Report of obsolete backups and copies Type Key Completion Time Filename/Handle -------------------- ------ ------------------ ------------------Backup Set 38 2009-07-21:14:54:16 Backup Piece 41 2009-07-21:14:54:16 +FRA/orcl/autobackup/2009_07_21/s_692808854.261.692808857 Backup Set 68 2009-07-21:16:29:17 Backup Piece 71 2009-07-21:16:29:17 03kkn0mt_1_1 Backup Set 77 2009-07-21:16:29:22 Backup Piece 79 2009-07-21:16:29:22 c-122053548020090721-01 Backup Set 93 2009-07-21:16:32:10 Backup Piece 96 2009-07-21:16:32:10 05kkn0sa_1_1 Archive Log 151 2009-07-21:17:49:04 +FRA/orcl/archivelog/2009_07_21/thread_1_seq_9.268.692819337 Backup Set 105 2009-07-21:16:32:14 Backup Piece 107 2009-07-21:16:32:14 c-122053548020090721-02 Archive Log 163 2009-07-21:19:02:49 +FRA/orcl/archivelog/2009_07_21/thread_1_seq_10.269.692823767 Backup Set 171 2009-07-21:19:02:53 Backup Piece 175 2009-07-21:19:02:53 +FRA/orcl/backupset/2009_07_21/annnf0_tag20090721t190251_0.270 .692823773 Backup Set 205 2009-07-21:19:06:06 Backup Piece 207 2009-07-21:19:06:06 +FRA/orcl/autobackup/2009_07_21/s_692823962.274.692823965 RMAN>

Your list of files might look different. - What can you deduce about these backup files, given that the retention policy is set to REDUNDANCY 1? 2) Which backups would be considered obsolete if the retention policy were set to redundancy of 2, instead of 1? Answer this without changing the retention policy.
RMAN> report obsolete redundancy 2; Report of obsolete backups and copies Type Key Completion Time Filename/Handle -------------------- ------ ------------------ --------------Backup Set 38 2009-07-21:14:54:16

Oracle Database 11g: Administration Workshop II A - 47

Practice 5-3: Listing Backup Files and Creating Archival Backup (continued)

Backup Piece 41 2009-07-21:14:54:16 +FRA/orcl/autobackup/2009_07_21/s_692808854.261.692808857 Backup Set 68 2009-07-21:16:29:17 Backup Piece 71 2009-07-21:16:29:17 03kkn0mt_1_1 Backup Set 77 2009-07-21:16:29:22 Backup Piece 79 2009-07-21:16:29:22 c-122053548020090721-01 Backup Set 105 2009-07-21:16:32:14 Backup Piece 107 2009-07-21:16:32:14 c-122053548020090721-02 RMAN>

Note that far fewer backups are obsolete in this hypothetical report. That is because with an increased redundancy, more of the backups are required. This command is run without affecting the retention policy. 3) Delete all obsolete backups.
RMAN> delete noprompt obsolete; RMAN retention policy will be applied to the command RMAN retention policy is set to redundancy 1 using channel ORA_DISK_1 using channel ORA_SBT_TAPE_1 Deleting the following obsolete backups and copies: Type Key Completion Time Filename/Handle -------------------- ------ ------------------ ------------------Backup Set 38 2009-07-21:14:54:16 Backup Piece 41 2009-07-21:14:54:16 +FRA/orcl/autobackup/2009_07_21/s_692808854.261.692808857 Backup Set 68 2009-07-21:16:29:17 Backup Piece 71 2009-07-21:16:29:17 03kkn0mt_1_1 Backup Set 77 2009-07-21:16:29:22 . . . deleted backup piece backup piece handle=05kkn0sa_1_1 RECID=5 STAMP=692814730 deleted backup piece backup piece handle=c-1220535480-20090721-02 RECID=6 STAMP=692814734 Deleted 4 objects RMAN>

Oracle Database 11g: Administration Workshop II A - 48

Practice 5-3: Listing Backup Files and Creating Archival Backup (continued)
Note: Your number of objects may be different, depending on repetitions of practice steps. 4) List the backup archivelog files that could be used to recover to a point in time one hour ago. Note: You may need to adjust the following SYSDATE expression to see some results that differ from the list command that does not use a SYSDATE qualifier at all. For example, try 'sysdate-05/60/24' to indicate 5 minutes ago.
RMAN> list backup of archivelog until time 'sysdate-1/24';

List of Backup Sets ===================

BS Key Size Device Type Elapsed Time Completion Time ------- ---------- ----------- ------------ -----------------191 1.05M DISK 00:00:01 2009-0721:19:05:58 BP Key: 197 Status: AVAILABLE Compressed: NO Tag: TAG20090721T190557 Piece Name: +FRA/orcl/backupset/2009_07_21/annnf0_tag20090721t190557_0.273 .692823957 List of Archived Logs in backup set 191 Thrd Seq Low SCN Low Time Next SCN Next Time ---- ------- ---------- ------------------- ---------- -------1 11 924126 2009-07-21:19:02:46 924627 200907-21:19:05:53 BS Key Size Device Type Elapsed Time Completion Time ------- ---------- ----------- ------------ -----------------236 277.00K DISK 00:00:01 2009-0721:19:10:29 BP Key: 240 Status: AVAILABLE Compressed: NO Tag: TAG20090721T191028 Piece Name: +FRA/orcl/backupset/2009_07_21/annnf0_tag20090721t191028_0.276 .692824229 List of Archived Logs in backup set 236 Thrd Seq Low SCN Low Time Time

Next SCN

Next

Oracle Database 11g: Administration Workshop II A - 49

Practice 5-3: Listing Backup Files and Creating Archival Backup (continued)
---- ------- ---------- ------------------- ---------- -------1 12 924627 2009-07-21:19:05:53 924928 200907-21:19:10:26 BS Key Size Device Type Elapsed Time Completion Time ------- ---------- ----------- ------------ -----------------258 7.50K DISK 00:00:01 2009-0721:19:10:39 BP Key: 264 Status: AVAILABLE Compressed: NO Tag: TAG20090721T191037 Piece Name: +FRA/orcl/backupset/2009_07_21/annnf0_tag20090721t191037_0.279 .692824239 List of Archived Logs in backup set 258 Thrd Seq Low SCN Low Time Next SCN Next Time ---- ------- ---------- ------------------- ---------- -------1 13 924928 2009-07-21:19:10:26 924960 200907-21:19:10:36 RMAN>

5) List the image copies of the single data file in the USERS tablespace. a) Report on the schema to find out which data file number belongs to the USERS tablespace.
RMAN> report schema; Report of database schema for database with db_unique_name ORCL List of Permanent Datafiles =========================== File Size(MB) Tablespace RB segs Datafile Name ---- -------- -------------------- ------- ----------------------1 680 SYSTEM YES +DATA/orcl/datafile/system.256.692754557 2 590 SYSAUX NO +DATA/orcl/datafile/sysaux.257.692754559 3 100 UNDOTBS1 YES +DATA/orcl/datafile/undotbs1.258.692754561 4 5 USERS NO +DATA/orcl/datafile/users.259.692754561

Oracle Database 11g: Administration Workshop II A - 50

Practice 5-3: Listing Backup Files and Creating Archival Backup (continued)
5 100 EXAMPLE NO +DATA/orcl/datafile/example.265.692754837 List of Temporary Files ======================= File Size(MB) Tablespace Maxsize(MB) Tempfile Name ---- -------- -------------------- ----------- ------------------1 28 TEMP 32767 +DATA/orcl/tempfile/temp.264.692754825 RMAN>

Note that the file in question is data file number 4. b) List any image copies of data file number 4.
RMAN> list copy of datafile 4; specification does not match any datafile copy in the repository RMAN>

Note that, in this case, there is no image copy of this file. 6) Delete any data file 4 image copies that exist. Note: You may not have any.
RMAN> delete copy of datafile 4; released channel: ORA_DISK_1 released channel: ORA_SBT_TAPE_1 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=105 device type=DISK List of Datafile Copies ======================= Key File S Completion Time Ckp SCN Ckp Time ------- ---- - ------------------- ---------- -----------------115 4 A 2009-05-27:21:08:45 1917108 2009-0527:20:50:57 Name: /tmp/users_copy.dat

Do you really want to delete the above objects (enter YES or NO)? yes RMAN> list copy of datafile 4; specification does not match any datafile copy in the repository

Oracle Database 11g: Administration Workshop II A - 51

Practice 5-3: Listing Backup Files and Creating Archival Backup (continued)

RMAN>

7) To simplify your training environment, disable control file autobackup for the next few steps.
RMAN> configure controlfile autobackup off; old RMAN configuration parameters: CONFIGURE CONTROLFILE AUTOBACKUP ON; new RMAN configuration parameters: CONFIGURE CONTROLFILE AUTOBACKUP OFF; new RMAN configuration parameters are successfully stored starting full resync of recovery catalog full resync complete RMAN>

8) Make an image file backup of data file 4.


RMAN> backup as copy datafile 4; Starting backup at 2009-07-21:20:27:25 released channel: ORA_SBT_TAPE_1 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile copy input datafile file number=00004 name=+DATA/orcl/datafile/users.259.692754561 output file name=+FRA/orcl/datafile/users.274.692828845 tag=TAG20090721T202725 RECID=2 STAMP=692828849 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07 Finished backup at 2009-07-21:20:27:32 RMAN>

9) Make another image copy of the data file, but make this one an archival backup.
RMAN> backup as copy datafile 4 keep forever; Starting backup at 2009-07-21:20:28:30 current log archived using channel ORA_DISK_1 backup will never be obsolete archived logs required to recover from this backup will be backed up channel ORA_DISK_1: starting datafile copy input datafile file number=00004 name=+DATA/orcl/datafile/users.259.692754561

Oracle Database 11g: Administration Workshop II A - 52

Practice 5-3: Listing Backup Files and Creating Archival Backup (continued)
RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of backup command at 07/21/2009 20:28:34 ORA-19811: cannot have files in DB_RECOVERY_FILE_DEST with keep attributes RMAN>

Note that the backup command failed. This is because a backup with the KEEP attribute (an archival backup) cannot be written to the Flash Recovery Area. Allowing this has the potential of causing the Flash Recovery Area to quickly run out of space, forcing you to specify a different location.

Oracle Database 11g: Administration Workshop II A - 53

Practice 5-3: Listing Backup Files and Creating Archival Backup (continued)

10) Create an archival backup with a FORMAT clause that causes the backup to be written to the /tmp directory.
RMAN> backup keep forever as copy datafile 4 format '/tmp/bu_%d_%s_%p.dbf'; Starting backup at 2009-07-21:20:31:14 current log archived using channel ORA_DISK_1 backup will never be obsolete archived logs required to recover from this backup will be backed up channel ORA_DISK_1: starting datafile copy input datafile file number=00004 name=+DATA/orcl/datafile/users.259.692754561 output file name=/tmp/bu_ORCL_17_1.dbf tag=TAG20090721T203114 RECID=3 STAMP=692829077 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03 . . . piece handle=/tmp/bu_ORCL_20_1.dbf tag=TAG20090721T203114 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 Finished backup at 2009-07-21:20:31:29 RMAN>

11) See if there are any obsolete backups. (If you repeat practice steps you might have obsolete ones.)
RMAN> report obsolete; RMAN retention policy will be applied to the command RMAN retention policy is set to redundancy 1 no obsolete backups found RMAN>

12) Create another (nonarchive) backup of data file 4.


RMAN> backup as copy datafile 4; Starting backup at 2009-07-21:20:33:52 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile copy

Oracle Database 11g: Administration Workshop II A - 54

Practice 5-3: Listing Backup Files and Creating Archival Backup (continued)
input datafile file number=00004 name=+DATA/orcl/datafile/users.259.692754561 output file name=+FRA/orcl/datafile/users.261.692829233 tag=TAG20090721T203352 RECID=4 STAMP=692829233 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01 Finished backup at 2009-07-21:20:33:54 RMAN>

13) Report on the obsolete backups.


RMAN> report obsolete; RMAN retention policy will be applied to the command RMAN retention policy is set to redundancy 1 Report of obsolete backups and copies Type Key Completion Time Filename/Handle -------------------- ------ ------------------ ------------------Datafile Copy 349 2009-07-21:20:27:29 +FRA/orcl/datafile/users.274.692828845 RMAN>

Note that the first backup taken is now obsolete. 14) For an alternate view of the backups, in EM, navigate to Availability > Manage Current Backups > Image Copies. 15) Ensure that the username and password of oracle/oracle are in the host credentials section at the bottom of the page, and then at the upper-right corner of the page, click Delete All Obsolete. 16) When the Specify Job Parameters page appears, click Show RMAN Script.

Note that the script issues the DELETE NOPROMPT OBSOLETE command. Click OK. 17) Click Submit Job. 18) After the job is submitted, click View Job.

Oracle Database 11g: Administration Workshop II A - 55

Practice 5-3: Listing Backup Files and Creating Archival Backup (continued)

19) When the job status is Running, use your browsers Reload button until the job status appears as Succeeded. Then navigate back to the backup listing page for image copies (Database > Availability > Manage Current Backups > Image Copies).

20) Note that there are now only two backups of data file 4. The obsolete one has been deleted because it was the third of three, and the retention policy is set to 1, meaning there need only be two backups of any given file. (Remember the archival backup is not counted.)

21) Click the Backup Sets tab on this page. What archival backup sets appear there? Why are they there?

Oracle Database 11g: Administration Workshop II A - 56

Practice 5-3: Listing Backup Files and Creating Archival Backup (continued)
Answer: These archival backup sets are here because they were taken as a byproduct of taking the data file image copy as an archival backup. When the data file archival backup was taken, control file autobackup was enabled, which causes the control file and the SPFILE to be backed up. Also, any archive redo logs that are required to recover the image copy are taken. Because the image copy was an archival backup, every other file that is backed up as a part of that backup task is also an archival backup. 22) Enable the automatic backup of the control file again and exit RMAN.
RMAN> configure controlfile autobackup on; RMAN> exit

Oracle Database 11g: Administration Workshop II A - 57

Practices for Lesson 6

Practice 6-1: Backing up the Database


In this practice, you create a cold backup of the rcat database. Because ASM does not expose its files to the operating system, you create backups to a regular file system destination, so that you can setup various learning situations in the following practices. Note: The RCAT database is in the ARCHIVE log mode, and is capable of performing an inconsistent backup. In this exercise though, you will perform a consistent cold backup. 1) Create the /home/oracle/BACKUP directory to hold backup files.
$ cd $ pwd /home/oracle $ mkdir BACKUP

2) Make sure that your environment is pointing at the rcat database.


$. oraenv ORACLE_SID = [+ASM] ? rcat The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle $

3) Shut down the database with the IMMEDIATE option, then mount it.
$ sqlplus / as sysdba SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area Fixed Size Variable Size Database Buffers Redo Buffers 318046208 1336244 251661388 58720256 6328320 bytes bytes bytes bytes bytes

Oracle Database 11g: Administration Workshop II A - 58

Practice 6-1: Backing up the Database (continued)


Database mounted. SQL> exit

4) Make a whole database image copy backup into the $HOME/BACKUP directory using RMAN commands.
$ rman target / Recovery Manager: Release 11.2.0.1.0 - Production on Tue Jul 21 22:26:33 2009 Copyright (c) 1982, 2009, Oracle and/or its affiliates. reserved. All rights

connected to target database: RCAT (DBID=464959795, not open) RMAN> backup database format '/home/oracle/BACKUP/cold_%U'; Starting backup at 2009-07-29:08:11:12 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=1 device type=DISK channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00001 name=+DATA/rcat/datafile/system.267.692935353 input datafile file number=00002 name=+DATA/rcat/datafile/sysaux.268.692935357 input datafile file number=00003 name=+DATA/rcat/datafile/undotbs1.269.692935357 input datafile file number=00005 name=+DATA/rcat/datafile/rcat.277.692937003 input datafile file number=00004 name=+DATA/rcat/datafile/users.270.692935359 channel ORA_DISK_1: starting piece 1 at 2009-07-29:08:11:13 channel ORA_DISK_1: finished piece 1 at 2009-07-29:08:13:08 piece handle=/home/oracle/BACKUP/cold_0fklb6h1_1_1 tag=TAG20090729T081113 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:01:55 Finished backup at 2009-07-29:08:13:08 Starting Control File and SPFILE Autobackup at 2009-07-29:08:13:09 piece handle=+FRA/rcat/autobackup/2009_07_29/s_693475040.330.693475991 comment=NONE Finished Control File and SPFILE Autobackup at 2009-07-29:08:13:16 RMAN> exit

5) Open the RCAT database.


$ . oraenv ORACLE_SID = [rcat] ? rcat sqlplus / as sysdba SQL> alter database open; Database altered.

Oracle Database 11g: Administration Workshop II A - 59

Practice 6-1: Backing up the Database (continued)


6) Use the ALTER DATABASE command to back up the control file as a trace file.
SQL> alter database backup controlfile to trace as '/home/oracle/BACKUP/trace_control.bck'; Database altered. SQL> exit

7) View the content of the /home/oracle/BACKUP directory.


$ ls l /home/oracle/BACKUP total 1100568 -rw-r----- 1 oracle dba 1125867520 Jul 29 08:12 cold_0fklb6h1_1_1 -rw-r--r-- 1 oracle dba 6601 Jul 29 08:18 trace_control.bck $

Oracle Database 11g: Administration Workshop II A - 60

Practice 6-2: Recovering from the Loss of a Data File


Because ASM does not expose its files to the operating system, you create tablespaces with data files in a regular file system destination, so that you can setup various learning situations in the following practices. In the ORCL database, you create the BR_TBS tablespace with the CUSTOMERS table. 1) Log into the ORCL instance with SQL*Plus as the SYS user.
$ . oraenv ORACLE_SID = [rcat] ? orcl $ sqlplus / as sysdba SQL>

2) Create the BR_TBS tablespace with the CUSTOMERS table.


SQL> CREATE TABLESPACE br_tbs DATAFILE '/home/oracle/BACKUP/br01.dbf' SIZE 25M; Tablespace created. SQL> CREATE TABLE customers tablespace br_tbs AS SELECT * FROM sh.customers; Table created. SQL>

3) Find out the number of your new data file and back up the data files to the /home/oracle/BACKUP directory. (You might find it useful to keep the SQL*Plus window open and start the RMAN session in another terminal window, but it is not mandatory.)
$ . oraenv ORACLE_SID = [+ASM] ? orcl $ rman target / catalog rcatowner@rcat connected to target database: ORCL (DBID=1220535480) recovery catalog database Password: oracle_4U <<<not displayed connected to recovery catalog database RMAN> report schema; starting full resync of recovery catalog full resync complete Report of database schema for database with db_unique_name ORCL List of Permanent Datafiles =========================== File Size(MB) Tablespace

RB segs Datafile Name

Oracle Database 11g: Administration Workshop II A - 61

Practice 6-2: Recovering from the Loss of a Data File (continued)


---- -------- -------------------- ------- ---------------------1 690 SYSTEM YES +DATA/orcl/datafile/system.256.692754557 2 610 SYSAUX NO +DATA/orcl/datafile/sysaux.257.692754559 3 100 UNDOTBS1 YES +DATA/orcl/datafile/undotbs1.258.692754561 4 5 USERS NO +DATA/orcl/datafile/users.259.692754561 5 100 EXAMPLE NO +DATA/orcl/datafile/example.265.692754837 6 25 BR_TBS NO /home/oracle/BACKUP/br01.dbf List of Temporary Files ======================= File Size(MB) Tablespace Maxsize(MB) Tempfile Name ---- -------- -------------------- ----------- ------------------1 28 TEMP 32767 +DATA/orcl/tempfile/temp.264.692754825 RMAN> backup as copy datafile 6 format '/home/oracle/BACKUP/br_%d_%s_%p.dbf'; Starting backup at 2009-07-29:08:38:47 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=29 device type=DISK channel ORA_DISK_1: starting datafile copy input datafile file number=00006 name=/home/oracle/BACKUP/br01.dbf output file name=/home/oracle/BACKUP/br_ORCL_22_1.dbf tag=TAG20090729T083848 RECID=5 STAMP=693477530 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03 Finished backup at 2009-07-29:08:38:51 Starting Control File and SPFILE Autobackup at 2009-0729:08:38:51 piece handle=+FRA/orcl/autobackup/2009_07_29/s_693477533.332.693477535 comment=NONE Finished Control File and SPFILE Autobackup at 2009-0729:08:38:54 RMAN>

4) To simulate the passage of time, and to make sure that this data is not cached in the buffer cache, perform the following steps and exit from SQL*Plus.
SQL> alter system switch logfile; System altered;

Oracle Database 11g: Administration Workshop II A - 62

Practice 6-2: Recovering from the Loss of a Data File (continued)


SQL> alter system checkpoint; System altered. SQL> alter system switch logfile; System altered SQL> exit

5) Delete the data file belonging to the BR_TBS tablespace (not the backup).
$ cd ~/BACKUP $ ls l br* -rw-r----- 1 oracle dba 26222592 Jul 22 20:57 br01.dbf -rw-r----- 1 oracle dba 26222592 Jul 22 20:52 br_ORCL_22_1.dbf $ rm br01.dbf $ ls l br* -rw-r----- 1 oracle dba 26222592 Jul 22 20:52 br_ORCL_22_1.dbf $

6) Now log back in to the database, flush the buffer cache and try to access the data in the CUSTOMERS table.
$ sqlplus / as sysdba SQL> alter system flush buffer_cache; System altered. SQL> select count(*) from sys.customers; select count(*) from sys.customers ERROR at line 1: ORA-01116: error in opening database file 6 ORA-01110: data file 6: '/home/oracle/BACKUP/br01.dbf' ORA-27041: unable to open file Linux Error: 2: No such file or directory Additional information: 3

7) Knowing you are going to have to restore this file, you now take it offline, and exit from SQL*Plus.
SQL> alter database datafile 6 offline; Database altered. SQL> exit

Oracle Database 11g: Administration Workshop II A - 63

Practice 6-2: Recovering from the Loss of a Data File (continued)


8) Now navigate to your $HOME/BACKUP directory, to find what backups you have of the data file. Then choose the most recent, and copy YOUR file into where the live one should be.
$ cd /home/oracle/BACKUP/ $ ls -al total 1126216 drwxr-xr-x 2 drwxrwxrwx 24 -rw-r----- 1 -rw-r----- 1 -rw-r--r-- 1

oracle oracle oracle oracle oracle

oinstall 4096 Jul oinstall 4096 Jul dba 26222592 Jul dba 1125867520 Jul dba 6601 Jul

29 29 29 29 29

08:42 08:02 08:38 08:12 08:18

. .. br_ORCL_22_1.dbf cold_0fklb6h1_1_1 trace_control.bck

$ cp br_ORCL_22_1.dbf br01.dbf $ ls l -rw-r----- 1 oracle oinstall 26222592 -rw-r----- 1 oracle dba 26222592 -rw-r----- 1 oracle dba 1125867520 -rw-r--r-- 1 oracle dba 6601

Jul Jul Jul Jul

29 29 29 29

08:38 08:38 08:12 08:18

br01.dbf br_ORCL_22_1.dbf cold_0fklb6h1_1_1 trace_control.bck

9) Now log in to SQL*Plus and try to bring the file online.


$ sqlplus / as sysdba SQL> alter database datafile 6 online; alter database datafile 6 online * ERROR at line 1: ORA-01113: file 6 needs media recovery ORA-01110: data file 6: '/home/oracle/BACKUP/br01.dbf'

10) The data file cannot be brought online as it is too old and, therefore, you need to perform media recovery to roll it forward.
SQL> recover datafile 6; Media recovery complete. SQL>

11) Now try to bring the data file online.


SQL> alter database datafile 6 online; Database altered.

12) Try again to access the sys.customers table, and then exit SQL*Plus.
SQL> select count(*) from sys.customers; COUNT(*) ----------

Oracle Database 11g: Administration Workshop II A - 64

Practice 6-2: Recovering from the Loss of a Data File (continued)


55500 SQL> exit

13) For the ORCL database, confirm that the control file is automatically backed up and that the backup rentention is set to 1 (if not, modify it), take a database backup and delete obsolete files (in preparation for the following practices).
$ . oraenv ORACLE_SID = [orcl] ? orcl $ rman target / catalog rcatowner@rcat connected to target database: ORCL (DBID=1220535480) recovery catalog database Password: oracle_4U <<<not displayed connected to recovery catalog database RMAN> show retention policy; RMAN configuration parameters for database with db_unique_name ORCL are: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default RMAN> RMAN> backup database; Starting backup . . . RMAN> RMAN> delete noprompt obsolete; RMAN retention policy will be applied to the command . . . RMAN> exit $

Oracle Database 11g: Administration Workshop II A - 65

Practice 6-3: Recovering from the Loss of all Control Files


This practice makes use of the ORCL database and the recovery catalog. You will simulate the loss of all control files, and then restore the control files and recover the database. 1) Connect to the ORCL database and make a binary backup of the control file.
$ . oraenv ORACLE_SID = [orcl] ? orcl $ sqlplus / as sysdba SQL> alter database backup controlfile to '/home/oracle/BACKUP/ctrl.bkp'; Database altered.

2) Identify the current control files for the ORCL database. You need to know them in one of the following tasks. Then shutdown the ORCL database to allow the control files to be deleted and exit SQL*Plus.
SQL> select name from v$controlfile; NAME ---------------------------------------------+DATA/orcl/controlfile/current.260.692879691 +FRA/orcl/controlfile/current.256.692879691 SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down.
SQL> exit

3) Set the environment to the ASM instance and run the asmcmd utility to delete the two control files identified above. Note: The names of your control files may be different. Delete YOUR control files.
$ . oraenv ORACLE_SID = [orcl] ? +ASM The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid is /u01/app/oracle $ asmcmd rm +DATA/orcl/controlfile/current.260.692879691 $ asmcmd rm +FRA/orcl/controlfile/current.256.692879691

4) Set the environment back to the ORCL database and attempt to start up the database.
$ . oraenv ORACLE_SID = [+ASM] ? orcl

Oracle Database 11g: Administration Workshop II A - 66

Practice 6-3: Recovering from the Loss of all Control Files (continued)
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle $ sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Wed Jul 29 10:03:55 2009 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 418484224 bytes Fixed Size 1336908 bytes Variable Size 268437940 bytes Database Buffers 142606336 bytes Redo Buffers 6103040 bytes ORA-00205: error in identifying control file, check alert log for more info SQL> exit

5) Using RMAN, connect to the ORCL target database, to the RCAT catalog database, and restore the control file from the autobackup.
$ rman target / catalog rcatowner@rcat Recovery Manager: Release 11.2.0.1.0 - Production on Wed Jul 29 10:06:22 2009 Copyright (c) 1982, 2009, Oracle and/or its affiliates. rights reserved. All

connected to target database: ORCL (not mounted) recovery catalog database Password: oracle_4U <<<not displayed connected to recovery catalog database RMAN> restore controlfile from autobackup; Starting restore at 2009-07-29:10:06:48 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=27 device type=DISK recovery area destination: +FRA database name (or database unique name) used for search: ORCL

Oracle Database 11g: Administration Workshop II A - 67

Practice 6-3: Recovering from the Loss of all Control Files (continued)
channel ORA_DISK_1: AUTOBACKUP +fra/ORCL/AUTOBACKUP/2009_07_29/s_693478885.335.693478885 found in the recovery area channel ORA_DISK_1: looking for AUTOBACKUP on day: 20090729 channel ORA_DISK_1: restoring control file from AUTOBACKUP +fra/ORCL/AUTOBACKUP/2009_07_29/s_693478885.335.693478885 channel ORA_DISK_1: control file restore from AUTOBACKUP complete output file name=+DATA/orcl/controlfile/current.260.693482811 output file name=+FRA/orcl/controlfile/current.256.693482813 Finished restore at 2009-07-29:10:06:54/

6) Mount the restored control file and attempt to open the database.
RMAN> alter database mount; database mounted released channel: ORA_DISK_1 RMAN> alter database open resetlogs; RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of alter db command at 07/29/2009 10:08:45 ORA-01152: file 1 was not restored from a sufficiently old backup ORA-01110: data file 1: '+DATA/orcl/datafile/system.256.692879503'

7) Because the control files have been restored, the database must be recovered.
RMAN> recover database; Starting recover at 2009-07-29:10:08:58 Starting implicit crosscheck backup at 2009-07-29:10:08:58 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=27 device type=DISK Crosschecked 12 objects Finished implicit crosscheck backup at 2009-07-29:10:09:00 Starting implicit crosscheck copy at 2009-07-29:10:09:00 using channel ORA_DISK_1 Crosschecked 4 objects Finished implicit crosscheck copy at 2009-07-29:10:09:01 searching for all files in the recovery area cataloging files... cataloging done List of Cataloged Files ======================= File Name: +fra/ORCL/AUTOBACKUP/2009_07_29/s_693478885.335.693478885 using channel ORA_DISK_1

Oracle Database 11g: Administration Workshop II A - 68

Practice 6-3: Recovering from the Loss of all Control Files (continued)
starting media recovery archived log for thread 1 with sequence 59 is already on disk as file +DATA/orcl/onlinelog/group_2.262.692879707 archived log file name=+DATA/orcl/onlinelog/group_2.262.692879707 thread=1 sequence=59 media recovery complete, elapsed time: 00:00:01 Finished recover at 2009-07-29:10:09:05

8) Attempt to open the database with the RESETLOGS option after recovery.
RMAN> alter database open resetlogs; database opened new incarnation of database registered in recovery catalog starting full resync of recovery catalog full resync complete

9) Perform a full database backup and delete obsolete files to be prepared for future labs.
RMAN> backup database; Starting backup at 2009-07-29:10:49:21 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=46 device type=DISK channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00002 name=+DATA/orcl/datafile/sysaux.257.692879505 channel ORA_DISK_1: starting piece 1 at 2009-07-29:10:49:22 channel ORA_DISK_1: finished piece 1 at 2009-07-29:10:50:18 piece handle=+FRA/orcl/backupset/2009_07_29/nnndf0_tag20090729t104922_0 .340.693485363 tag=TAG20090729T104922 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:56 channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00001 name=+DATA/orcl/datafile/system.256.692879503 channel ORA_DISK_1: starting piece 1 at 2009-07-29:10:50:22 channel ORA_DISK_1: finished piece 1 at 2009-07-29:10:52:04 piece handle=+FRA/orcl/backupset/2009_07_29/nnndf0_tag20090729t104922_0 .341.693485425 tag=TAG20090729T104922 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:01:42 channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00006 name=/home/oracle/BACKUP/br01.dbf

Oracle Database 11g: Administration Workshop II A - 69

Practice 6-3: Recovering from the Loss of all Control Files (continued)
input datafile file number=00003 name=+DATA/orcl/datafile/undotbs1.258.692879507 input datafile file number=00004 name=+DATA/orcl/datafile/users.259.692879509 input datafile file number=00005 name=+DATA/orcl/datafile/example.265.692879765 channel ORA_DISK_1: starting piece 1 at 2009-07-29:10:52:11 channel ORA_DISK_1: finished piece 1 at 2009-07-29:10:52:57 piece handle=+FRA/orcl/backupset/2009_07_29/nnndf0_tag20090729t104922_0 .342.693485537 tag=TAG20090729T104922 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:46 Finished backup at 2009-07-29:10:52:57 Starting Control File and SPFILE Autobackup at 2009-0729:10:52:57 piece handle=+FRA/orcl/autobackup/2009_07_29/s_693485589.343.693485603 comment=NONE Finished Control File and SPFILE autobackup at 2009-07-29:10:53 RMAN> delete noprompt obsolete; . . . RMAN> exit

Oracle Database 11g: Administration Workshop II A - 70

Practice 6-4: Recovering from the Loss of a Redo Log Group


This practice makes use of the ORCL database. You will delete the current redo log files, and see the effect this has on the database. 1) Log in to the ORCL database using SQL*Plus, and run the redo_view.sql query to gather information about your redo logs.
$ sqlplus / as sysdba SQL> SQL> SQL> SQL> SQL> 2 3 4 @redo_view.sql set linesize 120 col member format a43 col status format a10 select l.group#, l.sequence#, l.archived, l.status, f.member from v$log l, v$logfile f where l.group#=f.group#;

GROUP# SEQUENCE# ARC STATUS MEMBER ---------- ---------- --- ---------- -----------------------------------------3 0 YES UNUSED +DATA/orcl/onlinelog/group_3.263.692879721 3 0 YES UNUSED +FRA/orcl/onlinelog/group_3.259.692879727 2 0 YES UNUSED +DATA/orcl/onlinelog/group_2.262.692879707 2 0 YES UNUSED +FRA/orcl/onlinelog/group_2.258.692879715 1 1 NO CURRENT +DATA/orcl/onlinelog/group_1.261.692879693 1 1 NO CURRENT +FRA/orcl/onlinelog/group_1.257.692879701 6 rows selected. SQL>

2) From this it can be seen in our example that log group 1 is the current log group. Your current redo log group may be different from the one shown. Note the exact group names of your current group. You need the names during the next step. Determine the current redo log group for your database, and then delete its member files with the asmcmd utility. You must shutdown the database in order to delete files that are in use in an ASM disk group.
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down.

Oracle Database 11g: Administration Workshop II A - 71

Practice 6-4: Recovering from the Loss of a Redo Log Group (continued)
SQL> exit $ . oraenv ORACLE_SID = [orcl] ? +ASM The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid is /u01/app/oracle $ asmcmd rm +DATA/orcl/onlinelog/group_1.261.692879693 $ asmcmd rm +FRA/orcl/onlinelog/group_1.257.692879701

3) Attempt to start the ORCL database and observe what happens. Then exit your SQL*Plus session.
$ . oraenv ORACLE_SID = [+ASM] ? orcl The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle $ sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Tue Aug 4 03:07:48 2009 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 481259520 bytes Fixed Size 1337352 bytes Variable Size 411043832 bytes Database Buffers 62914560 bytes Redo Buffers 5963776 bytes Database mounted. ORA-03113: end-of-file on communication channel Process ID: 29445 Session ID: 1 Serial number: 5 SQL> exit

4) Display the last section of the alert log to find out more details related to the failure in starting the ORCL instance.
$ tail /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log ORA-15012: ASM file '+FRA/orcl/onlinelog/group_1.257.692879701' does not exist ORA-00312: online log 1 thread 1: '+DATA/orcl/onlinelog/group_1.261.692879693' ORA-17503: ksfdopn:2 Failed to open file +DATA/orcl/onlinelog/group_1.261.692879693

Oracle Database 11g: Administration Workshop II A - 72

Practice 6-4: Recovering from the Loss of a Redo Log Group (continued)
ORA-15012: ASM file '+DATA/orcl/onlinelog/group_1.261.692879693' does not exist Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_15563.trc: ORA-00313: open failed for members of log group 1 of thread ORA-00312: online log 1 thread 1: '+DATA/orcl/onlinelog/group_1.261.692879693' ORA-00312: online log 1 thread 1: '+FRA/orcl/onlinelog/group_1.257.692879701' USER (ospid: 15563): terminating the instance due to error 313 Instance terminated by USER, pid = 15563

As you can observe, the instance terminates due to missing all the members of your log group. 5) Log into SQL*Plus as SYSDBA, start up and mount the ORCL instance. Query the V$LOG view to determine which log group is the current group and whether its files have been archived already.
$ sqlplus / as sysdba SQL> startup mount ORACLE instance started. Total System Global Area Fixed Size Variable Size Database Buffers Redo Buffers Database mounted. 481259520 1337352 411043832 62914560 5963776 bytes bytes bytes bytes bytes

SQL> select group#,status,archived from v$log; GROUP# ---------1 3 2 STATUS ---------------CURRENT UNUSED UNUSED ARC --NO YES YES

6) If you clear YOUR missing log file group, then this will re-create the missing log files.
SQL> alter database clear logfile group 1; alter database clear logfile group 1 * ERROR at line 1: ORA-00350: log 1 of instance orcl (thread 1) needs to be archived ORA-00312: online log 1 thread 1: '+DATA/orcl/onlinelog/group_1.261.693969247'

Oracle Database 11g: Administration Workshop II A - 73

Practice 6-4: Recovering from the Loss of a Redo Log Group (continued)
ORA-00312: online log 1 thread 1: '+FRA/orcl/onlinelog/group_1.257.693969255'

This is because the logfile has been deleted, and therefore cannot be archived. Because the log file has not been archived, lgwr is not allowed to overwrite it, even if the file no longer exists. 7) Because the logfile group has not been archived, you must use the keyword unarchived in the command. Open the database and exit SQL*Plus.
SQL> alter database clear unarchived logfile group 1; Database altered. SQL> alter database open; Database altered. SQL> exit

8) Perform a backup of the ORCL database including archive logs to be ready for future labs.
$ rman target / catalog rcatowner@rcat Recovery Manager: Release 11.2.0.1.0 - Production on Wed Jul 29 10:49:07 2009 Copyright (c) 1982, 2009, Oracle and/or its affiliates. rights reserved. All

connected to target database: ORCL (DBID=1220660426) recovery catalog database Password: oracle_4U <<<not displayed connected to recovery catalog database RMAN> backup database plus archivelog; .. . Finished backup at 20-AUG-09 Starting Control File and SPFILE Autobackup at 20-AUG-09 piece handle=+FRA/orcl/autobackup/2009_08_20/s_695409765.279.695409767 comment=NONE Finished Control File and SPFILE Autobackup at 20-AUG-09 RMAN> delete noprompt obsolete; . . . Deleted 2 objects RMAN> exit

Note: Your number of deleted objects will most likely be different.


Oracle Database 11g: Administration Workshop II A - 74

Practices for Lesson 7

Practice 7-1: Recovering Image Copies


In this practice, you recover an image copy of a file to the current SCN, to allow faster recovery time later. You create a new tablespace called APPRAISAL, which has one table in it. After creating it initially with a small amount of data, you take an incremental backup of it. Then you add many rows and take another incremental backup. At that point, you have an image copy of the APPRAISAL tablespace and also an incremental backup of it. Because you need to recover the tablespace later, you recover the image copy so that it is as up-to-date as the last incremental backup. This is done without going to the expense of creating a new image copy. 1) Make sure you are at the ~/labs directory and run the create_appraisal_ts.sh script to create a new tablespace called APPRAISAL.
$ cd ~/labs $ ./create_appraisal_ts.sh Tablespace created. Table created. $

2) Make a level 1 backup of the tablespace, to be used for image copy recovery. If no level 1 exists yet, it will actually create a level 0 incremental backup. This takes several minutes.
$ rman target / catalog rcatowner@rcat Recovery Manager: Release 11.2.0.1.0 - Production on Wed Jul 29 10:49:07 2009 Copyright (c) 1982, 2009, Oracle and/or its affiliates. reserved. All rights

connected to target database: ORCL (DBID=1220660426) recovery catalog database Password: oracle_4U <<<not displayed connected to recovery catalog database RMAN> backup incremental level 1 for recover of copy with tag 'app_incr' database; Starting backup at 2009-08-05:03:00:24 starting full resync of recovery catalog full resync complete allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=58 device type=DISK no parent backup or copy of datafile 1 found no parent backup or copy of datafile 2 found no parent backup or copy of datafile 5 found no parent backup or copy of datafile 3 found

Oracle Database 11g: Administration Workshop II A - 75

Practice 7-1: Recovering Image Copies (continued)


no parent backup or copy of datafile 6 found no parent backup or copy of datafile 7 found no parent backup or copy of datafile 4 found channel ORA_DISK_1: starting datafile copy input datafile file number=00001 name=+DATA/orcl/datafile/system.260.694050517 output file name=+FRA/orcl/datafile/system.301.694062029 tag=APP_INCR RECID=6 STAMP=694062094 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:16 channel ORA_DISK_1: starting datafile copy input datafile file number=00002 name=+DATA/orcl/datafile/sysaux.266.694050521 output file name=+FRA/orcl/datafile/sysaux.300.694062109 tag=APP_INCR RECID=7 STAMP=694062216 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:56 channel ORA_DISK_1: starting datafile copy input datafile file number=00005 name=+DATA/orcl/datafile/example.259.694050813 output file name=+FRA/orcl/datafile/example.298.694062227 tag=APP_INCR RECID=8 STAMP=694062237 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15 channel ORA_DISK_1: starting datafile copy input datafile file number=00003 name=+DATA/orcl/datafile/undotbs1.278.694050521 output file name=+FRA/orcl/datafile/undotbs1.297.694062243 tag=APP_INCR RECID=9 STAMP=694062251 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15 channel ORA_DISK_1: starting datafile copy input datafile file number=00006 name=/home/oracle/BACKUP/br01.dbf output file name=+FRA/orcl/datafile/br_tbs.296.694062259 tag=APP_INCR RECID=10 STAMP=694062265 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:21 channel ORA_DISK_1: starting datafile copy input datafile file number=00007 name=+DATA/orcl/datafile/appraisal.256.694061937 output file name=+FRA/orcl/datafile/appraisal.295.694062283 tag=APP_INCR RECID=11 STAMP=694062285 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:08 channel ORA_DISK_1: starting datafile copy input datafile file number=00004 name=+DATA/orcl/datafile/users.264.694050521 output file name=+FRA/orcl/datafile/users.294.694062289 tag=APP_INCR RECID=12 STAMP=694062289 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03 Finished backup at 2009-08-05:03:04:51 Starting Control File and SPFILE Autobackup at 2009-08-05:03:04:51 piece handle=+FRA/orcl/autobackup/2009_08_05/s_694062294.292.694062307 comment=NONE Finished Control File and SPFILE Autobackup at 2009-08-05:03:05:09 RMAN>

3) In a separate terminal window, perform some DML on the table in the APPRAISAL tablespace. Use the emp_inserts.sh script.

Oracle Database 11g: Administration Workshop II A - 76

Practice 7-1: Recovering Image Copies (continued)


$ cd ~/labs $ ./emp_inserts.sh 107 rows created. Commit complete. 214 rows created. Commit complete. $

4) List the copy of the APPRAISAL tablespace to see its SCN.


RMAN> list copy of tablespace appraisal; List of Datafile Copies ======================= Key File S Completion Time Ckp SCN Ckp Time ------- ---- - ------------------- ---------- -----------------1975 7 A 2009-08-05:03:04:45 853719 2009-0805:03:04:39 Name: +FRA/orcl/datafile/appraisal.295.694062283 Tag: APP_INCR RMAN>

5) Run the script to perform more transactions on the table that resides in the APPRAISAL tablespace.
$ ./emp_inserts.sh 428 rows created. Commit complete. 856 rows created. Commit complete. $

6) Perform another level 1 backup. This one will indeed be a level 1 because you already have a level 0.
RMAN> backup incremental level 1 for recover of copy with tag 'app_incr' database;

Starting backup at 2009-08-05:03:25:48 using channel ORA_DISK_1

Oracle Database 11g: Administration Workshop II A - 77

Practice 7-1: Recovering Image Copies (continued)


channel ORA_DISK_1: starting incremental level 1 datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00001 name=+DATA/orcl/datafile/system.260.694050517 channel ORA_DISK_1: starting piece 1 at 2009-08-05:03:25:49 channel ORA_DISK_1: finished piece 1 at 2009-08-05:03:25:50 piece handle=+FRA/orcl/backupset/2009_08_05/nnndn1_app_incr_0.285.69 4063549 tag=APP_INCR comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 channel ORA_DISK_1: starting incremental level 1 datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00002 name=+DATA/orcl/datafile/sysaux.266.694050521 channel ORA_DISK_1: starting piece 1 at 2009-08-05:03:25:51 channel ORA_DISK_1: finished piece 1 at 2009-08-05:03:25:54 piece handle=+FRA/orcl/backupset/2009_08_05/nnndn1_app_incr_0.284.69 4063551 tag=APP_INCR comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03 channel ORA_DISK_1: starting incremental level 1 datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00006 name=/home/oracle/BACKUP/br01.dbf input datafile file number=00003 name=+DATA/orcl/datafile/undotbs1.278.694050521 input datafile file number=00004 name=+DATA/orcl/datafile/users.264.694050521 input datafile file number=00005 name=+DATA/orcl/datafile/example.259.694050813 input datafile file number=00007 name=+DATA/orcl/datafile/appraisal.256.694061937 channel ORA_DISK_1: starting piece 1 at 2009-08-05:03:25:54 channel ORA_DISK_1: finished piece 1 at 2009-08-05:03:25:55 piece handle=+FRA/orcl/backupset/2009_08_05/nnndn1_app_incr_0.277.69 4063555 tag=APP_INCR comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 Finished backup at 2009-08-05:03:25:55 Starting Control File and SPFILE Autobackup at 2009-0805:03:25:55 piece handle=+FRA/orcl/autobackup/2009_08_05/s_694063556.261.6940635 57 comment=NONE

Oracle Database 11g: Administration Workshop II A - 78

Practice 7-1: Recovering Image Copies (continued)


Finished Control File and SPFILE Autobackup at 2009-0805:03:25:59 RMAN>

7) List and note the SCN of the APPRAISAL tablespace incremental backup (not the image copy).
RMAN> list backup of tablespace appraisal; List of Backup Sets ===================

BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ -----------------2036 Incr 1 2.24M DISK 00:00:00 2009-0805:03:25:54 BP Key: 2041 Status: AVAILABLE Compressed: NO Tag: APP_INCR Piece Name: +FRA/orcl/backupset/2009_08_05/nnndn1_app_incr_0.277.694063555 List of Datafiles in backup set 2036 File LV Type Ckp SCN Ckp Time Name ---- -- ---- ---------- ------------------- ---7 1 Incr 855661 2009-08-05:03:25:54 +DATA/orcl/datafile/appraisal.256.694061937 RMAN>

8) Use the incremental backup to recover the APPRAISAL tablespace image copy.
RMAN> recover copy of tablespace appraisal with tag 'app_incr'; Starting recover at 2009-08-05:03:29:20 using channel ORA_DISK_1 channel ORA_DISK_1: starting incremental datafile backup set restore channel ORA_DISK_1: specifying datafile copies to recover recovering datafile copy file number=00007 name=+FRA/orcl/datafile/appraisal.288.694063519 channel ORA_DISK_1: reading from backup piece +FRA/orcl/backupset/2009_08_05/nnndn1_app_incr_0.277.694063555 channel ORA_DISK_1: piece handle=+FRA/orcl/backupset/2009_08_05/nnndn1_app_incr_0.277.69 4063555 tag=APP_INCR channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 Finished recover at 2009-08-05:03:29:21 Starting Control File and SPFILE Autobackup at 2009-0805:03:29:21

Oracle Database 11g: Administration Workshop II A - 79

Practice 7-1: Recovering Image Copies (continued)


piece handle=+FRA/orcl/autobackup/2009_08_05/s_694063763.260.6940637 63 comment=NONE Finished Control File and SPFILE Autobackup at 2009-0805:03:29:26 RMAN>

9) List the SCN for the APPRAISAL tablespace image copy. What is it now?
RMAN> list copy of tablespace appraisal; List of Datafile Copies ======================= Key File S Completion Time Ckp SCN Ckp Time ------- ---- - ------------------- ---------- -----------------2090 7 A 2009-08-05:03:29:20 855661 2009-0805:03:25:54 Name: +FRA/orcl/datafile/appraisal.288.694063519 Tag: APP_INCR RMAN>

Note that it is now equal to the SCN of the last incremental backup. 10) Recover all the data file image copies in the database based on the most recent incremental backup.
RMAN> recover copy of database with tag 'app_incr'; Starting recover at 2009-08-05:03:33:29 using channel ORA_DISK_1 no copy of datafile 7 found to recover channel ORA_DISK_1: starting incremental datafile backup set restore channel ORA_DISK_1: specifying datafile copies to recover recovering datafile copy file number=00001 name=+FRA/orcl/datafile/system.291.694063333 channel ORA_DISK_1: reading from backup piece +FRA/orcl/backupset/2009_08_05/nnndn1_app_incr_0.285.694063549 channel ORA_DISK_1: piece handle=+FRA/orcl/backupset/2009_08_05/nnndn1_app_incr_0.285.69 4063549 tag=APP_INCR channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 channel ORA_DISK_1: starting incremental datafile backup set restore channel ORA_DISK_1: specifying datafile copies to recover recovering datafile copy file number=00002 name=+FRA/orcl/datafile/sysaux.316.694063393 channel ORA_DISK_1: reading from backup piece +FRA/orcl/backupset/2009_08_05/nnndn1_app_incr_0.284.694063551

Oracle Database 11g: Administration Workshop II A - 80

Practice 7-1: Recovering Image Copies (continued)


channel ORA_DISK_1: piece handle=+FRA/orcl/backupset/2009_08_05/nnndn1_app_incr_0.284.69 4063551 tag=APP_INCR channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 channel ORA_DISK_1: starting incremental datafile backup set restore channel ORA_DISK_1: specifying datafile copies to recover recovering datafile copy file number=00003 name=+FRA/orcl/datafile/undotbs1.290.694063491 recovering datafile copy file number=00004 name=+FRA/orcl/datafile/users.283.694063527 recovering datafile copy file number=00005 name=+FRA/orcl/datafile/example.307.694063477 recovering datafile copy file number=00006 name=+FRA/orcl/datafile/br_tbs.289.694063517 channel ORA_DISK_1: reading from backup piece +FRA/orcl/backupset/2009_08_05/nnndn1_app_incr_0.277.694063555 channel ORA_DISK_1: piece handle=+FRA/orcl/backupset/2009_08_05/nnndn1_app_incr_0.277.69 4063555 tag=APP_INCR channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 Finished recover at 2009-08-05:03:33:33 Starting Control File and SPFILE Autobackup at 2009-0805:03:33:33 piece handle=+FRA/orcl/autobackup/2009_08_05/s_694064014.262.6940640 15 comment=NONE Finished Control File and SPFILE Autobackup at 2009-0805:03:33:37 RMAN>

11) View the SCNs of all the image copies now. They should all be, at the most, equal to the latest incremental backup.
RMAN> list copy; specification does not match any control file copy in the repository List of Datafile Copies ======================= Key File S Completion Time Ckp SCN Ckp Time ------- ---- - ------------------- ---------- -----------------2144 1 A 2009-08-05:03:33:30 855654 2009-0805:03:25:49 Name: +FRA/orcl/datafile/system.291.694063333 Tag: APP_INCR

Oracle Database 11g: Administration Workshop II A - 81

Practice 7-1: Recovering Image Copies (continued)


2145 2 A 2009-08-05:03:33:31 855657 2009-0805:03:25:51 Name: +FRA/orcl/datafile/sysaux.316.694063393 Tag: APP_INCR 2149 3 A 2009-08-05:03:33:32 855661 2009-0805:03:25:54 Name: +FRA/orcl/datafile/undotbs1.290.694063491 Tag: APP_INCR 2148 4 A 2009-08-05:03:33:32 855661 2009-0805:03:25:54 Name: +FRA/orcl/datafile/users.283.694063527 Tag: APP_INCR 1491 4 A 2009-08-05:02:19:40 847825 2009-0805:02:19:40 Name: +FRA/orcl/datafile/users.299.694059581 Tag: TAG20090805T021940 1436 4 A 2009-08-05:02:18:41 847727 2009-0805:02:18:41 Keep: BACKUP_LOGS Until: FOREVER Name: /tmp/bu_ORCL_17_1.dbf Tag: TAG20090805T021838 2146 5 A 2009-08-05:03:33:32 855661 2009-0805:03:25:54 Name: +FRA/orcl/datafile/example.307.694063477 Tag: APP_INCR 2147 6 A 2009-08-05:03:33:32 855661 2009-0805:03:25:54 Name: +FRA/orcl/datafile/br_tbs.289.694063517 Tag: APP_INCR 1641 6 A 2009-08-05:02:24:21 848546 2009-0805:02:24:20 Name: /home/oracle/BACKUP/br_ORCL_23_1.dbf Tag: TAG20090805T022420 2090 7 A 2009-08-05:03:29:20 855661 2009-0805:03:25:54 Name: +FRA/orcl/datafile/appraisal.288.694063519 Tag: APP_INCR RMAN>

Oracle Database 11g: Administration Workshop II A - 82

Practice 7-2: Performing Fast Recovery


In this practice, you take advantage of the Flash Recovery Area to perform a fast recovery of a data file. Note: The data file numbers in your database may differ from what is shown here. 1) Use the RMAN session from the previous practice and take the APPRAISAL data file offline.
RMAN> sql "alter tablespace appraisal offline"; sql statement: alter tablespace appraisal offline starting full resync of recovery catalog full resync complete RMAN>

2) Use the SWITCH command to replace the data file from the flash recovery area. a) Determine the name of the data file that is currently associated with the APPRAISAL tablespace.
RMAN> report schema; Report of database schema for database with db_unique_name ORCL List of Permanent Datafiles =========================== File Size(MB) Tablespace RB segs Datafile Name ---- -------- -------------------- ------- ----------------------1 680 SYSTEM YES +DATA/orcl/datafile/system.260.694050517 2 570 SYSAUX NO +DATA/orcl/datafile/sysaux.266.694050521 3 85 UNDOTBS1 YES +DATA/orcl/datafile/undotbs1.278.694050521 4 5 USERS NO +DATA/orcl/datafile/users.264.694050521 5 100 EXAMPLE NO +DATA/orcl/datafile/example.259.694050813 6 25 BR_TBS NO /home/oracle/BACKUP/br01.dbf 7 25 APPRAISAL NO +DATA/orcl/datafile/appraisal.256.694061937 List of Temporary Files ======================= File Size(MB) Tablespace Maxsize(MB) Tempfile Name ---- -------- -------------------- ----------- ------------1 28 TEMP 32767 +DATA/orcl/tempfile/temp.265.694050795

Oracle Database 11g: Administration Workshop II A - 83

Practice 7-2: Performing Fast Recovery (continued)


Note that there is only one data file for the tablespace. In this case, it is data file number 7. You can use that data file number, instead of the tablespace name, in the upcoming set of commands. b) Confirm that you have an image copy for data file 7 that you can switch to.
RMAN> list copy of datafile 7; List of Datafile Copies ======================= Key File S Completion Time Ckp SCN Ckp Time ------- ---- - ------------------- ---------- -----------------2090 7 A 2009-08-05:03:29:20 855661 2009-0805:03:25:54 Name: +FRA/orcl/datafile/appraisal.288.694063519 Tag: APP_INCR RMAN>

c) Switch to that copy of the image file.


RMAN> switch datafile 7 to copy; datafile 7 switched to datafile copy "+FRA/orcl/datafile/appraisal.288.694063519" starting full resync of recovery catalog full resync complete RMAN>

d) Recover data file 7.


RMAN> recover datafile 7; Starting recover at 2009-08-05:03:43:34 using channel ORA_DISK_1 starting media recovery media recovery complete, elapsed time: 00:00:01 Finished recover at 2009-08-05:03:43:35 RMAN>

3) Bring the APPRAISAL tablespace back online.


RMAN> sql "alter tablespace appraisal online"; sql statement: alter tablespace appraisal online starting full resync of recovery catalog full resync complete RMAN>

Oracle Database 11g: Administration Workshop II A - 84

Practice 7-2: Performing Fast Recovery (continued)


4) Report the schema to note the file name for the APPRAISAL tablespace.
RMAN> report schema; Report of database schema for database with db_unique_name ORCL List of Permanent Datafiles =========================== File Size(MB) Tablespace RB segs Datafile Name ---- -------- -------------------- ------- ----------------------1 680 SYSTEM YES +DATA/orcl/datafile/system.260.694050517 2 570 SYSAUX NO +DATA/orcl/datafile/sysaux.266.694050521 3 85 UNDOTBS1 YES +DATA/orcl/datafile/undotbs1.278.694050521 4 5 USERS NO +DATA/orcl/datafile/users.264.694050521 5 100 EXAMPLE NO +DATA/orcl/datafile/example.259.694050813 6 25 BR_TBS NO /home/oracle/BACKUP/br01.dbf 7 25 APPRAISAL NO +FRA/orcl/datafile/appraisal.288.694063519 List of Temporary Files ======================= File Size(MB) Tablespace Maxsize(MB) Tempfile Name ---- -------- -------------------- ----------- ------------------1 28 TEMP 32767 +DATA/orcl/tempfile/temp.265.694050795 RMAN>

Note that you are now using the Flash Recovery Area data file as the open data file for the online tablespace. 5) Determine what happened to the original data file. List the image copies for data file 7, to see if it is listed.
RMAN> list copy of datafile 7; List of Datafile Copies ======================= Key File S Completion Time Ckp SCN Ckp Time ------- ---- - ------------------- ---------- ------------------

Oracle Database 11g: Administration Workshop II A - 85

Practice 7-2: Performing Fast Recovery (continued)


2248 7 A 2009-08-05:03:42:49 856719 2009-0805:03:39:13 Name: +DATA/orcl/datafile/appraisal.256.694061937

Note that it is still there and is listed now as an image copy. But, the reason for switching was because this data file was considered to be on a damaged disk, or the data file itself was corrupted. 6) In a separate terminal window, make sure you are at the ~/labs directory.
$ cd ~/labs

7) Remember that the reason for switching was because this data file was considered to be on a damaged disk, or the data file itself was corrupted in some way. So, run the rm_asm_file.sh script to delete the file. But first, you must ensure that you are pointing to the +ASM instance.
$ . oraenv ORACLE_SID = [orcl] ? +ASM The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid is /u01/app/oracle $ asmcmd rm +DATA/orcl/datafile/appraisal.256.694061937

8) Eventually, you want to refrain from using the Flash Recovery Area as storage for active data files. By now, the hardware or corruption problem has been remedied, so switch the data file back to the original location. a) Back up the data file, specifying the DATA ASM disk group, using the DATAFILE template.
RMAN> backup as copy to destination '+DATA(datafile)' datafile 7; Starting backup at 2009-08-05:03:49:30 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile copy input datafile file number=00007 name=+FRA/orcl/datafile/appraisal.288.694063519 output file name=+DATA/orcl/datafile/appraisal.256.694064971 tag=TAG20090805T034930 RECID=28 STAMP=694064971 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03 Finished backup at 2009-08-05:03:49:33 Starting Control File and SPFILE Autobackup at 2009-0805:03:49:33 piece handle=+FRA/orcl/autobackup/2009_08_05/s_694064975.295.6940649 77 comment=NONE Finished Control File and SPFILE Autobackup at 2009-0805:03:49:42 RMAN>

Oracle Database 11g: Administration Workshop II A - 86

Practice 7-2: Performing Fast Recovery (continued)


b) Take the data file offline.
RMAN> sql "alter database datafile 7 offline"; sql statement: alter database datafile 7 offline RMAN>

c) Switch the data file to the newly made copy.


RMAN> switch datafile 7 to copy; datafile 7 switched to datafile copy "+DATA/orcl/datafile/appraisal.256.694064971" starting full resync of recovery catalog full resync complete RMAN>

d) Report the schema to confirm that the data file location has changed.
RMAN> report schema; Report of database schema for database with db_unique_name ORCL List of Permanent Datafiles =========================== File Size(MB) Tablespace RB segs Datafile Name ---- -------- -------------------- ------- ----------------------1 680 SYSTEM YES +DATA/orcl/datafile/system.260.694050517 2 570 SYSAUX NO +DATA/orcl/datafile/sysaux.266.694050521 3 85 UNDOTBS1 YES +DATA/orcl/datafile/undotbs1.278.694050521 4 5 USERS NO +DATA/orcl/datafile/users.264.694050521 5 100 EXAMPLE NO +DATA/orcl/datafile/example.259.694050813 6 25 BR_TBS NO /home/oracle/BACKUP/br01.dbf 7 25 APPRAISAL NO +DATA/orcl/datafile/appraisal.256.694064971 List of Temporary Files ======================= File Size(MB) Tablespace Maxsize(MB) Tempfile Name ---- -------- -------------------- ----------- ------------------1 28 TEMP 32767 +DATA/orcl/tempfile/temp.265.694050795

Oracle Database 11g: Administration Workshop II A - 87

Practice 7-2: Performing Fast Recovery (continued)


9) Recover the data file.
RMAN> recover datafile 7; Starting recover at 2009-08-05:03:53:27 using channel ORA_DISK_1 starting media recovery media recovery complete, elapsed time: 00:00:00 Finished recover at 2009-08-05:03:53:27 RMAN>

10) Bring the data file online.


RMAN> sql "alter database datafile 7 online"; sql statement: alter database datafile 7 online RMAN>

11) Cross-check the image copy backups and remove the obsolete data file 7 image copy. Exit RMAN when finished.
RMAN> crosscheck copy; released channel: ORA_DISK_1 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=58 device type=DISK specification does not match any control file copy in the repository validation succeeded for datafile copy datafile copy file name=+FRA/orcl/datafile/system.291.694063333 RECID=21 STAMP=694064010 .. validation failed for datafile copy datafile copy file name=+DATA/orcl/datafile/appraisal.256.694061937 RECID=27 STAMP=694064569 .. name=+FRA/orcl/archivelog/2009_08_05/thread_1_seq_2.326.694061 513 RECID=21 STAMP=694061513 validation succeeded for archived log archived log file name=+FRA/orcl/archivelog/2009_08_05/thread_1_seq_3.311.694061 747 RECID=22 STAMP=694061750 Crosschecked 29 objects RMAN> list expired copy; specification does not match any archived log in the repository

Oracle Database 11g: Administration Workshop II A - 88

Practice 7-2: Performing Fast Recovery (continued)


List of Datafile Copies ======================= Key File S Completion Time Ckp SCN Ckp Time ------- ---- - ------------------- ---------- -----------------2248 7 X 2009-08-05:03:42:49 856719 2009-0805:03:39:13 Name: +DATA/orcl/datafile/appraisal.256.694061937 RMAN> delete expired copy; released channel: ORA_DISK_1 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=58 device type=DISK specification does not match any control file copy in the repository specification does not match any archived log in the repository List of Datafile Copies ======================= Key File S Completion Time Ckp SCN Ckp Time ------- ---- - ------------------- ---------- -----------------2248 7 X 2009-08-05:03:42:49 856719 2009-0805:03:39:13 Name: +DATA/orcl/datafile/appraisal.256.694061937 Do you really want to delete the above objects (enter YES or NO)? YES deleted datafile copy datafile copy file name=+DATA/orcl/datafile/appraisal.256.694061937 RECID=27 STAMP=694064569 Deleted 1 EXPIRED objects RMAN> exit

Oracle Database 11g: Administration Workshop II A - 89

Practices for Lesson 8


Practice 8-1: Monitoring RMAN Jobs
In this practice, you execute a long-running RMAN job and monitor its progress to determine how much longer it is expected to run. 1) Point to the ORCL instance, invoke RMAN and delete all obsolete backups. You need to perform a cross-check first, so that the repository is up-to-date.
$ . oraenv orcl $ rman target / catalog rcatowner@rcat recovery catalog database Password: oracle_4U <<<not displayed RMAN> crosscheck backup; . . . RMAN> delete noprompt obsolete; . . .

2) Open a second terminal window. Change to the labs directory and point to the 20cl instance. Invoke SQL*Plus and connect as SYSDBA. You use this second session to monitor a database backup.
$ . oraenv orcl $ sqlplus / as sysdba

3) Return to your first terminal window. In your RMAN session, begin a database backup to the tape device.
RMAN> backup device type sbt database; Starting backup at 2009-08-05:04:23:41 released channel: ORA_DISK_1 allocated channel: ORA_SBT_TAPE_1 channel ORA_SBT_TAPE_1: SID=47 device type=SBT_TAPE channel ORA_SBT_TAPE_1: WARNING: Oracle Test Disk API channel ORA_SBT_TAPE_1: starting full datafile backup set channel ORA_SBT_TAPE_1: specifying datafile(s) in backup set input datafile file number=00001 name=+DATA/orcl/datafile/system.260.694050517 channel ORA_SBT_TAPE_1: starting piece 1 at 2009-0805:04:23:42 channel ORA_SBT_TAPE_1: finished piece 1 at 2009-0805:04:24:37 piece handle=20klt7qe_1_1 tag=TAG20090805T042342 comment=API Version 2.0,MMS Ver sion 8.1.3.0...

Oracle Database 11g: Administration Workshop II A - 90

Practice 8-1: Monitoring RMAN Jobs (continued)


4) Use your SQL*Plus session to monitor the progress of the database backup by querying the V$SESSION_LONGOPS view. By using this view, you can determine whether the backup is progressing normally or hanging. If the backup is progressing normally, the TIME_REMAINING column should be decreasing. Execute the query_longops2.sql script a few times to query V$SESSION_LONGOPS. Since the script contains multiple SELECT statements, you cannot enter slash to rerun the script. You must type or paste the script name for each run. Each time you should see the TIME_REMAINING value decreasing for the SID associated with the backup task. The detail data section pertains to individual channel openings and closings. The aggregate data section describes the entire RMAN job progress.
SQL> @query_longops2.sql Detail Data -------------------------------------Detail Progress Information (per file)

SID START_TIME ELAPSED_SECONDS TIME_REMAINING ---------- ------------------- --------------- -------------40 2009-08-05:05:12:19 20 24

Aggregate Data -----------------------------Aggregate Progress Information

SID SERIAL# CONTEXT SOFAR TOTALWORK %_COMPLETE ------- ---------- ---------- ---------- ---------- ------21 934 4 43999 236000 18.64 SQL> @query_longops2.sql Detail Data -------------------------------------Detail Progress Information (per file)

SID START_TIME ELAPSED_SECONDS TIME_REMAINING ---------- ------------------- --------------- -------------40 2009-08-05:05:13:26 12 35

Aggregate Data -----------------------------Aggregate Progress Information

SID SERIAL# CONTEXT SOFAR TOTALWORK %_COMPLETE -------- ---------- ---------- ---------- ---------- ------21 934 4 131039 236000 55.53

Oracle Database 11g: Administration Workshop II A - 91

Practice 8-1: Monitoring RMAN Jobs (continued)


5) Exit your RMAN and SQL sessions. 6) Run the cleanup_archivelogs.sh script to back up and remove archivelog files. This takes several minutes to run.
$ cd ~/labs $ ./cleanup_archivelogs.sh

7) Run the cleanup_tape_dir.sh script to remove files from the /tape directory.
$ ./cleanup_tape_dir.sh

Oracle Database 11g: Administration Workshop II A - 92

Practices for Lesson 9


In this lesson you learn about diagnosing and repairing block corruption. In these practices, you employ various diagnostic capabilities to solve errors.

Oracle Database 11g: Administration Workshop II A - 93

Practice 9-1: Diagnostic Scenario


In this optional practice, you create a data dictionary corruption that you analyze using Support Workbench and ADRCI. If you begin this practice, you must complete it. 1) Execute the hm_setup.sh script from the labs subdirectory. This script corrupts the data dictionary.
$ . oraenv orcl $ cd ~/labs $ cat hm_setup.sh #!/bin/bash cd /home/oracle/labs sqlplus / as sysdba <<EOF set echo on create table scott.tabjmw(c number) tablespace users; variable obj number; begin select object_id into :obj from dba_objects where owner='SCOTT' and object_name='TABJMW'; end; / print obj; update tab$ set cols=1001 where obj#=:obj; commit; EOF $ ./hm_setup.sh SQL> SQL> SQL> Table created. SQL> SQL> SQL> 2 3 4 PL/SQL procedure successfully completed. SQL> OBJ ---------74657 SQL> 1 row updated. SQL> Commit complete. $

Oracle Database 11g: Administration Workshop II A - 94

Practice 9-1: Diagnostic Scenario (continued)


2) Use EM to trigger a health check on the data dictionary. a) From the Database home page (connected as the SYS user), click Advisor Central at the bottom of the page in the Related Links section. b) On the Advisor Central page, click the Checkers tab. c) On the Checker tabbed page, click Dictionary Integrity Check.

d) On the Run Dictionary Integrity Check page, specify a Run Name: DictCheck and click OK.

e) Back to the Advisor Central Checkers page, you should see a Confirmation message indicating that your check ran successfully. f) Select your DictCheck run and click Details.

g) This takes you to the Run Details Findings tabbed page, where you can see some Data Corruption. In particular, you should see the following finding: SQL dictionary health check: invalid column number 8 on object TAB$ failed.

Oracle Database 11g: Administration Workshop II A - 95

Practice 9-1: Diagnostic Scenario (continued)

The corruption should correspond to a row in TAB$ that references SCOTT.TABJMW. 3) How would you get a report about the previous finding using SQL*Plus?
$ sqlplus / as sysdba SQL> set long 100000 SQL> set pages 999 SQL> select dbms_hm.get_run_report('DictCheck') from dual;
DBMS_HM.GET_RUN_REPORT('DICTCHECK') ------------------------------------------------------------------------------Basic Run Information Run Name : DictCheck Run Id Check Name ntegrity Check Mode Status Start Time 23:12:55.920739 +07:00 End Time 11 +07:00 Error Encountered Source Incident Id Number of Incidents Created : 481 : Dictionary I : MANUAL : COMPLETED : 2009-07-22 : 2009-07-22 23:13:01.5127 : 0 : 0 : 0

Input Paramters for the Run TABLE_NAME=ALL_CORE_TABLES CHECK_MASK=ALL Run Findings And Recommendations Finding Finding Name Finding ID : Dictionary Inconsistency : 482

Oracle Database 11g: Administration Workshop II A - 96

Practice 9-1: Diagnostic Scenario (continued)


Type Status Priority : FAILURE : OPEN : CRITICAL

Message : SQL dictionary health check: i nvalid column number 8 on object TAB$ failed Message : Damaged rowid is AAAAACAABAAAU fPAAC - description: Object SCOTT.TABJMW is referenced

SQL>

4) Navigate to your EM Home page. What do you observe in the Alerts section? You should see a new critical alert (Data Failure) for the previously detected corruption in the Alerts section of the Home page. (It may take a while to appear.)

5) Flush your shared pool and buffer cache first, and then exit and reconnect as the SYS user.
$ sqlplus / as sysdba SQL> alter system flush shared_pool; System altered. SQL> SQL> alter system flush buffer_cache; System altered. SQL> exit $ sqlplus / as sysdba

6) From a SQL*Plus session connected as the SYS user, execute the following statement: select * from scott.tabjmw; Question: What do you observe?
SQL> select * from scott.tabjmw; select * from scott.tabjmw * ERROR at line 1:

Oracle Database 11g: Administration Workshop II A - 97

Practice 9-1: Diagnostic Scenario (continued)


ORA-03113: end-of-file on communication channel Process ID: 14872 Session ID: 66 Serial number: 6259 SQL>

Answer: At first the session seems to hang, then the ORA-03113 error is displayed. 7) Use EM to investigate the previous problem. a) From the EM Home page, you should see one active incident. Click the Active Incident link. If not, click Software and Support. On the Software and Support tabbed page, click Support Workbench in the Support section.

b) On the Support Workbench Problems tabbed page, you should see a new Active Incident whose description is similar to ORA 7445 [qcstda()+690].

c) Click the + icon in the Details column for this problem. d) This shows you the corresponding first-time incident. e) Make a note of the incident number (In this screenshot it is 8729). f) Click that incident number.

g) This takes you to the corresponding Incident Details page. h) On the Incident Details page, in the Application Information section, you can see the cause the incident. It is: "select * from scott.tabjmw".

Oracle Database 11g: Administration Workshop II A - 98

Practice 9-1: Diagnostic Scenario (continued)

You can also see two dump files generated from the Dump Files tabbed page. The first one corresponds to the incident dump file and is located in the ADR directory /u01/app/oracle/diag/rdbms/orcl/orcl/incident/incdir_nnnn n. The second one is the classical corresponding trace file located in /u01/app/oracle/diag/rdbms/orcl/orcl/trace. h) Click the eyeglasses icon in the View Contents column for the incident trace (first row). i) If you did not save your Host credentials previously, then the Host Credentials page is displayed. Enter oracle as username and enter oracle as password, then click Continue. 8) On the Contents page, you see the structured trace information. Expand the incident_dump and custom_assert_dump nodes.

Oracle Database 11g: Administration Workshop II A - 99

Practice 9-1: Diagnostic Scenario (continued)

9) Then click the current sql statement link.

10) This prints the culprit SQL statement in the window below the Trace Map.

11) Click OK. 12) On the Incident Details page again, click the Problem Key link.

13) On the Problem Details page, click Edit to the right of the SR field. 14) Enter 1234 in the SR Number pop-up window that appears and click OK. It is assumed that you already opened an SR (1234) with MetaLink.
Oracle Database 11g: Administration Workshop II A - 100

Practice 9-1: Diagnostic Scenario (continued)

15) You should now see the SR number on the Problem Details page. 16) Click the Activity Log tab. 17) This takes you to the Activity Log tabbed page, on which you can now see your last action on the problem. You can optionally enter a comment here. (If you do, click Add Comment to save your comment.)

18) Back to your terminal window, locate your incident and your health check report in ADR. (Your incident number may be different.)
$ cd $ORACLE_BASE/diag/rdbms/orcl/orcl $ ls alert cdump sweep trace $ cd incident $ ls -la total 12 drwxr-x--- 3 drwxr-x--- 13 drwxr-xr-x 2

hm

incident

incpkg

ir

lck

metadata

stage

oracle dba 4096 Jul 22 23:27 . oracle dba 4096 Jul 20 23:49 .. oracle dba 4096 Jul 22 23:27 incdir_8729

$ cd incdir_8729 $ ls orcl_ora_14872_i8729.trc $ cd ../.. $ ls alert cdump sweep trace

orcl_ora_14872_i8729.trm

hm

incident

incpkg

ir

lck

metadata

stage

Oracle Database 11g: Administration Workshop II A - 101

Practice 9-1: Diagnostic Scenario (continued)


$ cd hm $ ls HMREPORT_DictCheck.hm $ cd .. $

19) Use ADRCI to locate your incident and problem information.


$ adrci ADRCI: Release 11.2.0.0.2 - Beta on Thu Jun 4 20:14:32 2009 ADRCI: Release 11.2.0.1.0 - Production on Thu Jul 23 01:04:39 2009 Copyright (c) 1982, 2009, Oracle and/or its affiliates. rights reserved. ADR base = "/u01/app/oracle" adrci> set homepath diag/rdbms/orcl/orcl adrci> show homes ADR Homes: diag/rdbms/orcl/orcl adrci> show incidents ADR Home = /u01/app/oracle/diag/rdbms/orcl/orcl: ************************************************************** *********** INCIDENT_ID PROBLEM_KEY CREATE_TIME -------------------- ---------------------------------------------------------- ---------------------------------------8729 ORA 7445 [qcstda()+690] 2009-07-22 23:27:26.129000 +07:00 1 rows fetched adrci> All

20) Use Enterprise Manager to package your problem quickly. 21) From the Problem Details page, click Quick Package in the Investigate and Resolve section.

Oracle Database 11g: Administration Workshop II A - 102

Practice 9-1: Diagnostic Scenario (continued)


22) On the Quick Packaging: Create New Package page, leave the default package name (something similar to ORA7445qc_20090723011838) and select No for Send to Oracle Support entry.

23) When the page is refreshed, click Next.

24) On the Quick Packaging: View Contents page, you can see the list of incidents that are part of this package. There should be only one incident in your case. Click Next.

25) On the Quick Packaging: View Manifest page, look at the package name and the path.

Oracle Database 11g: Administration Workshop II A - 103

Practice 9-1: Diagnostic Scenario (continued)

26) Click Next. 27) On the Quick Packaging: Schedule page, ensure Immediately is selected and click Submit.

28) The Processing: Generating Upload File for Package page appears. Wait until it is finished. 29) On the Confirmation page, you should see something similar to: "Generating an upload file for package: ORA7445qc_20090723011838 has failed.

30) Click OK. 31) On the Problem Details page, click the Activity Log tab. 32) Back to the Problem Details Activity Log tabbed page, you should now see two new entries in the log reporting about the package creation for this problem.

33) In the Summary section, click Yes to the right of the Packaged entry. 34) This takes you to the Packages page, from where you can see your package.

Oracle Database 11g: Administration Workshop II A - 104

Practice 9-1: Diagnostic Scenario (continued)


35) Select your package, and click View.

This takes you to the Package Details page, where you can see the package details. 36) Click the Files tab.

On the Files tabbed page, you can now see the Full Package Content view. 37) Use ADRCI to determine the list of existing packages.
$ adrci ADRCI: Release 11.1.0.5.0 - Beta on Thu May 24 07:57:13 2007 Oracle Database 11g: Administration Workshop II A - 105

Practice 9-1: Diagnostic Scenario (continued)


Copyright (c) 1982, 2007, Oracle. All rights reserved.

ADR base = "/u01/app/oracle" adrci> set homepath diag/rdbms/orcl/orcl adrci> query ips_package ADR Home = /u01/app/oracle/diag/rdbms/orcl/orcl: ************************************************************** *********** PACKAGE_ID FLAGS STATUS CREATION_TIME LAST_SEQUENCE LAST_COMPLETE_SEQUEN PROBLEM_ID NAME DESCRIPTION CORRELATION_LEVEL DRIVING_INCIDENT BEGIN_TIME END_TIME UPDATE_TIME LAST_BASE_SEQUENCE -------------------- -------------------- ----------------------------------------------------------- --------------------------------------- -------------------- --------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------- -------------------- --------------------------------------- --------------------------------------- ---------------------------------------- ------------------1 0 4 2009-07-23 01:21:35.798774 +07:00 1 1 1 ORA7445qc_20090723011838 2 8729 2009-07-23 01:21:35.919160 +07:00 0 1 rows fetched adrci> exit

38) After analyzing the problem, you know that the number of columns for TABJMW is wrong in TAB$. Fix the issue by updating TAB$ and close your problem. You can execute hm_fix.sh from the labs subdirectory for that purpose.
$ cd ~/labs $ cat hm_fix.sh #!/bin/bash # For training purpose only sqlplus / as sysdba <<EOF set echo on variable obj number;

Oracle Database 11g: Administration Workshop II A - 106

Practice 9-1: Diagnostic Scenario (continued)


begin select object_id into :obj from dba_objects where owner='SCOTT' and object_name='TABJMW'; end; / print obj; update tab$ set cols=1 where obj#=:obj; commit; EOF $ ./hm_fix.sh SQL> SQL> SQL> 2 3 4 PL/SQL procedure successfully completed. SQL> OBJ ---------74657 SQL> 1 row updated. SQL> Commit complete. $

39) Use Enterprise Manager to close your incident. 40) On the Package Details page, click the problem link to the right of the Problems in Package field in the Summary section.

41) On the Problem Details Incidents tabbed page, select your incident and click Close.

Oracle Database 11g: Administration Workshop II A - 107

Practice 9-1: Diagnostic Scenario (continued)

42) On the Confirmation page, click Yes.

Oracle Database 11g: Administration Workshop II A - 108

Practice 9-2: Repairing Block Corruption


1) To set up this block corruptions practice, use a terminal window, navigate to the $HOME/labs directory, and execute the bc_setup.sh script. This script creates a tablespace called BCTBS and a user called BC. The tablespace is then populated. A backup of the new tablespace is performed. Take a few moments to inspect each script actions before executing it. As usual you point to the orcl instance.
$ cd ~/labs $ . oraenv ORACLE_SID = [orcl] ? orcl $ cat bc_setup.sh #!/bin/bash # For training purpose only # Run as oracle OS user sqlplus -S /nolog > /tmp/setup.log 2>&1 <<EOF connect / as sysdba -- CLEANUP from previous run DROP USER bc CASCADE; DROP TABLESPACE bctbs INCLUDING CONTENTS AND DATAFILES; -- Create tablespace CREATE TABLESPACE bctbs DATAFILE '/home/oracle/BACKUP/bctbs01.dbf' SIZE 10M SEGMENT SPACE MANAGEMENT MANUAL; -- Create user CREATE USER bc IDENTIFIED BY oracle_4U DEFAULT TABLESPACE bctbs QUOTA UNLIMITED ON bctbs; GRANT CREATE SESSION TO bc; -- create table and populate -- be sure table is at least 2 blocks long CREATE TABLE bc.bccopy TABLESPACE bctbs AS SELECT * FROM HR.EMPLOYEES; INSERT INTO bc.bccopy SELECT * FROM bc.bccopy; INSERT INTO bc.bccopy SELECT * FROM bc.bccopy; EOF

Oracle Database 11g: Administration Workshop II A - 109

Practice 9-2: Repairing Block Corruption (continued)


#-- Create backup of the bctbs tablespace rman target / > /tmp/rman.log 2>&1 <<EOF BACKUP AS COPY TABLESPACE bctbs; EOF #-- update the table sqlplus -S /nolog >> /tmp/setup.log 2>&1 <<EOF connect / as sysdba UPDATE bc.bccopy SET salary = salary+1; COMMIT; EOF $ ./bc_setup.sh

2) Log into SQL*Plus as the SYS user and execute the bc_critical script, which corrupts the data file. Enter your displayed block number.
$ sqlplus / as sydba SQL> @bc_critical Connected. FILE_NO BLOCK_NO ---------- ---------7 129 System altered. 'Enter Block number when prompted' Enter value for block_no: 129 0+1 records in 0+1 records out 80 bytes (80 B) copied, 6.1724e-05 seconds, 1.3 MB/s 0+1 records in 0+1 records out 79 bytes (79 B) copied, 5.7166e-05 seconds, 1.4 MB/s SELECT * from bc.bccopy * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 7, block # 129) ORA-01110: data file 7: '/home/oracle/BACKUP/bctbs01.dbf' SQL>

Oracle Database 11g: Administration Workshop II A - 110

Practice 9-2: Repairing Block Corruption (continued)


3) Use RMAN to back up the TBSBC tablespace. What happens?
$ rman target / nocatalog RMAN> backup tablespace bctbs; Starting backup at 2009-07-23:16:21:16 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=1 device type=DISK channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00007 name=/home/oracle/BACKUP/bctbs01.dbf channel ORA_DISK_1: starting piece 1 at 2009-07-23:16:21:16 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03009: failure of backup command on ORA_DISK_1 channel at 07/23/2009 16:21:23 ORA-19566: exceeded limit of 0 corrupt blocks for file /home/oracle/BACKUP/bctbs01.dbf RMAN> exit

The backup fails upon encountering the first corrupt block. 4) Use the RMAN list failure command to provide details about the errors.
$ rman target / nocatalog Recovery Manager: Release 11.1.0.6.0 - Production on Mon Aug 27 09:49:50 2007 connected to target database: ORCL (DBID=1158576740) RMAN> list failure detail; RMAN> List of Database Failures ========================= Failure ID Priority Status Time Detected Summary ---------- -------- --------- ------------------- ------562 HIGH OPEN 2009-07-23:16:11:04 Datafile 7: '/home/oracle/BACKUP/bctbs01.dbf' contains one or more corrupt blocks Impact: Some objects in tablespace BCTBS might be unavailable List of child failures for parent failure ID 562 Failure ID Priority Status Time Detected Summary

Oracle Database 11g: Administration Workshop II A - 111

Practice 9-2: Repairing Block Corruption (continued)


---------- -------- --------- ------------------- ------571 HIGH OPEN 2009-07-23:16:11:05 Block 130 in datafile 7: '/home/oracle/BACKUP/bctbs01.dbf' is media corrupt Impact: Object BCCOPY owned by BC might be unavailable 565 HIGH OPEN 2009-07-23:16:11:04 Block 129 in datafile 7: '/home/oracle/BACKUP/bctbs01.dbf' is media corrupt Impact: Object BCCOPY owned by BC might be unavailable

Note: Do not close this RMAN session. 5) Alternatively, in another terminal window, you can query the V$IR_FAILURE view to view details about the failure:
$ sqlplus / as sysdba SQL> set pages 999 SQL> select failure_id, time_detected, description, impacts from V$IR_FAILURE where impacts like '%BC%'; FAILURE_ID TIME_DETECTED ---------- ------------------DESCRIPTION ------------------------------------------------------------------------------IMPACTS ------------------------------------------------------------------------------562 2009-07-23:16:11:04 Datafile 7: '/home/oracle/BACKUP/bctbs01.dbf' contains one or more corrupt block s Some objects in tablespace BCTBS might be unavailable 565 2009-07-23:16:11:04 Block 129 in datafile 7: '/home/oracle/BACKUP/bctbs01.dbf' is media corrupt Object BCCOPY owned by BC might be unavailable 571 2009-07-23:16:11:05 Block 130 in datafile 7: '/home/oracle/BACKUP/bctbs01.dbf' is media corrupt Object BCCOPY owned by BC might be unavailable

SQL> SQL> exit

Oracle Database 11g: Administration Workshop II A - 112

Practice 9-2: Repairing Block Corruption (continued)


6) Continue in your RMAN session. Execute the RMAN advise failure all command to view recovery options.
RMAN> advise failure all; List of Database Failures ========================= Failure ID Priority Status Time Detected ---------- -------- --------- ------------------562 HIGH OPEN 2009-07-23:16:11:04 '/home/oracle/BACKUP/bctbs01.dbf' contains one or blocks Summary ------Datafile 7: more corrupt

analyzing automatic repair options; this may take some time using channel ORA_DISK_1 allocated channel: ORA_SBT_TAPE_1 channel ORA_SBT_TAPE_1: SID=24 device type=SBT_TAPE channel ORA_SBT_TAPE_1: WARNING: Oracle Test Disk API analyzing automatic repair options complete Mandatory Manual Actions ======================== no manual actions available Optional Manual Actions ======================= no manual actions available Automated Repair Options ======================== Option Repair Description ------ -----------------1 Recover multiple corrupt blocks in datafile 7 Strategy: The repair includes complete media recovery with no data loss Repair script: /u01/app/oracle/diag/rdbms/orcl/orcl/hm/reco_3952673413.hm RMAN>

Note: An advise failure command must precede a repair command. So, do not execute other commands, but continue with the next step.

Oracle Database 11g: Administration Workshop II A - 113

Practice 9-2: Repairing Block Corruption (continued)


7) Continue in your RMAN session and execute the RMAN repair failure command . Enter YES, when asked if you want to execute the repair. Note: Your actual script name is most likely different than the example.
RMAN> repair failure; Strategy: The repair includes complete media recovery with no data loss Repair script: /u01/app/oracle/diag/rdbms/orcl/orcl/hm/reco_3952673413.hm contents of repair script: # block media recovery for multiple blocks recover datafile 7 block 129 to 130; Do you really want to execute the above repair (enter YES or NO)? YES executing repair script Starting recover at 2009-07-23:16:35:34 using channel ORA_DISK_1 using channel ORA_SBT_TAPE_1 ORA-01013: user requested cancel of current operatio channel ORA_SBT_TAPE_1: restoring block(s) from datafile copy +FRA/orcl/datafile/bctbs.296.692986085 starting media recovery media recovery complete, elapsed time: 00:00:03 Finished recover at 2009-07-23:16:35:38 repair failure complete RMAN>

8) List all failures in RMAN. There should by none.


RMAN> list failure all; no failures found that match specification RMAN> exit

9) To clean up the practice environment, run the bc_cleanup.sh script from the $HOME/labs directory.
$ cat bc_cleanup.sh #!/bin/bash # For training purpose only #-- Cleanup the tablespace, and user from the corrupt blocks

Oracle Database 11g: Administration Workshop II A - 114

Practice 9-2: Repairing Block Corruption (continued)


sqlplus -S /nolog > /tmp/cleanup.lo 2>&1 <<EOF connect / as sysdba -- CLEANUP from previous run DROP USER bc CASCADE; DROP TABLESPACE bctbs INCLUDING CONTENTS AND DATAFILES; EXIT; EOF $ ./bc_cleanup.sh

Oracle Database 11g: Administration Workshop II A - 115

Practices for Lesson 10


Flashback Transaction Backout is a logical recovery option to roll back a specific transaction and dependent transactions while the database remains online. A dependent transaction is related by a write-after-write (WAW) relationship, in which a transaction modifies the same data that was changed by the target transaction, or a primary-key constraint relationship, in which a transaction reinserts the primary-key value that was deleted by the target transaction. Flashback Transaction utilizes undo and the redo generated for undo blocks to create and execute a compensating transaction for reverting the affected data to its original state.

Oracle Database 11g: Administration Workshop II A - 116

Practice 10-1: Flashback Transaction Backout


In this practice, you view a demonstration of backing out erroneous transactions. 1) Click the oracles Home icon on your desktop. 2) Navigate to the /home/oracle/demos/fbt_backout directory. 3) Double-click the fbt_backout_viewlet_swf.html file. 4) In the Run or Display window, click Display and view the presentation. 5) Use the controls at the bottom of the viewlet window to start, pause and stop the presentation, as suits your personal learning style. 6) Uninterrupted viewing of the demos takes about ten minutes. When you have finished viewing the presentation, close your Web browser window.

Oracle Database 11g: Administration Workshop II A - 117

Practices for Lesson 11


These practices cover the use of Flashback Data Archive.

Oracle Database 11g: Administration Workshop II A - 118

Practice 11-1: Using Flashback Data Archive


In this practice, you use Oracle Total Recall. 1) Log into SQL*Plus as the SYS user and execute the flada_setup script from the $HOME/labs directory. The setup script creates a second undo tablespace, a small FLA_TBS1 tablespace, and the ARCHIVE_ADMIN user with the oracle_4U password. The password is case-sensitive by default. Take a few moments to inspect the script before executing it.
$ sqlplus / as sysdba SQL> @flada_setup Connected. SQL> set serveroutput on SQL> -- set verify on SQL> set term on SQL> set lines 200 SQL> set pages 44 SQL> set pause on SQL> SQL> /*== Create a tablespace for your flashback data archive ==*/ SQL> DROP TABLESPACE fla_tbs1 INCLUDING CONTENTS 2 / DROP TABLESPACE fla_tbs1 INCLUDING CONTENTS * ERROR at line 1: ORA-00959: tablespace 'FLA_TBS1' does not exist SQL> CREATE SMALLFILE TABLESPACE fla_tbs1 2 DATAFILE '$HOME/BACKUP/fla_tbs01.dbf' 3 SIZE 10M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE 32767M 4 NOLOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO 5 / Tablespace created. SQL> pause Press [Enter] to continue... Press [Enter] to continue... SQL> SQL> /*== Create a second undo tablespace for testing ==*/ SQL> DROP TABLESPACE undotbs2 INCLUDING CONTENTS 2 / DROP TABLESPACE undotbs2 INCLUDING CONTENTS * ERROR at line 1: ORA-00959: tablespace 'UNDOTBS2' does not exist SQL> CREATE SMALLFILE UNDO TABLESPACE undotbs2 2 DATAFILE '$HOME/BACKUP/undotbs02.dbf' 3 SIZE 105M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE 32767M

Oracle Database 11g: Administration Workshop II A - 119

Practice 11-1: Using Flashback Data Archive (continued)


4 / Tablespace created. SQL> pause Press [Enter] to continue... Press [Enter] to continue... SQL> /*== Create an ARCHIVE_ADMIN user like the HR user ==*/ SQL> /*== with FLA_TBS1 default tablespace ==*/ SQL> CREATE USER ARCHIVE_ADMIN PROFILE DEFAULT IDENTIFIED BY "oracle_4U" 2 DEFAULT TABLESPACE FLA_TBS1 TEMPORARY TABLESPACE TEMP 3 ACCOUNT UNLOCK; User created. SQL> pause Press [Enter] to continue... Press [Enter] to continue... SQL> GRANT ALTER SESSION TO ARCHIVE_ADMIN; Grant succeeded. SQL> GRANT CREATE DATABASE LINK TO ARCHIVE_ADMIN; Grant succeeded. SQL> GRANT CREATE SEQUENCE TO ARCHIVE_ADMIN; Grant succeeded. SQL> GRANT CREATE SESSION TO ARCHIVE_ADMIN; Grant succeeded. SQL> GRANT CREATE SYNONYM TO ARCHIVE_ADMIN; Grant succeeded. SQL> GRANT CREATE VIEW TO ARCHIVE_ADMIN; Grant succeeded. SQL> GRANT UNLIMITED TABLESPACE TO ARCHIVE_ADMIN; Grant succeeded. SQL> GRANT EXECUTE ON SYS.DBMS_STATS TO ARCHIVE_ADMIN; Grant succeeded. SQL> GRANT CONNECT, RESOURCE TO ARCHIVE_ADMIN; Grant succeeded. SQL> SQL> /*== Setup for Flashback Data Archive completed ==*/ SQL> /*== The ARCHIVE_ADMIN user has the password: oracle_4U ==*/ SQL> pause Press [Enter] to continue... Press [Enter] to continue... SQL>

Oracle Database 11g: Administration Workshop II A - 120

Practice 11-1: Using Flashback Data Archive (continued)


2) To give the ARCHIVE_ADMIN user administrative privileges for creating, maintaining, and dropping flashback data archives, execute the following command as the SYS user: GRANT FLASHBACK ARCHIVE ADMINISTER TO archive_admin;
$ sqlplus / as sysdba SQL> GRANT FLASHBACK ARCHIVE ADMINISTER TO archive_admin; Grant succeeded. SQL> exit

3) In SQL*Plus, connect as the ARCHIVE_ADMIN user with the ARCHIVE_ADMIN password. Note: The password is case-sensitive; the username is not case-sensitive.
$ sqlplus archive_admin Enter password: oracle_4U SQL> <<< not displayed

4) To create a flashback data archive, execute the following command:


CREATE FLASHBACK ARCHIVE fla1 TABLESPACE fla_tbs1 QUOTA 10M RETENTION 1 YEAR / Entering the command is recommended for better retention, but if typing is a difficulty, you can also execute the flada_create.sql script. SQL> CREATE FLASHBACK ARCHIVE fla1 TABLESPACE fla_tbs1 QUOTA 10M RETENTION 1 YEAR / 2 3 4 5 Flashback archive created. SQL>

5) Give the privilege to use the FLA1 archive to the HR user, by executing the following command:
GRANT FLASHBACK ARCHIVE on FLA1 to HR; SQL> GRANT FLASHBACK ARCHIVE on FLA1 to HR; Grant succeeded. SQL>

Oracle Database 11g: Administration Workshop II A - 121

Practice 11-1: Using Flashback Data Archive (continued)


6) You now switch to the role of a flashback archive user. Connect as the HR user with the oracle_4U password. To enable this flashback data archive for the EMPLOYEES table, execute the following command: ALTER TABLE hr.employees FLASHBACK ARCHIVE fla1;
SQL> connect HR Enter password: oracle_4U <<< not displayed Connected. SQL> ALTER TABLE hr.employees FLASHBACK ARCHIVE fla1; Table altered. SQL>

7) To view and increase the salary of Mr. Fox three times by 1000, execute the flada_dml script as the HR user. This produces activity in the flashback data archive.
SQL> @flada_dml SQL> REM "********************************************** " SQL> REM "For demo purposes ONLY: Flashback Data Archive " SQL> SQL> set echo on SQL> set serveroutput on SQL> -- set verify on SQL> set term on SQL> set lines 200 SQL> set pages 44 SQL> set pause on pause "Press [Enter] to continue..." SQL> SQL> /*== Query the current salary for Mr. Fox ==*/ SQL> SQL> SELECT employee_id, last_name, salary 2 FROM hr.employees 3 WHERE last_name = 'Fox' 4 / Press [Enter] to continue... EMPLOYEE_ID LAST_NAME SALARY ----------- ------------------------- ---------170 Fox 9600 1 row selected. SQL> SQL> pause Press [Enter] to continue... Press [Enter] to continue... SQL> SQL> /*== Increase the salary three times by 1000 ==*/ SQL> SQL> UPDATE hr.employees

Oracle Database 11g: Administration Workshop II A - 122

Practice 11-1: Using Flashback Data Archive (continued)


2 3 4 SET salary = salary + 1000 WHERE last_name = 'Fox' /

1 row updated. SQL> COMMIT 2 / Commit complete. SQL> 2 3 4 UPDATE hr.employees SET salary = salary + 1000 WHERE last_name = 'Fox' /

1 row updated. SQL> COMMIT 2 / Commit complete. SQL> 2 3 4 UPDATE hr.employees SET salary = salary + 1000 WHERE last_name = 'Fox' /

1 row updated. SQL> COMMIT 2 / Commit complete. SQL> pause Press [Enter] to continue... Press [Enter] to continue... SQL> SQL> /*== Query the up-to-date value for Mr. Fox ==*/ SQL> SQL> SELECT employee_id, last_name, salary 2 FROM hr.employees 3 WHERE last_name = 'Fox' 4 / Press [Enter] to continue... EMPLOYEE_ID LAST_NAME SALARY ----------- ------------------------- ---------170 Fox 12600 1 row selected.

Oracle Database 11g: Administration Workshop II A - 123

Practice 11-1: Using Flashback Data Archive (continued)


SQL> SQL> pause Press [Enter] to continue... Press [Enter] to continue... SQL> SQL> set pause off SQL>

8) To query the internal name of the archive table, execute the following command:
SELECT * FROM USER_FLASHBACK_ARCHIVE_TABLES; SQL> SELECT * FROM USER_FLASHBACK_ARCHIVE_TABLES; TABLE_NAME OWNER_NAME ------------------------------ -----------------------------FLASHBACK_ARCHIVE_NAME -------------------------------------------------------------ARCHIVE_TABLE_NAME ----------------------------------------------------EMPLOYEES HR FLA1 SYS_FBA_HIST_73137 1 row selected. SQL>

9) To ensure that the following queries use the archive tables, and not the undo, switch the undo tablespaces and drop the old one. As a SYS user, assign UNDOTBS2 as the current undo tablespace, by using Enterprise Manager > Server> Automatic Undo Management > Change Tablespace button, selecting the UNDOTBS2 tablespace, and clicking OK, or by executing the following commands:
connect / as sysdba ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2; DROP TABLESPACE UNDOTBS1; SQL> connect / as sysdba Connected. SQL> ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2; System altered. SQL> DROP TABLESPACE UNDOTBS1; Tablespace dropped.

Note: If you execute the DROP command too quickly, while internal processing still occurs, you might receive an ORA-30013 error. Wait several minutes and try again.

Oracle Database 11g: Administration Workshop II A - 124

Practice 11-1: Using Flashback Data Archive (continued)


10) As the HR user, choose a time after the creation of the flashback data archive and before you executed the erroneous DML. To view Mr. Foxs employee record as of that time, execute the following query (replace '15' MINUTE with your chosen historic date, format examples: '50' SECOND, '10' DAY, '5' MONTH): Note: You receive an ORA-1466 error, if the time you specify a time before the flashback data archive was started. Reduce the time to a smaller interval and try again. If you still see the salary of 12600, increase your time interval.
SELECT employee_id, last_name, salary FROM hr.employees AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '15' MINUTE) WHERE last_name = 'Fox';

Entering the command is recommended for better retention and selecting the right time interval, but if typing is a difficulty, you can also execute the flada_sel.sql script.
SQL> connect hr Ener password: oracle_4U <<< not displayed Connected. SQL> SELECT employee_id, last_name, salary 2 FROM hr.employees AS OF TIMESTAMP 3 (SYSTIMESTAMP - INTERVAL '15' MINUTE) 4 WHERE last_name = 'Fox'; EMPLOYEE_ID LAST_NAME SALARY ----------- ------------------------- ---------170 Fox 9600 1 row selected. SQL>

11) As the HR user, you realize that the recent updates were mistakes. To revert to the original values for your chosen historic date (for example, ten minutes ago), execute the following command (replace '15' MINUTE with your chosen historic date):
UPDATE hr.employees SET salary = (SELECT salary FROM hr.employees AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '15' MINUTE) WHERE last_name = 'Fox') WHERE last_name = 'Fox';

Entering the command is recommended for better retention and selecting the right time interval, but if typing is a difficulty, you can also execute the flada_upd.upd script.
SQL> UPDATE hr.employees 2 SET salary = (SELECT salary FROM hr.employees 3 AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '15' MINUTE) 4 WHERE last_name = 'Fox')

Oracle Database 11g: Administration Workshop II A - 125

Practice 11-1: Using Flashback Data Archive (continued)


5 WHERE last_name = 'Fox'; 1 row updated. SQL>

12) From your SQL*Plus session, connect to the database as the SYS user and list the data dictionary views available to you. Execute the flada_list1.sql file:
SQL> connect / as sysdba Connected. SQL> @flada_list1 SQL> REM "******************************************* " SQL> REM "For demo purposes ONLY:" SQL> SQL> connect / as sysdba Connected. SQL> SQL> set echo on SQL> set serveroutput on SQL> -- set verify on SQL> set term on SQL> set lines 200 SQL> set pages 44 SQL> set pause on pause "Press [Enter] to continue ..." SQL> SQL> /*== To list the available data dictioary views ==*/ SQL> SQL> SELECT table_name 2 FROM dict 3 WHERE table_name LIKE '%FLASHBACK_ARCHIVE%' 4 / Press [Enter] to continue ... TABLE_NAME -----------------------------DBA_FLASHBACK_ARCHIVE DBA_FLASHBACK_ARCHIVE_TABLES DBA_FLASHBACK_ARCHIVE_TS USER_FLASHBACK_ARCHIVE USER_FLASHBACK_ARCHIVE_TABLES SQL> pause Press [Enter] to continue ... Press [Enter] to continue ... SQL> SQL> SQL> SQL> SQL> SQL> SQL>

col col col col

FLASHBACK_ARCHIVE_NAME format A25 ARCHIVE_TABLE_NAME format A20 TABLE_NAME format A12 OWNER_NAME format A10

DESC dba_flashback_archive

Oracle Database 11g: Administration Workshop II A - 126

Practice 11-1: Using Flashback Data Archive (continued)


Name Null? Type ---------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------OWNER_NAME VARCHAR2(30) FLASHBACK_ARCHIVE_NAME NOT NULL VARCHAR2(255) FLASHBACK_ARCHIVE# NOT NULL NUMBER RETENTION_IN_DAYS NOT NULL NUMBER CREATE_TIME TIMESTAMP(9) LAST_PURGE_TIME TIMESTAMP(9) STATUS VARCHAR2(7) SQL> pause Press [Enter] to continue ... Press [Enter] to continue ... SQL> SQL> /*== To query the time when the flashback data archive(s) have been created ==*/ SQL> SQL> SELECT flashback_archive_name, create_time, status 2 FROM dba_flashback_archive 3 / Press [Enter] to continue ... FLASHBACK_ARCHIVE_NAME CREATE_TIME STATUS ------------------------- -------------------------------------------------------------------------- ------FLA1 05-JUN-09 11.06.09.000000000 PM SQL> pause Press [Enter] to continue ... Press [Enter] to continue ... SQL> SQL> DESC dba_flashback_archive_ts Name Null? Type ---------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------FLASHBACK_ARCHIVE_NAME NOT NULL VARCHAR2(255)

Oracle Database 11g: Administration Workshop II A - 127

Practice 11-1: Using Flashback Data Archive (continued)


FLASHBACK_ARCHIVE# NOT NULL NUMBER TABLESPACE_NAME NOT NULL VARCHAR2(30) QUOTA_IN_MB VARCHAR2(40) SQL> pause Press [Enter] to continue ... Press [Enter] to continue ... SQL> SQL> /*== To list the tablespace(s), which are used for flashback data archives ==*/ SQL> SQL> SELECT * 2 FROM dba_flashback_archive_ts 3 / Press [Enter] to continue ... FLASHBACK_ARCHIVE_NAME FLASHBACK_ARCHIVE# TABLESPACE_NAME QUOTA_IN_MB ------------------------- ------------------ ----------------------------- ---------------------------------------FLA1 1 FLA_TBS1 10 SQL> pause Press [Enter] to continue ... Press [Enter] to continue ... SQL> SQL> DESC dba_flashback_archive_tables Name Null? Type ---------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------TABLE_NAME NOT NULL VARCHAR2(30) OWNER_NAME NOT NULL VARCHAR2(30) FLASHBACK_ARCHIVE_NAME NOT NULL VARCHAR2(255) ARCHIVE_TABLE_NAME VARCHAR2(53) STATUS VARCHAR2(8) SQL> pause Press [Enter] to continue ... Press [Enter] to continue ... SQL> Oracle Database 11g: Administration Workshop II A - 128

Practice 11-1: Using Flashback Data Archive (continued)


SQL> /*== Query the table name(s), the owner name(s), and ==*/ SQL> /*== the internal "history" table name(s) of the flashback data archive ==*/ SQL> SQL> SELECT * 2 FROM dba_flashback_archive_tables 3 / Press [Enter] to continue ...
TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME ----------- ---------- ---------------------- -----------------EMPLOYEES HR FLA1 SYS_FBA_HIST_73137

SQL> SQL> pause Press [Enter] to continue ... Press [Enter] to continue ... SQL> clear columns SQL>

13) As the HR user (with the oracle_4U password), list the FLASHBACK_ARCHIVE data dictionary tables, which are accessible to you. You can execute the flada_list2 script, if you prefer to not enter the commands directly.
SQL> connect hr Enter password: oracle_4U <<< not dislplayed Connected. SQL> @flada_list2 SQL> SELECT table_name 2 FROM dict 3 WHERE table_name LIKE '%FLASHBACK_ARCHIVE%' 4 / Press [Enter] to continue ... TABLE_NAME -----------------------------USER_FLASHBACK_ARCHIVE USER_FLASHBACK_ARCHIVE_TABLES SQL> pause Press [Enter] to continue ... Press [Enter] to continue ... SQL> exit $

14) To practice additional flashback data archive maintenance tasks, perform the following steps: Log into SQL*Plus as the ARCHIVE_ADMIN user.
$ sqlplus ARCHIVE_ADMIN Enter password: oracle_4U <<< not displayed SQL>

Oracle Database 11g: Administration Workshop II A - 129

Practice 11-1: Using Flashback Data Archive (continued)


15) Data in the flashback data archive is automatically purged when the retention time expires. However, you can also purge data explicitly with the following command to purge data older than two minutes:
ALTER FLASHBACK ARCHIVE fla1 PURGE BEFORE TIMESTAMP (SYSTIMESTAMP - INTERVAL '2' MINUTE); SQL> ALTER FLASHBACK ARCHIVE fla1 PURGE BEFORE TIMESTAMP(SYSTIMESTAMP - INTERVAL '2' MINUTE); Flashback archive altered. SQL>

16) Execute the flada_tbs2.sql script to create an additional 10 MB tablespace as the SYS user.
SQL> @flada_tbs2 Connected. SQL> set serveroutput on SQL> -- set verify on SQL> set term on SQL> set lines 200 SQL> set pages 44 SQL> set pause on SQL> SQL> /*== Create another tablespace ==*/ SQL> SQL> DROP TABLESPACE fla_tbs2 INCLUDING CONTENTS 2 / DROP TABLESPACE fla_tbs2 INCLUDING CONTENTS * ERROR at line 1: ORA-00959: tablespace 'FLA_TBS2' does not exist

SQL> SQL> CREATE SMALLFILE TABLESPACE fla_tbs2 2 DATAFILE '$HOME/BACKUP/fla_tbs02.dbf' 3 SIZE 10M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE 32767M 4 NOLOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO 5 / Tablespace created. SQL> pause Press [Enter] to continue... Press [Enter] to continue... SQL>

Oracle Database 11g: Administration Workshop II A - 130

Practice 11-1: Using Flashback Data Archive (continued)


17) As the ARCHIVE_ADMIN user, add 5 MB of the FLA_TBS2 tablespace to the FLA1 flashback data archive.
SQL> connect ARCHIVE_ADMIN Enter password: oracle_4U <<< not displayed Connected. SQL> ALTER FLASHBACK ARCHIVE fla1 ADD TABLESPACE fla_tbs2 QUOTA 5M; Flashback archive altered. SQL>

18) All tables in one specific flashback data archive have the same retention time. Change the retention time of the FLA1 flashback data archive to two years.
SQL> ALTER FLASHBACK ARCHIVE fla1 MODIFY RETENTION 2 YEAR; Flashback archive altered. SQL>

19) As the ARCHIVE_ADMIN user, drop the FLA1 flashback data archive. Note: Dropping a flashback data archive includes dropping the internal tamperproofed history table. You cannot drop this table directly due to auditing and security requirements. Dropping a flashback data archive does not drop the tablespaces in which they are stored, because the tablespaces might contain other data.
SQL> DROP FLASHBACK ARCHIVE fla1; Flashback archive dropped. SQL>

20) Wait a minute or two and connect as SYS user; clean up your environment by executing the flada_cleanup.sql script.
SQL> @flada_cleanup SQL> REM Execute this script script for training purposes only SQL> REM Undo Cleanup for Flashback Data Archive SQL> REM Execute script as SYSDBA SQL> SQL> set echo on SQL> set serveroutput on SQL> set term on SQL> set lines 200 SQL> set pause on SQL> SQL> connect / as sysdba Connected. SQL> set echo off Tablespace created.

Oracle Database 11g: Administration Workshop II A - 131

Practice 11-1: Using Flashback Data Archive (continued)


SQL> SQL> ALTER SYSTEM SET UNDO_TABLESPACE=undotbs1 2 / System altered. SQL> DROP TABLESPACE fla_tbs1 INCLUDING CONTENTS 2 / Tablespace dropped. SQL> DROP TABLESPACE fla_tbs2 INCLUDING CONTENTS 2 / Tablespace dropped. SQL> SQL> DROP TABLESPACE undotbs2 INCLUDING CONTENTS 2 / Tablespace dropped. SQL> host rm -f $HOME/BACKUP/fla_tbs01.dbf SQL> host rm -f $HOME/BACKUP/fla_tbs02.dbf SQL> host rm -f $HOME/BACKUP/undotbs02.dbf SQL> prompt Flashback Data Archive cleanup complete. Flashback Data Archive cleanup complete. SQL> pause Press [Enter] to continue... Press [Enter] to continue... SQL> exit

Note: If you execute the DROP command too quickly while internal processing is still occurring, you might receive an ORA-30013 error. Wait and try again.

Oracle Database 11g: Administration Workshop II A - 132

Practice 11-2: Using the Recycle Bin


In this practice you use the recycle bin to restore dropped objects. You can do this with SQL commands or with Enterprise Manager. For the former, perform steps 1 through 4. For the latter, perform step 1, and then steps 5 through 11. 1) This workshop scenario simulates loss of data. Point to the orcl instance. To introduce the problem, change directory to $HOME/labs and run the recyclebin_lab.sh as shown:
$ cd $HOME/labs $. oraenv ORACLE_SID = [orcl] ? orcl $ ./recyclebin_lab.sh SQL> SQL> Table dropped. SQL> SQL> select * from hr.departments * ERROR at line 1: ORA-00942: table or view does not exist

SQL> select * from hr.departments * ERROR at line 1: ORA-00942: table or view does not exist

SQL> select * from hr.departments * ERROR at line 1: ORA-00942: table or view does not exist

2) The lab script drops the HR.DEPARTMENTS table including indexes, restraints, and so on. Query the DBA_RECYCLE_BIN view to confirm this.
$ sqlplus / as sysdba SQL> COL OWNER FORMAT A5 SQL> SELECT owner, original_name, droptime FROM dba_recyclebin WHERE owner = 'HR'; OWNER ----HR HR HR ORIGINAL_NAME -------------------------------DEPT_ID_PK DEPARTMENTS DEPT_LOCATION_IX DROPTIME ------------------2009-06-06:15:31:05 2009-06-06:15:31:05 2009-06-06:15:31:04

3) Use Flashback Table to restore the dropped objects. You can use Flashback Table through Enterprise Manager or through SQL*Plus. To flash back the table using Enterprise Manager, go to step 5.

Oracle Database 11g: Administration Workshop II A - 133

Practice 11-2: Using the Recycle Bin (continued)


SQL> FLASHBACK TABLE hr.departments TO BEFORE DROP; Flashback complete. SQL>

4) Perform a select operation against the HR.DEPARTMENTS table to confirm the success of the Flashback Table operation, then exit
SQL> SELECT * FROM hr.departments; DEPARTMENT_ID ------------10 20 30 . . . SQL> exit DEPARTMENT_NAME MANAGER_ID LOCATION_ID -------------------------- ---------- ----------Administration 200 1700 Marketing 201 1800 Purchasing 114 1700

5) The HR.DEPARTMENTS table can also be flashed back using Enterprise Manager. 6) Log in as the SYS user with the oracle_4U password and connect as SYSDBA. 7) In EM, navigate to Schema > Tables. 8) Click the Recycle Bin button, enter HR in the Schema Name field and click Go.

9) Click the + icon before DEPARTMENTS, to see the dependant objects.

Oracle Database 11g: Administration Workshop II A - 134

Practice 11-2: Using the Recycle Bin (continued)

10) Select DEPARTMENTS from the list and click the Flashback Drop button.

11) The Perform Object Level Recovery: Rename page allows you to rename the restored object. Accept the default or original name and click Next.

12) On the Review page, inspect the Impact Analysis. Note that the table and dependent objects are to be restored and note the names they will be restored to.

Oracle Database 11g: Administration Workshop II A - 135

Practice 11-2: Using the Recycle Bin (continued)

13) Optionally, click the Show SQL button, review the SQL and click OK.

14) Click Submit.

15) Click OK on the Confirmation page. 16) To view table data in EM: a) Click the Tables breadcrumb. b) Enter HR as Schema and click Go. c) Select the DEPARTMENTS table, then the View Data Actions, and click Go to execute the action.

Oracle Database 11g: Administration Workshop II A - 136

Practice 11-2: Using the Recycle Bin (continued)


17) After confirming that the data are restored, click OK. Then exit EM.

Oracle Database 11g: Administration Workshop II A - 137

Practices for Lesson 12


In this lesson you learn to flash back an entire database. Background: In this scenario, the HR reorganization job runs prematurely, and you must undo its changes. The changes are such that you are not sure what tables are involved. So, you decide (now that flashback logging has been enabled) to use Flashback Database instead of performing a recovery.

Oracle Database 11g: Administration Workshop II A - 138

Practice 12-1: Flashback Database


Flash back an entire database. Unless specified otherwise, you should log in as the SYS user as SYSDBA through SQL*Plus or Database Control. 1) Using Enterprise Manager, turn on flashback logging for your database (enable Flashback Database). a) In Database Control, click the Availability tab, and then the Recovery Settings link in the Backup/Recovery Setup region. b) Scroll down and select the Enable Flashback Database check box. Click Apply. On the Confirmation page, click Yes to proceed with the database shutdown.

c) On the Confirmation page, click Yes to restart your database. d) On the Restart Database: Specify Host and Target Database Credentials, ensure that oracle is entered as username and as password. Then click OK. e) Optionally, on the Restart Database: Confirmation page, click Show SQL, review the SQL and click Return.

Oracle Database 11g: Administration Workshop II A - 139

Practice 12-1: Flashback Database (continued)

f) Click Yes on the Restart Database: Confirmation page. g) Click Refresh and wait for the database to restart. (If you receive an internal error, just cllick OK and than again Refresh.) - You may need to click Refresh several times. 2) After the database has been restarted with flashback logging enabled, note the lowest SCN of the database a) On the Database home page, click the Flashback Time link in the High Availability section. [45] b) On the Recovery Settings page, at the bottom of the Flash Recovery section, note the Lowest SCN [[46r]] (1136492 in this example). 3) Alternatively, you can view and note the current SCN of the database by querying the V$DATABASE view. Note: You will need the SCN later. SCN: ________________ a) Enter the following:
$ cd $HOME/labs $ sqlplus / as sysdba SQL> SELECT current_scn FROM v$database; CURRENT_SCN ----------1137367

4) Note the sum of the salaries in the HR.EMPLOYEES table and the count of the rows in the JOB_HISTORY table.
SQL> SELECT SUM(salary) FROM hr.employees; SUM(SALARY) ----------Oracle Database 11g: Administration Workshop II A - 140

Practice 12-1: Flashback Database (continued)


691416 SQL> SELECT COUNT(*) FROM hr.job_history; COUNT(*) ---------10

5) To perform some HR reorganization updates, . a) Connect as HR user with the oracle_4U password. b) Execute the flb_db_txn.sql script.
SQL> connect hr Enter password: oracle_4U <<< not displayed Connected. SQL> @flb_db_txn.sql SQL> SQL> update employees set department_id = 90 where job_id = 'IT_PROG'; 5 rows updated. SQL> SQL> update employees e set salary = least(e.salary,(select (min_salary + max_salary)/2 * 1.10 from jobs j where j.job_id = e.job_id)) where job_id not like 'AD_%'; 103 rows updated. SQL> SQL> commit; Commit complete. SQL>

6) As the SYS user, note the current SCN in the database again, and also the salary sum and the JOB_HISTORY row count. Note that these values are different from what was queried in steps 2 and 3.
SQL> connect / as sysdba Connected. SQL> SELECT current_scn FROM v$database; CURRENT_SCN ----------1137586 Oracle Database 11g: Administration Workshop II A - 141

Practice 12-1: Flashback Database (continued)


SQL> SELECT SUM(salary) FROM hr.employees; SUM(SALARY) ----------679092.4 SQL> SELECT COUNT(*) FROM hr.job_history; COUNT(*) ---------15 SQL>

7) Using RMAN, flash back the database to the first SCN value noted in step 2 (1137367 in this example). a) Shut down and then mount the database by entering the following:
SQL> SHUTDOWN IMMEDIATE Database closed. Database dismounted. ORACLE instance shut down. SQL> STARTUP MOUNT ORACLE instance started. Total System Global Area Fixed Size Variable Size Database Buffers Redo Buffers Database mounted. SQL> exit 481259520 1337324 385878036 88080384 5963776 bytes bytes bytes bytes bytes

b) If you have any RMAN open, close them. Then log in to RMAN again.
$ rman target / nocatalog connected to target database: ORCL (DBID=1220535480, not open) using target database control file instead of recovery catalog RMAN>

c) At the RMAN prompt, enter the FLASHBACK DATABASE command, and supply the SCN number recorded in step 2:
RMAN> FLASHBACK DATABASE TO SCN=1137367; Starting flashback at 2009-07-23:21:05:29 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=27 device type=DISK allocated channel: ORA_SBT_TAPE_1

Oracle Database 11g: Administration Workshop II A - 142

Practice 12-1: Flashback Database (continued)


channel ORA_SBT_TAPE_1: SID=28 device type=SBT_TAPE channel ORA_SBT_TAPE_1: WARNING: Oracle Test Disk API

starting media recovery media recovery complete, elapsed time: 00:00:03 Finished flashback at 2009-07-23:21:05:34 RMAN>

8) Before opening the database for read and write operations, verify that the database was flashed back to the correct SCN by looking at the contents of the tables and seeing that they are back to what was noted in step 3. a) Logged into SQL*Plus as SYSDBA, enter the following coomand to open the database in read-only mode:
SQL> alter database open read only; Database altered.

b) Enter the following at the SQL prompt to determine the salary sum for the EMPLOYEES table.
SQL> SELECT SUM(salary) FROM hr.employees; SUM(SALARY) ----------691416

9) Open the database for read and write opeations. You have to use the RESETLOGS keyword. a) Shut down the database:
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down.

b) Start up the database in the MOUNT state:


SQL> startup mount ORACLE instance started. Total System Global Area Fixed Size Variable Size Database Buffers Redo Buffers 481259520 1337324 385878036 88080384 5963776 bytes bytes bytes bytes bytes

Oracle Database 11g: Administration Workshop II A - 143

Practice 12-1: Flashback Database (continued)


Database mounted. SQL>

c) Open the database in read/write mode with resetlogs:


SQL> alter database open resetlogs; Database altered.

(The command might take a while to execute.) 10) At this point you can familiarize yourself with the flashback-related V$ views. To see time values, alter your session to display hours, minutes, and seconds with any date values.
SQL> ALTER SESSION SET NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss";

11) Query the V$FLASHBACK_DATABASE_LOG view and determine the lowest SCN that the database can be flashed back to. Record your answer here: _____________
SQL> set wrap off SQL> select * from v$FLASHBACK_DATABASE_LOG; OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI RETENTION_TARGET FLASHBACK_SIZE -------------------- ------------------- ---------------- ------------1136492 2009-07-23 20:47:17 1440 16384000 SQL>

12) View the overhead associated with flashback logging and related operations by querying V$FLASHBACK_DATABASE_STAT. What is the average number of bytes of flashback data written per minute during this time interval?
SQL> select * from V$FLASHBACK_DATABASE_STAT; truncating (as requested) before column ESTIMATED_FLASHBACK_SIZE OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI RETENTION_TARGET FLASHBACK_SIZE -------------------- ------------------- ---------------- ------------1136492 2009-07-23 20:47:17 1440 16384000 SQL> select * from V$FLASHBACK_DATABASE_STAT; truncating (as requested) before column ESTIMATED_FLASHBACK_SIZE Oracle Database 11g: Administration Workshop II A - 144

Practice 12-1: Flashback Database (continued)


BEGIN_TIME END_TIME FLASHBACK_DATA DB_DATA REDO_DATA ------------------- ------------------- -------------- --------- ---------2009-07-23 21:07:56 2009-07-23 21:12:13 4538368 0 1372160 SQL>

In the example above, the answer is 4538368 / (21:07 21:12) which is 907673 bytes per minute. Your numbers may vary slightly. 13) Determine the current size of stored flashback data by querying V$FLASHBACK_DATABASE_LOG. Record your answer here: _____________.
SQL> SELECT flashback_size FROM V$FLASHBACK_DATABASE_LOG; FLASHBACK_SIZE -------------24576000

Note: Your results will probably vary slightly from those shown here. 14) To turn off the flashback database functionality, execute the following command.
SQL> ALTER DATABASE FLASHBACK OFF; Database altered. SQL> exit

Note: The command might take a couple of minutes to execute.

Oracle Database 11g: Administration Workshop II A - 145

Practices for Lesson 13


In this practice, you use Automatic Memory Management to show that you no longer need to manually modify SGA_TARGET and PGA_AGGREGATE_TARGET. You observe the memory distribution when you run an expensive parallel query that consumes a lot of SGA memory.

Oracle Database 11g: Administration Workshop II A - 146

Practice 13-1: Using Automatic Memory Management


In this practice, you use the various new memory management capabilities. 1) For your orcl database, navigate into the labs directory, turn off archiving, and stop Enterprise Manager Database Control.
$ . oraenv ORACLE_SID = [orcl] ? orcl $ cd ~/labs $ ./orcl_to_noarchivelog.sh Database closed. Database dismounted. ORACLE instance shut down. ORACLE instance started. Total System Global Area Fixed Size Variable Size Database Buffers Redo Buffers Database mounted. Database altered. Database altered. $ emctl stop dbconsole Oracle Enterprise Manager 11g Database Control Release 11.2.0.0.2 Copyright (c) 1996, 2009 Oracle Corporation. All rights reserved. https://edrsr37p1.us.oracle.com:1158/em/console/aboutApplicati on Stopping Oracle Enterprise Manager 11g Database Control ... ... Stopped. $ 481259520 1337352 373295096 100663296 5963776 bytes bytes bytes bytes bytes

2) Make a copy of your SPFILE, logged in to SQL*Plus for the orcl instance as the SYS user with the oracle_4U password.
$ sqlplus / as sysdba SQL> CREATE PFILE='/tmp/initorcl.ora.bak' FROM SPFILE; File created. SQL>

Oracle Database 11g: Administration Workshop II A - 147

Practice 13-1: Using Automatic Memory Management (continued)


3) Still connected as the SYS user in SQL*Plus, set the following parameters to the given value in your SPFILE only! Use the amm_parameters.sql file located in your /home/oracle/labs directory. _PX_use_large_pool = TRUE _memory_broker_stat_interval = 5 _memory_management_tracing = 31 parallel_execution_message_size = 36864 parallel_max_servers = 200 parallel_adaptive_multi_user = FALSE processes = 200 sga_target = 0 pga_aggregate_target = 0 memory_target = 300M
SQL> @amm_parameters SQL> alter system set "_PX_use_large_pool" = TRUE SCOPE=SPFILE; System altered. SQL> alter system set "_memory_broker_stat_interval" = 5 SCOPE=SPFILE; System altered. SQL> alter system set "_memory_management_tracing" = 31 SCOPE=SPFILE; System altered. SQL> alter system set "parallel_execution_message_size" = 36864 SCOPE=SPFILE; System altered. SQL> alter system set "parallel_max_servers" = 200 SCOPE=SPFILE; System altered. SQL> alter system set "parallel_adaptive_multi_user" = FALSE SCOPE=SPFILE; System altered. SQL> alter system set "processes" = 200 SCOPE=SPFILE; System altered. SQL> alter system set "pga_aggregate_target" = 0 SCOPE=SPFILE; Oracle Database 11g: Administration Workshop II A-148

Practice 13-1: Using Automatic Memory Management (continued)


System altered. SQL> alter system set "sga_target" = 0 SCOPE=SPFILE; System altered. SQL> alter system set "memory_target" = 300M SCOPE=SPFILE; System altered. SQL>

4) Execute the amm_setup.sql script. a) Drop and recreate the TBSSGA and MYTEMP tablespaces and the AMM DBA user for whom they are defaults. Then press Enter to continue.
SQL> SQL> SQL> user SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> @amm_setup.sql REM "************************** " REM "For training purposes ONLY, execute as the oracle OS

set set set set set set

echo on serveroutput on term on lines 200 pages 44 pause on pause "Press [Enter] to continue..."

SQL> drop tablespace tbssga including contents and datafiles; drop tablespace tbssga including contents and datafiles * ERROR at line 1: ORA-00959: tablespace 'TBSSGA' does not exist

SQL> SQL> create tablespace tbssga datafile '+DATA' size 20m; Tablespace created. SQL> SQL> drop tablespace mytemp including contents and datafiles; drop tablespace mytemp including contents and datafiles * ERROR at line 1: ORA-00959: tablespace 'MYTEMP' does not exist

Oracle Database 11g: Administration Workshop II A-149

Practice 13-1: Using Automatic Memory Management (continued)


SQL> SQL> create temporary tablespace mytemp tempfile '+DATA' size 40m reuse; Tablespace created. SQL> SQL> drop user amm cascade; drop user amm cascade * ERROR at line 1: ORA-01918: user 'AMM' does not exist

SQL> SQL> create user amm identified by oracle_4U 2 default tablespace tbssga 3 temporary tablespace mytemp; User created. SQL> SQL> grant connect,resource,dba to amm; Grant succeeded. SQL> pause Press [Enter] to continue... Press [Enter] to continue...

b) To view the current memory components, query the V$MEMORY_DYNAMIC_COMPONENTS view by pressing Enter to continue the script.
SQL> SQL> SQL> SELECT substr(COMPONENT, 0, 10) COMP, CURRENT_SIZE CS, USER_SPECIFIED_SIZE US 2 FROM v$memory_dynamic_components 3 WHERE CURRENT_SIZE!=0; Press [Enter] to continue...

c) View the query result by pressing Enter to continue the script.


SQL> column COMP format a10 SQL> SQL> SELECT substr(COMPONENT, 0, 10) COMP, CURRENT_SIZE CS, USER_SPECIFIED_SIZE US 2 FROM v$memory_dynamic_components 3 WHERE CURRENT_SIZE!=0; Press [Enter] to continue... COMP CS US ---------- ---------- ---------shared poo 167772160 0 Oracle Database 11g: Administration Workshop II A-150

Practice 13-1: Using Automatic Memory Management (continued)


large pool java pool SGA Target DEFAULT bu PGA Target 4194304 4194304 289406976 104857600 192937984 0 0 0 0 0

6 rows selected. SQL> pause Press [Enter] to continue... Press [Enter] to continue... SQL>

5) Log in as the AMM user with the oracle_4U password, recreate the TABSGA table and insert rows by pressing Enter to continue the script.
SQL> connect amm Enter password: oracle_4U <<< not displayed Connected. SQL> @amm_setup2.sql SQL> REM "************************** " SQL> REM "For training purposes ONLY SQL> REM Connected as the AMM user with the oracle_4U password SQL> set serveroutput on SQL> set term on SQL> set lines 200 SQL> set pages 44 SQL> set pause on pause "Press [Enter] to continue..." SQL> drop table tabsga purge; drop table tabsga purge * ERROR at line 1: ORA-00942: table or view does not exist

SQL> SQL> create table tabsga(a number, b number) tablespace tbssga; Table created. SQL> SQL> begin 2 for i in 1..100000 loop 3 insert into tabsga values (i, i); 4 end loop; 5 end; 6 / PL/SQL procedure successfully completed.

Oracle Database 11g: Administration Workshop II A-151

Practice 13-1: Using Automatic Memory Management (continued)


SQL> commit; Commit complete. SQL> pause Press [Enter] to continue... Press [Enter] to continue...

a) Modify the TABSGA table to parallel 64, create a TESTPGA procedure (which creates a workload) by pressing Enter to continue the script.
SQL> SQL> alter table tabsga parallel 64; Table altered. SQL> SQL> create or replace procedure testpga( psize number ) as 2 begin 3 declare 4 TYPE nAllotment_tabtyp IS TABLE OF char(2048) INDEX BY BINARY_INTEGER; 5 myarray nAllotment_tabtyp; 6 begin 7 for i in 1..psize loop 8 myarray(i) := to_char(i); 9 end loop; 10 end; 11 end; 12 / Procedure created. SQL> pause Press [Enter] to continue... Press [Enter] to continue...

b) Confirm that there are no errors and query the dynamic memory components again by pressing Enter to continue the script.
SQL> show errors No errors. SQL> SQL> SELECT substr(COMPONENT, 0, 10) COMP, CURRENT_SIZE CS, USER_SPECIFIED_SIZE US 2 FROM v$memory_dynamic_components 3 WHERE CURRENT_SIZE!=0; Press [Enter] to continue...

c) To view the query results, press Enter to continue the script.


COMP CS US ---------- ---------- ---------shared poo 167772160 0

Oracle Database 11g: Administration Workshop II A-152

Practice 13-1: Using Automatic Memory Management (continued)


large pool java pool SGA Target DEFAULT bu PGA Target 4194304 4194304 289406976 104857600 192937984 0 0 0 0 0

6 rows selected. SQL> SQL> pause Press [Enter] to exit the script... Press [Enter] to exit the script...

d) Exit the script, but remain in the SQL*Plus session.


SQL> set pause off SQL>

6) Connect as SYSDBA in your SQL*Plus session, shut down and start your database instance and then connect again as the AMM user with the oracle_4U password:
SQL> connect / as sysdba Connected. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> SQL> STARTUP ORACLE instance started. Total System Global Area 313860096 bytes Fixed Size 1336204 bytes Variable Size 209718388 bytes Database Buffers 96468992 bytes Redo Buffers 6336512 bytes Database mounted. Database opened. SQL> SQL> connect amm Enter password: oracle_4U <<< not displayed Connected. SQL>

7) As the AMM user, determine the current settings for the various memory buffers as well as the list of resized operations that were done since you started your instance. a) You can use the amm_components.sql script for that purpose.
SQL> SQL> SQL> SQL> @amm_components.sql set serveroutput on set term on set lines 200

Oracle Database 11g: Administration Workshop II A-153

Practice 13-1: Using Automatic Memory Management (continued)


SQL> set pages 100 SQL> set heading on SQL> column comp format a18 SQL> column final_size format 999999999 SQL> column oper_type format a9 SQL> set pause on pause "Press [Enter] to continue..." SQL> SQL> SELECT substr(COMPONENT, 0, 18) COMP, CURRENT_SIZE CS, USER_SPECIFIED_SIZE US 2 FROM v$memory_dynamic_components 3 WHERE CURRENT_SIZE!=0; Press [Enter] to continue...

b) To view the query result, press Enter to continue the script.


COMP CS US ------------------ ---------- ---------shared pool 83886080 0 large pool 4194304 0 java pool 4194304 0 SGA Target 188743680 0 DEFAULT buffer cac 88080384 0 PGA Target 125829120 0 6 rows selected. SQL> pause Press [Enter] to continue... Press [Enter] to continue...

c) View the memory components (ordered by descending START_TIME) by pressing Enter to continue the script.
SQL> SELECT substr(COMPONENT,0,20) comp, FINAL_SIZE, OPER_TYPE, OPER_MODE, status 2 FROM v$memory_resize_ops 3 ORDER BY START_TIME desc; Press [Enter] to continue...

d) To view the query result, press Enter to continue the script.


COMP FINAL_SIZE OPER_TYPE OPER_MODE STATUS ------------------ ---------- --------- --------- --------shared pool 83886080 GROW IMMEDIATE COMPLETE DEFAULT buffer cac 88080384 SHRINK IMMEDIATE COMPLETE DEFAULT buffer cac 92274688 SHRINK IMMEDIATE COMPLETE shared pool 79691776 GROW IMMEDIATE COMPLETE large pool 4194304 GROW IMMEDIATE COMPLETE java pool 4194304 STATIC COMPLETE streams pool 0 STATIC COMPLETE SGA Target 188743680 STATIC COMPLETE PGA Target 125829120 STATIC COMPLETE DEFAULT buffer cac 96468992 STATIC IMMEDIATE COMPLETE DEFAULT buffer cac 100663296 STATIC IMMEDIATE COMPLETE

Oracle Database 11g: Administration Workshop II A-154

Practice 13-1: Using Automatic Memory Management (continued)


ASM Buffer Cache DEFAULT buffer cac DEFAULT buffer cac DEFAULT 2K buffer DEFAULT 4K buffer DEFAULT 8K buffer DEFAULT 16K buffer DEFAULT 32K buffer KEEP buffer cache RECYCLE buffer cac large pool shared pool shared pool shared pool DEFAULT buffer cac 0 104857600 104857600 0 0 0 0 0 0 0 4194304 67108864 71303168 75497472 96468992 STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC GROW GROW INITIALIZ ING IMMEDIATE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE

IMMEDIATE IMMEDIATE IMMEDIATE

26 rows selected. SQL> pause Press [Enter] to exit the script... Press [Enter] to exit the script... SQL> set pause off SQL> SQL>

8) Remain connected as the AMM user in your SQL*Plus session and execute the following query. Immediately after that, determine the component sizes and resized operations. You can use query1.sql script for that purpose. What do you observe? select /*+ PARALLEL(s 24) */ count(*) from (select /*+ parallel(s 24) */ * from tabsga s group by a); a) Execute the amm_query1.sql script. You can see that the large pool has a much bigger size while the buffer cache is smaller. This memory transfer was automatically done by the system.
SQL> @amm_query1.sql SQL> select /*+ PARALLEL(s 24) */ count(*) from (select /*+ parallel(s 24) */ * from tabsga s group by a); COUNT(*) ---------100000 SQL> SQL> column COMP format a12 SQL> SQL> select substr(COMPONENT, 0, 10) COMP, CURRENT_SIZE CS, USER_SPECIFIED_SIZE US from v$memory_dynamic_components where CURRENT_SIZE!=0; COMP CS US

Oracle Database 11g: Administration Workshop II A-155

Practice 13-1: Using Automatic Memory Management (continued)


------------ ---------- ---------shared poo 88080384 0 large pool 83886080 0 java pool 4194304 0 SGA Target 188743680 0 DEFAULT bu 4194304 0 PGA Target 125829120 0 6 rows selected. SQL> SQL> select substr(COMPONENT, 0, 10) COMP, FINAL_SIZE, OPER_TYPE, OPER_MODE, status from v$memory_resize_ops order by START_TIME; COMP FINAL_SIZE OPER_TYPE OPER_MODE STATUS ------------ ---------- --------- --------- --------shared poo 67108864 STATIC COMPLETE shared poo 71303168 GROW IMMEDIATE COMPLETE shared poo 75497472 GROW IMMEDIATE COMPLETE large pool 4194304 GROW IMMEDIATE COMPLETE large pool 4194304 STATIC COMPLETE java pool 4194304 STATIC COMPLETE streams po 0 STATIC COMPLETE SGA Target 188743680 STATIC COMPLETE ASM Buffer 0 STATIC COMPLETE DEFAULT bu 104857600 STATIC IMMEDIATE COMPLETE DEFAULT bu 104857600 STATIC COMPLETE DEFAULT bu 100663296 STATIC IMMEDIATE COMPLETE DEFAULT bu 96468992 STATIC IMMEDIATE COMPLETE DEFAULT bu 96468992 INITIALIZ IMMEDIATE COMPLETE ING DEFAULT 2K DEFAULT 4K DEFAULT 8K DEFAULT 16 DEFAULT 32 KEEP buffe RECYCLE bu PGA Target DEFAULT bu shared poo DEFAULT bu shared poo DEFAULT bu shared poo DEFAULT bu large pool DEFAULT bu DEFAULT bu 0 0 0 0 0 0 0 125829120 92274688 79691776 88080384 83886080 83886080 88080384 79691776 8388608 67108864 71303168 STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC SHRINK GROW SHRINK GROW SHRINK GROW SHRINK GROW SHRINK SHRINK COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE

IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE DEFERRED DEFERRED IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE

Oracle Database 11g: Administration Workshop II A-156

Practice 13-1: Using Automatic Memory Management (continued)


DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu large pool large pool large pool large pool large pool large pool DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu large pool large pool large pool large pool large pool large pool large pool large pool large pool large pool large pool large pool large pool large pool 75497472 62914560 58720256 54525952 12582912 16777216 20971520 29360128 33554432 25165824 29360128 25165824 20971520 16777216 16777216 12582912 8388608 33554432 37748736 41943040 46137344 50331648 54525952 4194304 79691776 75497472 71303168 71303168 67108864 62914560 58720256 54525952 50331648 46137344 41943040 37748736 33554432 83886080 SHRINK SHRINK SHRINK SHRINK GROW GROW GROW GROW GROW GROW SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK GROW GROW GROW GROW GROW GROW GROW GROW GROW GROW GROW GROW GROW GROW IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE

70 rows selected. SQL> SQL>

9) Redo the same thing as in the previous step, but this time use the following query. You can use amm_query2.sql script for that purpose. What do you observe? Possible Answer: The same trend continues.
SQL> @amm_query2.sql SQL> select /*+ PARALLEL(s 25) */ count(*) from (select /*+ parallel(s 25) */ * from tabsga s group by a);

Oracle Database 11g: Administration Workshop II A-157

Practice 13-1: Using Automatic Memory Management (continued)


COUNT(*) ---------100000 SQL> SQL> column COMP format a12 SQL> SQL> select substr(COMPONENT, 0, 10) COMP, CURRENT_SIZE CS, USER_SPECIFIED_SIZE US from v$memory_dynamic_components where CURRENT_SIZE!=0;

COMP CS US ------------ ---------- ---------shared poo 88080384 0 large pool 83886080 0 java pool 4194304 0 SGA Target 188743680 0 DEFAULT bu 4194304 0 PGA Target 125829120 0 6 rows selected. SQL> SQL> select substr(COMPONENT, 0, 10) COMP, FINAL_SIZE, OPER_TYPE, OPER_MODE, status from v$memory_resize_ops order by START_TIME; COMP FINAL_SIZE OPER_TYPE OPER_MODE STATUS ------------ ---------- --------- --------- --------shared poo 67108864 STATIC COMPLETE shared poo 71303168 GROW IMMEDIATE COMPLETE shared poo 75497472 GROW IMMEDIATE COMPLETE large pool 4194304 GROW IMMEDIATE COMPLETE large pool 4194304 STATIC COMPLETE java pool 4194304 STATIC COMPLETE streams po 0 STATIC COMPLETE SGA Target 188743680 STATIC COMPLETE ASM Buffer 0 STATIC COMPLETE DEFAULT bu 104857600 STATIC IMMEDIATE COMPLETE DEFAULT bu 104857600 STATIC COMPLETE DEFAULT bu 100663296 STATIC IMMEDIATE COMPLETE DEFAULT bu 96468992 STATIC IMMEDIATE COMPLETE DEFAULT bu 96468992 INITIALIZ IMMEDIATE COMPLETE ING DEFAULT DEFAULT DEFAULT DEFAULT 2K 4K 8K 16 0 0 0 0 STATIC STATIC STATIC STATIC COMPLETE COMPLETE COMPLETE COMPLETE

Oracle Database 11g: Administration Workshop II A-158

Practice 13-1: Using Automatic Memory Management (continued)


DEFAULT 32 KEEP buffe RECYCLE bu PGA Target DEFAULT bu shared poo DEFAULT bu shared poo DEFAULT bu shared poo DEFAULT bu large pool DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu large pool large pool large pool large pool large pool large pool DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu large pool large pool large pool large pool large pool large pool large pool large pool large pool large pool large pool large pool large pool 0 0 0 125829120 92274688 79691776 88080384 83886080 83886080 88080384 79691776 8388608 67108864 71303168 75497472 62914560 58720256 54525952 12582912 16777216 20971520 29360128 33554432 25165824 29360128 25165824 20971520 16777216 16777216 12582912 8388608 33554432 37748736 41943040 46137344 50331648 54525952 4194304 79691776 75497472 71303168 71303168 67108864 62914560 58720256 54525952 50331648 46137344 41943040 37748736 33554432 STATIC STATIC STATIC STATIC SHRINK GROW SHRINK GROW SHRINK GROW SHRINK GROW SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK GROW GROW GROW GROW GROW GROW SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK GROW GROW GROW GROW GROW GROW GROW GROW GROW GROW GROW GROW GROW COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE

IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE DEFERRED DEFERRED IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE

Oracle Database 11g: Administration Workshop II A-159

Practice 13-1: Using Automatic Memory Management (continued)


large pool 83886080 GROW IMMEDIATE COMPLETE 70 rows selected. SQL>

10) Still connected as the AMM user from your SQL*Plus session, execute the following command and, immediately afterward, determine the memory component sizes and the list of resize operations. You can use amm_query3.sql for that purpose. What do you observe? Possible Answer: The same style of growing and shrinking of the memory components.
SQL> @amm_query3.sql SQL> exec testpga(500000); PL/SQL procedure successfully completed. SQL> SQL> column COMP format a12 SQL> SQL> select substr(COMPONENT, 0, 10) COMP, CURRENT_SIZE CS, USER_SPECIFIED_SIZE US from v$memory_dynamic_components where CURRENT_SIZE!=0; COMP CS US ------------ ---------- ---------shared poo large pool java pool SGA Target DEFAULT bu PGA Target 88080384 83886080 4194304 188743680 4194304 125829120 0 0 0 0 0 0

6 rows selected. SQL> SQL> select substr(COMPONENT, 0, 10) COMP, FINAL_SIZE, OPER_TYPE, OPER_MODE, status from v$memory_resize_ops order by START_TIME; COMP FINAL_SIZE OPER_TYPE OPER_MODE STATUS ------------ ---------- --------- --------- --------DEFAULT bu 96468992 INITIALIZ IMMEDIATE COMPLETE ING RECYCLE bu KEEP buffe DEFAULT 32 0 STATIC 0 STATIC 0 STATIC COMPLETE COMPLETE COMPLETE

Oracle Database 11g: Administration Workshop II A-160

Practice 13-1: Using Automatic Memory Management (continued)


shared poo shared poo shared poo large pool large pool java pool streams po SGA Target PGA Target DEFAULT bu DEFAULT bu ASM Buffer DEFAULT bu DEFAULT bu DEFAULT 2K DEFAULT 4K DEFAULT 8K DEFAULT 16 DEFAULT bu shared poo DEFAULT bu shared poo shared poo DEFAULT bu DEFAULT bu large pool DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu large pool large pool large pool large pool large pool large pool DEFAULT bu large pool DEFAULT bu DEFAULT bu DEFAULT bu large pool large pool DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu DEFAULT bu 75497472 71303168 67108864 4194304 4194304 4194304 0 188743680 125829120 96468992 100663296 0 104857600 104857600 0 0 0 0 92274688 79691776 88080384 83886080 88080384 83886080 79691776 8388608 75497472 71303168 67108864 62914560 58720256 54525952 12582912 16777216 20971520 25165824 29360128 33554432 37748736 75497472 46137344 50331648 54525952 83886080 79691776 4194304 8388608 12582912 16777216 16777216 20971520 GROW GROW STATIC STATIC GROW STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC SHRINK GROW SHRINK GROW GROW SHRINK SHRINK GROW SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK GROW GROW GROW GROW GROW GROW SHRINK GROW SHRINK SHRINK SHRINK GROW GROW SHRINK SHRINK SHRINK SHRINK SHRINK SHRINK IMMEDIATE COMPLETE IMMEDIATE COMPLETE COMPLETE COMPLETE IMMEDIATE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE COMPLETE COMPLETE IMMEDIATE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE DEFERRED COMPLETE DEFERRED COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE IMMEDIATE COMPLETE

Oracle Database 11g: Administration Workshop II A-161

Practice 13-1: Using Automatic Memory Management (continued)


DEFAULT bu DEFAULT bu DEFAULT bu large pool large pool large pool large pool large pool large pool large pool large pool large pool large pool large pool DEFAULT bu 25165824 29360128 33554432 33554432 37748736 41943040 46137344 50331648 54525952 58720256 62914560 67108864 71303168 71303168 41943040 SHRINK SHRINK SHRINK GROW GROW GROW GROW GROW GROW GROW GROW GROW GROW GROW SHRINK IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE COMPLETE

70 rows selected. SQL> exit $

11) From a terminal window, restart Enterprise Manager Database Control.


$ emctl start dbconsole Oracle Enterprise Manager 11g Database Control Release 11.2.0.1.0 Copyright (c) 1996, 2009 Oracle Corporation. All rights reserved. https://edrsr37p1.us.oracle.com:1158/em/console/aboutApplicati on Starting Oracle Enterprise Manager 11g Database Control .............. started. ----------------------------------------------------------------Logs are generated in directory /u01/app/oracle/product/11.2.0/dbhome_1/edrsr37p1.us.oracle.co m_orcl/sysman/log $

12) In Enterprise Manager look at the memory variations that happened during this lab. What do you observe? a) Logged into Enterprise Manager as the SYSDBA, click the Server tab. 13) On the Server tabbed page, click Memory Advisors in the Database Configuration section. 14) On the Memory Advisors page, look at the first two graphics. 15) You should see modifications of the memory components in the second graph, that the large pool grew and shrank.

Oracle Database 11g: Administration Workshop II A-162

Practice 13-1: Using Automatic Memory Management (continued)

16) Logout and exit from Enterprise Manager. 17) To clean up your environment, shut down your database instance, restore the original SPFILE, turn on archiving and restart your orcl database instance. To do all that, execute the amm_cleanup.sh script.
$ cd ~/labs $ ./amm_cleanup.sh Oracle Enterprise Manager 11g Database Control Release 11.2.0.1.0 Copyright (c) 1996, 2009 Oracle Corporation. All rights reserved. https://edrsr37p1.us.oracle.com:1158/em/console/aboutApplicati on Stopping Oracle Enterprise Manager 11g Database Control ... ... Stopped. SQL*Plus: Release 11.2.0.1.0 Production on Thu Sep 3 19:21:43 2009 Copyright (c) 1982, 2009, Oracle. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining

Oracle Database 11g: Administration Workshop II A-163

Practice 13-1: Using Automatic Memory Management (continued)


and Real Application Testing options SQL> SQL> User dropped. SQL> Tablespace dropped. SQL> Tablespace dropped. SQL> SQL> Database closed. Database dismounted. ORACLE instance shut down. SQL> File created. SQL> SQL> ORACLE instance started. Total System Global Area Fixed Size Variable Size Database Buffers Redo Buffers Database mounted. SQL> Database altered. SQL> Database altered. SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options Oracle Enterprise Manager 11g Database Control Release 11.2.0.1.0 Copyright (c) 1996, 2009 Oracle Corporation. All rights reserved. https://edrsr37p1.us.oracle.com:1158/em/console/aboutApplicati on Starting Oracle Enterprise Manager 11g Database Control ............... started. ----------------------------------------------------------------Logs are generated in directory /u01/app/oracle/product/11.2.0/dbhome_1/edrsr37p1.us.oracle.co m_orcl/sysman/log $ 481259520 1337352 373295096 100663296 5963776 bytes bytes bytes bytes bytes

Oracle Database 11g: Administration Workshop II A-164

Practices for Lesson 14

Practice 14-1: Monitoring Services


In your database there are several running applications. You want to monitor the resources that are being used by each application. Create a service configuration for each application or application function that uses your database. In this practice, you create the following configuration in the orcl database:
Service Name SERV1 Response Time (sec) Warning/Critical Client service 0.4, 1.0 Usage

1) Use the DBMS_SERVICE package to create a service called SERV1. Then make sure that you add your service name to your tnsnames.ora file. a) The recommended method for adding a service name to the tnsnames.ora file is to use Net Manager. For this exercise, execute the sv1_add.sh script. Review the tnsnames.ora file at $ORACLE_HOME/network/admin to confirm that the following lines are included. Substitute the output of the hostname command for <hostname> below.
SERV1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = <hostname>.ua.oracle.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = SERV1.example.com) ) )

$ . oraenv ORACLE_SID = [orcl] ? orcl $ cd /home/oracle/labs $ ./sv1_add.sh edrsr37p1.us.oracle.com $

b) Use the DBMS_SERVICE.CREATE_SERVICE procedure to create a service. (The command is entered on one line.)
$ sqlplus / as sysdba

Oracle Database 11g: Administration Workshop II A - 165

Practice 14-1: Monitoring Services (continued)


SQL> EXEC DBMS_SERVICE.CREATE_SERVICE('SERV1','SERV1.example.com') PL/SQL procedure successfully completed. SQL> exit;

2) After you have created your services, try connecting to your database by using your service name. What happens? Why? Answer: You cannot connect using your service because although it is defined, it is not started on your instance. You can verify this by looking at the SERVICE_NAME initialization parameter and by looking at the services known to the listener.
$ lsnrctl services LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 26-JUL2009 16:23:46 Copyright (c) 1991, 2009, Oracle. All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) Services Summary... Service "+ASM" has 1 instance(s). Instance "+ASM", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:10098 refused:0 state:ready LOCAL SERVER Service "orcl.us.oracle.com" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:3657 refused:0 state:ready LOCAL SERVER Service "orclXDB.us.oracle.com" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER <machine: edrsr37p1.us.oracle.com, pid: 6610> (ADDRESS=(PROTOCOL=tcp)(HOST=edrsr37p1.us.oracle.com)(PORT=296 69)) Service "rcat.example.com" has 1 instance(s). Instance "rcat", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:3 refused:0 state:ready LOCAL SERVER Service "rcatXDB.example.com" has 1 instance(s).

Oracle Database 11g: Administration Workshop II A-166

Practice 14-1: Monitoring Services (continued)


Instance "rcat", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER <machine: edrsr37p1.us.oracle.com, pid: 20809> (ADDRESS=(PROTOCOL=tcp)(HOST=edrsr37p1.us.oracle.com)(PORT=620 66)) The command completed successfully $ $ sqlplus / as sysdba SQL> show parameter service NAME TYPE VALUE ----------------------------- ----------- ---------------service_names string orcl.oracle.com SQL> connect system@SERV1 Enter password: oracle_4U <<< not displayed ERROR: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor Warning: You are no longer connected to ORACLE. SQL>

3) How would you make sure that you can connect using your service? Do it and connect to your instance by using your service. Answer: You must start your service on your instance.
$ connect / as sysdba Connected. SQL> show parameter service NAME TYPE VALUE ----------------------------- ----------- ---------------service_names string orcl.us.oracle.com SQL> EXEC DBMS_SERVICE.START_SERVICE('SERV1') PL/SQL procedure successfully completed. SQL> show parameter service NAME TYPE VALUE ------------------------- ----------- --------------------

Oracle Database 11g: Administration Workshop II A-167

Practice 14-1: Monitoring Services (continued)


service_names string SERV1.us.oracle.com SQL> host lsnrctl services LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 26-JUL2009 16:30:36 Copyright (c) 1991, 2009, Oracle. All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) Services Summary... Service "+ASM" has 1 instance(s). Instance "+ASM", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:10105 refused:0 state:ready LOCAL SERVER Service "SERV1.example.com" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER Service "orcl.us.oracle.com" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER Service "orclXDB.us.oracle.com" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER <machine: edrsr37p1.us.oracle.com, pid: 6610> (ADDRESS=(PROTOCOL=tcp)(HOST=edrsr37p1.us.oracle.com)(PORT=296 69)) Service "rcat.example.com" has 1 instance(s). Instance "rcat", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:3 refused:0 state:ready LOCAL SERVER Service "rcatXDB.example.com" has 1 instance(s). Instance "rcat", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready

Oracle Database 11g: Administration Workshop II A-168

Practice 14-1: Monitoring Services (continued)


DISPATCHER <machine: edrsr37p1.us.oracle.com, pid: 20809> (ADDRESS=(PROTOCOL=tcp)(HOST=edrsr37p1.us.oracle.com)(PORT=620 66)) The command completed successfully SQL> SQL> connect system@SERV1 Enter password: oracle_4U <<< not displayed Connected. SQL> exit

4) Execute the sv1_load.sh script as SYSDBA. This script creates a new SV_USER user. Then you connect to your instance as this user and the SERV1 service. Create workload activity by executing the sv1_load2.sql script. If this script finishes before you completed the next step, then use the sv1_sel.sql script to executes the following query:
SELECT COUNT(*) FROM DBA_OBJECTS,DBA_OBJECTS,DBA_OBJECTS $ cd ~/labs $ ./sv1_load.sh SQL> SQL> SQL> SQL> SQL> drop user sv_user cascade * ERROR at line 1: ORA-01918: user 'SV_USER' does not exist

SQL> SQL> 2 User created. SQL> SQL> Grant succeeded. $

Note: Do not wait for the script to complete before proceeding to the next step.
$ sqlplus sv_user@SERV1 Enter password: oracle_4U <<< not displayed Connected. SQL> SQL> 2 3 4 5 6 @sv1_load2.sql DECLARE t number; BEGIN for i in 1..2000 loop select count(*) into t from dba_objects; end loop;

Oracle Database 11g: Administration Workshop II A-169

Practice 14-1: Monitoring Services (continued)


7 8 END; /

5) After the execution starts, access the EM Top Consumers page from the Performance tabbed page, and check if SERV1 is using more resources. Also, check the statistics on your service with V$SERVICE_STATS from a SQL*Plus session connected as SYSDBA. a) On the home page, click the Performance tab. Towards the bottom of the Performance page, click the Services tab.

An Active Session graph with the activity aggregated by service name is displayed. The network service name of each connection is recorded as a separate service. So all the connections made without a service name are aggregated, as are all the connections made as SERV1. b) Click the Top Consumers link in the Additional Monitoring Links section. Refresh the Top Consumers Overview page several times.

Oracle Database 11g: Administration Workshop II A-170

Practice 14-1: Monitoring Services (continued)

The names and number of services listed in the Top Services Graph depends on the number and type of connections to the database. c) You can also see the detailed statistics by navigating to the Top Services tab > SERV1 link > Statistics tab.

Oracle Database 11g: Administration Workshop II A-171

Practice 14-1: Monitoring Services (continued)

6) If the sv1_load2.sql script finishes before you completed this step, then use the sv1_sel.sql script to continue creating a workload. When you completed the tasks, make sure that you stop your running workload by pressing Ctrl + C in your terminal window.
SQL> @sv1_sel.sql SQL> select count(*) from dba_objects,dba_objects,dba_objects * ERROR at line 1: ORA-01013: user requested cancel of current operation SQL> exit

Oracle Database 11g: Administration Workshop II A-172

Practices for Lesson 15


By default, Automatic SQL Tuning executes automatically during each nightly maintenance window. For this practice, you simulate the execution of Automatic SQL Tuning, and explore its results

Oracle Database 11g: Administration Workshop II A - 173

Practice 15-1: Using Automatic SQL Tuning


In this practice, you manually launch Automatic SQL Tuning to automatically tune a small application workload. You then investigate the outcomes and configuration possibilities. 1) In EM, navigate to Server > Automated Maintenance Tasks (in the Oracle Scheduler section). a) To check if the task settings are enabled, click Configure, (no matter if the status is Enabled or Disabled).

b) Toggle Enabled and Disabled, then click Show SQL when the Global Status is Enabled.

c) Review the command and click Return.

d) On the Automated Maintenance Tasks Configuration page, click Apply. e) Click the Configure button next to Automatic SQL Tuning. f) Select Yes for Automatic Implementation of SQL Profiles and click Show SQL.

g) Review the command and click Return.

Oracle Database 11g: Administration Workshop II A - 174

Practice 15-1: Using Automatic SQL Tuning (continued)

h) On the Automatic SQL Tuning Settings page, click Apply. You should receive a success message. 2) In a terminal window connected as the oracle user, point to the ORCL instance, review and execute the ast_setup.sh script .This script creates the AST user, turns off automatic maintenance tasks, and drops any existing profiles on queries executed by the AST user.
$ . oraenv ORACLE_SID = [orcl] ? orcl $ cat ast_setup.sh #!/bin/bash # For training only - execute as oracle OS user sqlplus / as sysdba <<EOF! set echo on drop user ast cascade; create user ast identified by "oracle_4U"; grant dba to ast; alter system flush shared_pool; --- Turn off AUTOTASK -alter system set "_enable_automatic_maintenance"=0; --- Clear out old executions of auto-sqltune -exec dbms_sqltune.reset_tuning_task('SYS_AUTO_SQL_TUNING_TASK'); --- Drop any profiles on AST queries -declare cursor prof_names is select name from dba_sql_profiles where sql_text like '%AST%'; begin for prof_rec in prof_names loop dbms_sqltune.drop_sql_profile(prof_rec.name); end loop; end; /

Oracle Database 11g: Administration Workshop II A-175

Practice 15-1: Using Automatic SQL Tuning (continued)


EOF! $ $ ./ast_setup.sh SQL> SQL> SQL> drop user ast cascade * ERROR at line 1: ORA-01918: user 'AST' does not exist SQL> User created. SQL> Grant succeeded. SQL> SQL> System altered. SQL> SQL> SQL> SQL> System altered. SQL> SQL> SQL> SQL> SQL> PL/SQL procedure successfully completed. SQL> SQL> SQL> SQL> SQL> 2 3 4 9 PL/SQL procedure successfully completed. SQL> SQL> $ 5 6 7 8

3) In preparation for the practice, you should log in as the AST user with the oracle_4U password and execute a workload. Execute the ast_workload_stream.sql script. This script executes, multiple times a query that is not correctly optimized. The query in question uses hints that force the optimizer to pick a suboptimal execution plan. The script executes for approximately 30 to 60 seconds. (Output has been reduced to minimize clutter.)
$ sqlplus ast Enter password: oracle_4U <<< not displayed SQL> @ast_workload_stream.sql Sun Aug 2 23:31:33 GMT-7 2009 no rows selected no rows selected no rows selected . . . no rows selected no rows selected

Oracle Database 11g: Administration Workshop II A-176

Practice 15-1: Using Automatic SQL Tuning (continued)


Sun Aug 2 23:31:55 GMT-7 2009 SQL> exit $

4) Automatic SQL Tuning is implemented using an automated task that runs during maintenance windows. However, you are not going to wait for the next maintenance window to open. This might take too long. Instead, you will force the opening of your next maintenance window now. This will automatically trigger the Automatic SQL Tuning task. Review and execute the ast_run.sh script to do that. The scripts execution takes about ten minutes (most likely).
$ cat ast_run.sh #!/bin/bash # For training only - execute as oracle OS user date sqlplus / as sysdba <<EOF! set echo on set serveroutput on exec dbms_workload_repository.create_snapshot; variable window varchar2(20); begin select upper(to_char(sysdate,'fmday'))||'_WINDOW' into :window from dual; end; / print window; --- Open the corresponding maintenance window, but with other clients disabled -alter system set "_enable_automatic_maintenance"=1 / exec dbms_auto_task_admin.disable( 'auto optimizer stats collection', null, :window); exec dbms_auto_task_admin.disable( 'auto space advisor', null, :window); exec dbms_scheduler.open_window(:window, null, true); --- Close the maintenance window when sqltune is done -exec dbms_lock.sleep(60); declare running number;

Oracle Database 11g: Administration Workshop II A-177

Practice 15-1: Using Automatic SQL Tuning (continued)


count(*) running dba_advisor_executions task_name = 'SYS_AUTO_SQL_TUNING_TASK' and status = 'EXECUTING'; if (running = 0) then exit; end if; dbms_lock.sleep(60); end loop; dbms_scheduler.close_window(:window); end; / alter system set "_enable_automatic_maintenance"=0 / -- Re-enable the other guys so they look like they are enabled in EM. -- Still they will be disabled because we have set the underscore. -exec dbms_auto_task_admin.enable( 'auto optimizer stats collection', null, :window); exec dbms_auto_task_admin.enable( 'auto space advisor', null, :window); EOF! date $ $ ./ast_run.sh Sun Aug 2 23:42:54 GMT-7 2009 SQL> SQL> SQL> SQL> PL/SQL procedure successfully completed. SQL> SQL> SQL> 2 3 4 PL/SQL procedure successfully completed. SQL> WINDOW -------------------------------SUNDAY_WINDOW SQL> SQL> SQL> SQL> SQL> 2 begin loop select into from where

Oracle Database 11g: Administration Workshop II A-178

Practice 15-1: Using Automatic SQL Tuning (continued)


System altered. SQL> > PL/SQL procedure successfully completed. SQL> SQL> > PL/SQL procedure successfully completed. SQL> SQL> PL/SQL procedure successfully completed. SQL> SQL> SQL> SQL> SQL> PL/SQL procedure successfully completed. SQL> SQL> 2 3 4 5 6 7 12 13 14 15 16 17 PL/SQL procedure successfully completed. SQL> 2 System altered. SQL> SQL> SQL> SQL> SQL> SQL> > PL/SQL procedure successfully completed. SQL> SQL> > PL/SQL procedure successfully completed. SQL> SQL> Sun Aug 2 23:43:57 GMT-7 2009 $ 8 9 10 11

Some of your output, like the WINDOW, may look different. 5) Execute the ast_workload_stream.sh script again. What do you observe? a) You should see that the execution time for ast_workload_stream.sh is much faster than the original execution. This is probably due to the fact that Automatic SQL Tuning implemented a profile for your statement automatically.
$ sqlplus ast Enter password: oracle_4U <<< not displayed SQL> @ast_workload_stream.sql Sun Aug 2 23:48:54 GMT-7 2009 no rows selected no rows selected no rows selected . . . no rows selected no rows selected Sun Aug 2 23:49:16 GMT-7 2009

Oracle Database 11g: Administration Workshop II A-179

Practice 15-1: Using Automatic SQL Tuning (continued)


SQL> exit $

6) Logged in as the AST user, force the creation of an AWR snapshot.


$ sqlplus ast Enter password: oracle_4U <<< not displayed SQL> set echo on SQL> exec dbms_workload_repository.create_snapshot; PL/SQL procedure successfully completed. SQL> exit $

7) How can you confirm that a SQL Profile was automatically implemented? a) In Enterprise Manager, navigate to Server > Automated Maintenance Tasks (Oracle Scheduler) > Automatic SQL Tuning. b) On the Automatic SQL Tuning summary page, view the tuning results.

The task has already run in one maintenance window and has results ready to be viewed.

c) Look at the graphs on the Automatic SQL Tuning Result Summary page. (If you do not see any graphs, return to step 5, execute the work load twice, then continue with step 6 and 7.) d) Focus on understanding the pie chart and the bar graph next to it. You should be able to get a feeling for the general findings breakdown, as well as the number of SQL profiles implemented by the task.

Oracle Database 11g: Administration Workshop II A-180

Practice 15-1: Using Automatic SQL Tuning (continued)


e) Click View Report to see a detailed SQL-level report.

f) Find and select the SQL that ran in the AST schema. Note the green check mark meaning that the profile was implemented. g) Click the View Recommendations button.

h) Click the Compare Explain Plans eyeglass icon for the SQL Profile entry.

Oracle Database 11g: Administration Workshop II A-181

Practice 15-1: Using Automatic SQL Tuning (continued)


i) Scroll down the page.

j) Look at the old and new explain plans for the query. k) Then click the Recommendations for SQL ID locator link (the last of the breadcrumbs on top of the page) to return to the previous screen.

l) Investigate a SQL profile. While still on the Recommendations for SQL_ID page, click the SQL text to go to the SQL Details page for this SQL.

Oracle Database 11g: Administration Workshop II A-182

Practice 15-1: Using Automatic SQL Tuning (continued)


m) On the SQL Details - Tuning History page note the link to SYS_AUTO_SQL_TUNING_TASK that is there to show that the SQL was tuned by this tuning task. n) Click the Plan Control tab.

o) Note that a profile was created automatically for this SQL. The type of AUTO means it was automatically created. p) Click the Statistics tab to take a look at the execution history for this SQL.

q) Depending on the speed of your machine, you may not see two hash values. If that is the case, ignore this step and the following one. Select Real Time: Manual Refresh from the View Data and then each of possible two Plan Hash Values from the corresponding drop-down list. Choose one after the other and wait for the page to refresh each time.

Oracle Database 11g: Administration Workshop II A-183

Practice 15-1: Using Automatic SQL Tuning (continued)


r) Depending on the speed of your environment, you should see one statement with a relatively high elapsed time per execution, and one with very low elapsed time per execution. This shows the improved plan. If you select All from the Plan Hash Values drop-down list, you might not be able to see the execution corresponding to the statement after tuning on the Summary graph. This might be because the workload was too short to execute. 8) Generate a text report for more in-depth information. From the command line, execute ast_task_report.sh script. What do you observe? a) Notice the first queries that fetch execution name and object number from the advisor schema, followed by the final query that gets the text report. In the text report, look for the section about the SQL profile finding and peruse the Validation Results section. This shows you the execution statistics observed during test-execute and allows you to get more of a feeling about the profiles quality. You can also use the report_auto_tuning_task API to get reports that span multiple executions of the task.
$ cat ast_task_report.sh #!/bin/bash # For training only - execute as oracle OS user sqlplus / as sysdba <<EOF! set echo on set long 1000000000 set longchunksize 1000 set serveroutput on --- Check the execution names -alter session set nls_date_format = 'MM/DD/YYYY HH24:MI:SS'; select execution_name, status, execution_start from dba_advisor_executions where task_name = 'SYS_AUTO_SQL_TUNING_TASK' order by execution_start; variable last_exec varchar2(30); begin select max(execution_name) keep (dense_rank last order by execution_start) into :last_exec from dba_advisor_executions where task_name = 'SYS_AUTO_SQL_TUNING_TASK'; end; / print :last_exec -Oracle Database 11g: Administration Workshop II A-184

Practice 15-1: Using Automatic SQL Tuning (continued)


-- Find the object ID for query AST with sql_id by9m5m597zh19 -variable obj_id number; begin select into from where

object_id :obj_id dba_advisor_objects task_name = 'SYS_AUTO_SQL_TUNING_TASK' and execution_name = :last_exec and type = 'SQL' and attr1 = 'by9m5m597zh19';

end; / print :obj_id --- Get a text report to drill down on this one query -set pagesize 0 select dbms_sqltune.report_auto_tuning_task( :last_exec, :last_exec, 'TEXT', 'TYPICAL', 'ALL', :obj_id) from dual; EOF! $ $ ./ast_task_report.sh SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> Session altered. SQL> SQL> 2 3 4 EXECUTION_NAME STATUS EXECUTION_START ------------------------------ ----------- ------------------EXEC_176 COMPLETED 08/03/2009 18:33:49 SQL> SQL> SQL> SQL> 2 3 4 5 PL/SQL procedure successfully completed. SQL> SQL> LAST_EXEC -------------------------------EXEC_176 SQL> SQL> SQL> SQL> SQL> SQL> SQL> 2 7 8 9 10 PL/SQL procedure successfully completed. 3 4 5 6 6 7

Oracle Database 11g: Administration Workshop II A-185

Practice 15-1: Using Automatic SQL Tuning (continued)


SQL> SQL> OBJ_ID ---------3 SQL> SQL> SQL> SQL> SQL> SQL> 2 3 GENERAL INFORMATION SECTION -----------------------------------------------------------------------------Tuning Task Name : SYS_AUTO_SQL_TUNING_TASK Tuning Task Owner : SYS Workload Type : Automatic High-Load SQL Workload Scope : COMPREHENSIVE Global Time Limit(seconds) : 3600 Per-SQL Time Limit(seconds) : 1200 Completion Status : COMPLETED Started at : 08/03/2009 18:33:49 Completed at : 08/03/2009 18:34:13 Number of Candidate SQLs : 3 Cumulative Elapsed Time of SQL (s) : 53 -----------------------------------------------------------------------------Object ID : 3 Schema Name: AST SQL ID : by9m5m597zh19 SQL Text : select /*+ USE_NL(s c) FULL(s) FULL(c) AST */ c.cust_id, sum(s.quantity_sold) from sh.sales s, sh.customers c where s.cust_id = c.cust_id and c.cust_id < 2 group by c.cust_id -----------------------------------------------------------------------------FINDINGS SECTION (2 findings) -----------------------------------------------------------------------------1- SQL Profile Finding (see explain plans section below) -------------------------------------------------------A potentially better execution plan was found for this statement. SQL profile "SYS_SQLPROF_0122e0099ab30000" was created automatically for this statement. Recommendation (estimated benefit: 98.47%) ------------------------------------------

Oracle Database 11g: Administration Workshop II A-186

Practice 15-1: Using Automatic SQL Tuning (continued)


- An automatically-created SQL profile is present on the system. Name: SYS_SQLPROF_0122e0099ab30000 Status: ENABLED Validation results -----------------The SQL profile was tested by executing both its plan and the original plan and measuring their respective execution statistics. A plan may have been only partially executed if the other could be run to completion in less time. Original Plan Improved -------------------Completion Status: Elapsed Time(us): 99.89 % CPU Time(us): 99.87 % User I/O Time(us): Buffer Gets: 98.46 % Physical Read Requests: Physical Write Requests: Physical Read Bytes: Physical Write Bytes: Rows Processed: Fetches: Executions: COMPLETE 191076 160775 0 2541 0 0 0 0 0 0 1 ---------------COMPLETE 208 200 0 39 0 0 0 0 0 0 1 -With SQL Profile %

Notes ----1. The original plan was first executed to warm the buffer cache. 2. Statistics for original plan were averaged over next 4 executions. 3. The SQL profile plan was first executed to warm the buffer cache. 4. Statistics for the SQL profile plan were averaged over next 9 executions. 2- Index Finding (see explain plans section below) -------------------------------------------------The execution plan of this statement can be improved by creating one or more indices. Recommendation (estimated benefit: 90.98%)

Oracle Database 11g: Administration Workshop II A-187

Practice 15-1: Using Automatic SQL Tuning (continued)


------------------------------------------ Consider running the Access Advisor to improve the physical schema design or creating the recommended index. create index SH.IDX$$_00010001 on SH.SALES("CUST_ID"); Rationale --------Creating the recommended indices significantly improves the execution plan of this statement. However, it might be preferable to run "Access Advisor" using a representative SQL workload as opposed to a single statement. This will allow to get comprehensive index recommendations which takes into account index maintenance overhead and additional space consumption. -----------------------------------------------------------------------------EXPLAIN PLANS SECTION -----------------------------------------------------------------------------1- Original With Adjusted Cost -----------------------------Plan hash value: 4005616876 ------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | ------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 13 | 893 (1)| 00:00:1 1 | | | | 1 | HASH GROUP BY | | 1 | 13 | 893 (1)| 00:00:1 1 | | | | 2 | NESTED LOOPS | | 1 | 13 | 892 (1)| 00:00:1 1 | | | |* 3 | TABLE ACCESS FULL | CUSTOMERS | 1 | 5 | 405 (1)| 00:00:0 5 | | | | 4 | PARTITION RANGE ALL| | 1 | 8 | 488 (2)| 00:00:0

Oracle Database 11g: Administration Workshop II A-188

Practice 15-1: Using Automatic SQL Tuning (continued)


6 | 1 | 28 | |* 5 | TABLE ACCESS FULL | SALES | 1 | 8 | 488 (2)| 00:00:0 6 | 1 | 28 | ------------------------------------------------------------------------------------------------Predicate Information (identified by operation id): --------------------------------------------------3 - filter("C"."CUST_ID"<2) 5 - filter("S"."CUST_ID"<2 AND "S"."CUST_ID"="C"."CUST_ID") 2- Using SQL Profile -------------------Plan hash value: 3070788227 --------------------------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | --------------------------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 13 | 55 (2)| 00:00:01 | | | | 1 | HASH GROUP BY | | 1 | 13 | 55 (2)| 00:00:01 | | | | 2 | NESTED LOOPS | | 1 | 13 | 54 (0)| 00:00:01 | | | | 3 | PARTITION RANGE ALL | | 1 | 8 | 54 (0)| 00:00:01 | 1 | 28 | | 4 | TABLE ACCESS BY LOCAL INDEX ROWID| SALES | 1 | 8 | 54 (0)| 00:00:01 | 1 | 28 | | 5 | BITMAP CONVERSION TO ROWIDS | | | | | | | | |* 6 | BITMAP INDEX RANGE SCAN | SALES_CUST_BIX | | | | | 1 | 28 | |* 7 | INDEX UNIQUE SCAN | CUSTOMERS_PK | 1 | 5 | 0 (0)| 00:00:01 | | |

Oracle Database 11g: Administration Workshop II A-189

Practice 15-1: Using Automatic SQL Tuning (continued)


--------------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id): --------------------------------------------------6 - access("S"."CUST_ID"<2) filter("S"."CUST_ID"<2) 7 - access("S"."CUST_ID"="C"."CUST_ID") filter("C"."CUST_ID"<2) 3- Using New Indices -------------------Plan hash value: 1871796534 --------------------------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | --------------------------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 13 | 5 (0)| 00:00:01 | | | | 1 | SORT GROUP BY NOSORT | | 1 | 13 | 5 (0)| 00:00:01 | | | | 2 | NESTED LOOPS | | | | | | | | | 3 | NESTED LOOPS | | 1 | 13 | 5 (0)| 00:00:01 | | | |* 4 | INDEX RANGE SCAN | CUSTOMERS_PK | 1 | 5 | 2 (0)| 00:00:01 | | | |* 5 | INDEX RANGE SCAN | IDX$$_00010001 | 1 | | 2 (0)| 00:00:01 | | | | 6 | TABLE ACCESS BY GLOBAL INDEX ROWID| SALES | 1 | 8 | 3 (0)| 00:00:01 | ROWID | ROWID | --------------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id): ---------------------------------------------------

Oracle Database 11g: Administration Workshop II A-190

Practice 15-1: Using Automatic SQL Tuning (continued)


4 - access("C"."CUST_ID"<2) 5 - access("S"."CUST_ID"="C"."CUST_ID") filter("S"."CUST_ID"<2) -----------------------------------------------------------------------------SQL> SQL> $

9) Investigate how to configure Automatic SQL Tuning with Enterprise Manager. a) Logged into Enterprise Manager as the SYS user, navigate to Server > Automated Maintenance Tasks. b) The chart here shows times in the past when each client was executed, and times in the future when they are scheduled to run again.

c) Modify the graphs begin and end points with the widgets in the upper right. d) Click the Configure button.

Oracle Database 11g: Administration Workshop II A-191

Practice 15-1: Using Automatic SQL Tuning (continued)


On the Automated Maintenance Tasks Configuration page, you can disable individual clients and change which windows they run in. e) Disable the Automatic SQL Tuning client entirely and click Show SQL.

f) Review the commands and then click Return. g) On the Automated Maintenance Tasks Configuration page, click Apply. You should receive a success message. h) Click the Automated Maintenance Tasks locator link.

i) Notice the forbidden sign right next to the task name. j) Click Configure.

k) Enable the task again.

l) Optionally, click Show SQl, review the commands and then click Return. m) Then click Apply to enable Automatic SQL Tuning. You should receive a success message. n) Navigate to the Automatic SQL Tuning page. If you are on the Automated Maintenance Tasks Configuration page, click the Configure button for Automatic SQL Tuning.

Oracle Database 11g: Administration Workshop II A-192

Practice 15-1: Using Automatic SQL Tuning (continued)

o) On the Automatic SQL Tuning Settings page, select No in front of the Automatic Implementation of SQL Profiles field, and click Show SQL.

p) Review the command, click Return, and then click Apply. You should receive a success message. 10) OPTIONAL: You can investigate how to configure Automatic SQL Tuning using PL/SQL looking at the following script: ast_manual_config.sh and script. Note: In your case, the task executes quickly because the workload to take into account is really small. However, you could use the ast_interrupt_task.sh script from another session to stop the task, should it last too long.

Oracle Database 11g: Administration Workshop II A-193

Practices for Lesson 16

You received complaints that certain batch jobs are using too many system resources and that a specific user is known to start data warehouse processes during regular business hours. You decide to use the Database Resource Manager for better system-resource utilization and control. Your first effort to balance the situation includes creating an APPUSER consumer group and assigning it to the default DEFAULT_PLAN resource plan. You then map a couple of Oracle users and your major OS user to resource groups. Activate the resource plan and test your assignments. Regularly click Show SQL to review all statements that are new to you.

Oracle Database 11g: Administration Workshop II A - 194

Practice 16-1: Managing Resources


In this practice, you create an APPUSER consumer group and assign it to the default DEFAULT_PLAN resource plan. Then you map a couple of Oracle users and your major OS user to resource groups. Activate the resource plan and test your assignments. Log in as the SYS user (with oracle password, connect as SYSDBA) and perform the necessary tasks through Enterprise Manager Database Control or through SQL*Plus. All scripts for this practice are in the /home/oracle/labs directory. Whenever you open a new terminal window, execute the oraenv script to set environment variables for the orcl database. 1) Using Enterprise Manager Database Control, create a resource group called APPUSER. At this point, do not add users to the group. a) In Enterprise Manager, select Server > Consumer Groups (in the Resource Manager section). b) On the Consumer Groups page, click the Create button.

c) Enter APPUSER as Consumer Group and ensure that the Scheduling Policy is set to Round Robin. Question 1: What does the ROUND-ROBIN parameter value mean? Possible Answer: ROUND-ROBIN indicates that CPU resources are fairly allocated to the APPUSER consumer group, according to the active resource plan directives. d) Optionally, click Show SQL, review the statements, and then click Return

Oracle Database 11g: Administration Workshop II A - 195

Practice 16-1: Managing Resources (continued)

The bind variables are not displayed for security reasons. e) On the Create Resource Consumer Group page, click OK to create the consumer group. f) A confirmation message appears and the new consumer group is displayed. After confirming its creation, click the Database Instance:orcl.us.oracle.com link.

2) Add the APPUSER and LOW_GROUP consumer groups to the DEFAULT_PLAN resource plan. Change the level 3 CPU resource allocation percentages: 60% for the APPUSER consumer group and 40% for the LOW_GROUP consumer group. a) In Enterprise Manager, select Server > Plans. b) On the Resource Plans page, select DEFAULT_PLAN and click the Edit button. c) Click Modify. d) On the Select Groups/Subplans page, move APPUSER and LOW_GROUP to the Resource Allocations.

Oracle Database 11g: Administration Workshop II A-196

Practice 16-1: Managing Resources (continued)

e) Click OK. f) Enter 60 for APPUSER Level 3 and 40 for LOW_GROUP Level 3. g) Click Show SQL.
DECLARE spfileValue VARCHAR2(1000); scopeValue VARCHAR2(10) := 'MEMORY'; planName VARCHAR2(100) :=?; BEGIN dbms_resource_manager.clear_pending_area(); dbms_resource_manager.create_pending_area(); dbms_resource_manager.create_plan_directive( plan => ?, group_or_subplan => ?, comment => ?, mgmt_p1 => ?, mgmt_p2 => ?, mgmt_p3 => ?, mgmt_p4 mgmt_p5 => ?, mgmt_p6 => ?, mgmt_p7 => ?, mgmt_p8 parallel_degree_limit_p1 => ? , switch_io_reqs => ? , switch_io_megabytes => ? , active_sess_pool_p1 => ?, queueing_p1 => ?, switch_group => ?, switch_time => ?, switch_estimate => case ? when 'false' then false 'true' then true else false end, max_est_exec_time => ?, undo_pool => ? , max_idle_time => ?, max_idle_blocker_time => ?, switch_for_call => case ? when 'false' then false 'true' then true else false end

=> ?, => ? ,

when

when

); dbms_resource_manager.create_plan_directive( plan => ?, group_or_subplan => ?, comment => ?, mgmt_p1 => ?, mgmt_p2 => ?, mgmt_p3 => ?, mgmt_p4 => ?, mgmt_p5 => ?, mgmt_p6 => ?, mgmt_p7 => ?, mgmt_p8 => ? ,

Oracle Database 11g: Administration Workshop II A-197

Practice 16-1: Managing Resources (continued)


parallel_degree_limit_p1 => ? , switch_io_reqs => ? , switch_io_megabytes => ? , active_sess_pool_p1 => ?, queueing_p1 => ?, switch_group => ?, switch_time => ?, switch_estimate => case ? when 'false' then false when 'true' then true else false end, max_est_exec_time => ?, undo_pool => ? , max_idle_time => ?, max_idle_blocker_time => ?, switch_for_call => case ? when 'false' then false when 'true' then true else false end ); dbms_resource_manager.submit_pending_area(); select value into spfileValue from v$parameter where name = 'spfile'; IF spfileValue IS NOT NULL then EXECUTE IMMEDIATE 'alter system set resource_manager_plan = '||planName||' scope =BOTH'; END IF; dbms_resource_manager.switch_plan( plan_name => ? , sid => ? , allow_scheduler_plan_switches => FALSE ); END;

h) Review the code, then click Return.

i) On the Edit Resource Plan: DEAFULT_PLAN page, click Apply to assign the APPUSER and the LOW_GROUP consumer groups to the DEFAULT_PLAN resource plan. (You activate this plan later.) j) You should receive a message, that your update was successful.

Oracle Database 11g: Administration Workshop II A-198

Practice 16-1: Managing Resources (continued)


3) Configure Consumer Group Mappings, so that the HR Oracle user belongs to the APPUSER consumer group, and the SCOTT user to the LOW_GROUP consumer group. For the SCOTT user, confirm that his ORACLE_USER attribute has a higher priority than the CLIENT_OS_USER attribute. a) In Enterprise Manager, select Server > Consumer Group Mappings. b) Select Oracle User and click the Add Rule for Selected Type button.

c) On the Consumer Group Mappings page, ensure that APPUSER is selected as Selected Consumer Group.

d) Move the HR user into the Selected Oracle User region, and then click OK. e) You should receive a success message. On the Consumer Group Mappings General page, click Show SQL.

Oracle Database 11g: Administration Workshop II A-199

Practice 16-1: Managing Resources (continued)

f) Review the statements and click Return. g) Click Apply to assign the HR user to the APPUSER consumer group.

h) Select Oracle User again, and click the Add Rule for Selected Type button.

Oracle Database 11g: Administration Workshop II A-200

Practice 16-1: Managing Resources (continued)

i) Select LOW_GROUP from the Selected Consumer Group drop-down list, and move SCOTT into the Selected Oracle User area, and then click OK. j) You should receive a success message (but do not yet apply your changes.) On the Consumer Group Mappings page, click the Priorities tab.

k) Confirm that Oracle User has a higher priority than Client OS User. l) Click Apply to assign the SCOTT user to the LOW_GROUP consumer group. You should receive a success message. 4) Configure Consumer Group Mappings so that the oracle OS user belongs to the SYS_GROUP consumer group. a) Return to the Consumer Group Mappings General page. b) Select Client OS User and click the Add Rule for Selected Type button.

Oracle Database 11g: Administration Workshop II A-201

Practice 16-1: Managing Resources (continued)

c) Select SYS_GROUP from the Selected Consumer Group drop-down list, move oracle into the Selected Client OS User area, and click OK. You should receive a success message.

d) Optionally, click Show SQL, review the statements, and click Return.

Oracle Database 11g: Administration Workshop II A-202

Practice 16-1: Managing Resources (continued)

e) Click Apply to assign the oracle OS user to the SYS_GROUP consumer group. You should receive a success message. 5) Assign the PM Oracle user to the following consumer groups: APPUSER, LOW_GROUP, and SYS_GROUP. a) In Enterprise Manager, select Server > Users (in the Security section). b) Select the PM user and click the Edit button.

Oracle Database 11g: Administration Workshop II A-203

Practice 16-1: Managing Resources (continued)

c) Click the Consumer Groups Privileges tab. If you see an error regarding the password for the PM user, enter oracle_4U in both the password fields. d) Click the Edit List button. e) Move the APPUSER, LOW_GROUP, and SYS_GROUP consumer groups to Selected Consumer Groups and click OK.

f) Click Show SQL.

Oracle Database 11g: Administration Workshop II A-204

Practice 16-1: Managing Resources (continued)

g) Review the statements and click Return. h) Click Apply to assign the PM user to these consumer groups. You should receive a success message. 6) Activate the DEFAULT_PLAN resource plan. a) In Enterprise Manager, select Server > Plans. b) On the Resource Plans page, select DEFAULT_PLAN, select Activate from the Actions drop-down list, and click Go.

c) Click Yes to confirm your activation. You should see a success message. 7) Test the consumer group mappings. Start two SQL*Plus sessions: the first with the system/oracle_4U@orcl connect string and the second with the scott/oracle_4U@orcl connect string. a) As the oracle user in a terminal window, execute the oraenv script to set environment variables for the orcl database.

Oracle Database 11g: Administration Workshop II A-205

Practice 16-1: Managing Resources (continued)


$ . oraenv ORACLE_SID = [orcl] ? orcl $

Your output may be different depending on your previously executed tasks. b) To start a SQL*Plus session with the system/oracle_4U@orcl connect string and to set your SQL prompt to FIRST, enter:
$ sqlplus system@orcl Enter password: oracle_4U <<< not displayed SQL> SET SQLPROMPT "FIRST>" FIRST>

c) As the oracle user in a terminal window, execute the oraenv script to set environment variables for the orcl database.
$ . oraenv ORACLE_SID = [orcl] ? orcl $

Your output may be different depending on your previously executed tasks. d) To start a SQL*Plus session with the scott/oracle_4U@orcl connect string and to set your SQL prompt to SECOND, enter:
$ sqlplus scott@orcl Enter password: oracle_4U <<< not displayed SQL> SET SQLPROMPT "SECOND>" SECOND>

e) In your FIRST SQL*Plus session, enter:


FIRST>@query_rsc_groups.sql SCHEMANAME ------------------------------DBSNMP DBSNMP DBSNMP SCOTT FIRST> RESOURCE_CONSUMER_GROUP -----------------------------OTHER_GROUPS OTHER_GROUPS OTHER_GROUPS LOW_GROUP

f) Question: To which consumer group does the SCOTT user belong? Answer: SCOTT is in the LOW_GROUP consumer group. Note: Your output for this step (and the following steps) may not look exactly like the output shown. The information of concern here is for the specific users being mentioned.

Oracle Database 11g: Administration Workshop II A-206

Practice 16-1: Managing Resources (continued)


g) In the SECOND terminal window, connect as the PM user with the oracle_4U password:
SECOND>connect pm@orcl Enter password: oracle_4U <<< not displayed Connected. SECOND>

h) In your FIRST SQL*Plus session, enter / to execute the previous SQL statement again.
FIRST>/ SCHEMANAME -----------------------------DBSNMP DBSNMP DBSNMP PM FIRST> RESOURCE_CONSUMER_GROUP ------------------------------OTHER_GROUPS OTHER_GROUPS OTHER_GROUPS SYS_GROUP

i) Question: To which consumer group does the PM user belong? Answer: PM is in the SYS_GROUP consumer group. j) In the SECOND terminal window, connect as the OE user with the oracle_4U password::
SECOND>connect oe@orcl Enter password: oracle_4U <<< not displayed Connected. SECOND>

k) In your FIRST SQL*Plus session, enter / to execute the previous SQL statement again.
FIRST>/ SCHEMANAME -----------------------------DBSNMP DBSNMP DBSNMP OE FIRST> exit RESOURCE_CONSUMER_GROUP ------------------------------OTHER_GROUPS OTHER_GROUPS OTHER_GROUPS OTHER_GROUPS

l) Exit both the SQL*Plus sessions.


Oracle Database 11g: Administration Workshop II A-207

Practice 16-1: Managing Resources (continued)


m) Question: When testing your OE Oracle user, you notice that OE is in the OTHER_GROUPS consumer group. Why is that? Possible Answer: The OE user is not explicitly assigned to another consumer resource group. 8) Revert to your original configuration by deactivating the DEFAULT_PLAN resource group, locking accounts, undoing all consumer group mappings, and finally by deleting the APPUSER resource group. a) To deactivate the DEFAULT_PLAN resource plan in Enterprise Manager, select Server > Plans.

b) On the Resource Plans page, select the DEFAULT_PLAN, select Deactivate from the Actions drop-down list, and click Go. c) Click Yes to confirm your deactivation. You should receive a success message. d) To reconfigure or undo all consumer group mappings, review and execute the rsc_cleanup.sh script from your working directory:
$ # # # # # # # # cat rsc_cleanup.sh Oracle Database 11g: Administration Workshop II Oracle Server Technologies - Curriculum Development ***Training purposes only*** ***Not appropriate for production use*** This script supports the Resource Manager practice session. Start this script connected as OS user: oracle.

sqlplus "/ as sysdba" << EOF

Oracle Database 11g: Administration Workshop II A-208

Practice 16-1: Managing Resources (continued)


PROMPT undo lab step 5 BEGIN dbms_resource_manager_privs.revoke_switch_consumer_group( revokee_name => 'PM', consumer_group => 'APPUSER' ); END; / BEGIN dbms_resource_manager_privs.revoke_switch_consumer_group( revokee_name => 'PM', consumer_group => 'LOW_GROUP' ); END; / BEGIN dbms_resource_manager_privs.revoke_switch_consumer_group( revokee_name => 'PM', consumer_group => 'SYS_GROUP' ); END; / PROMPT undo lab step 4 BEGIN dbms_resource_manager.clear_pending_area(); dbms_resource_manager.create_pending_area(); dbms_resource_manager.set_consumer_group_mapping( dbms_resource_manager.client_os_user, 'ORACLE', NULL ); dbms_resource_manager.submit_pending_area(); END; / PROMPT undo lab step 3 BEGIN dbms_resource_manager.clear_pending_area(); dbms_resource_manager.create_pending_area(); dbms_resource_manager.set_consumer_group_mapping( dbms_resource_manager.oracle_user, 'HR', NULL ); dbms_resource_manager.set_consumer_group_mapping( dbms_resource_manager.oracle_user, 'SCOTT', NULL );

Oracle Database 11g: Administration Workshop II A-209

Practice 16-1: Managing Resources (continued)


dbms_resource_manager.set_consumer_group_mapping( dbms_resource_manager.oracle_user, 'SYS', NULL ); dbms_resource_manager.set_consumer_group_mapping( dbms_resource_manager.oracle_user, 'SYSTEM', NULL ); dbms_resource_manager.submit_pending_area(); END; / PROMPT undo lab step 2 BEGIN dbms_resource_manager.clear_pending_area(); dbms_resource_manager.create_pending_area(); dbms_resource_manager.delete_plan_directive('DEFAULT_PLAN', 'APPUSER'); dbms_resource_manager.delete_plan_directive('DEFAULT_PLAN', 'LOW_GROUP'); dbms_resource_manager.submit_pending_area(); dbms_resource_manager.switch_plan( plan_name => '', sid => 'orcl', allow_scheduler_plan_switches => FALSE ); END; / exit EOF

$ ./rsc_cleanup.sh SQL> SQL> SQL> undo lab step 5 SQL> SQL> 2 3 4 5 6 7 PL/SQL procedure successfully completed. SQL> 2 3 4 5 6 7 PL/SQL procedure successfully completed. SQL> 2 3 4 5 6 7 PL/SQL procedure successfully completed. SQL> undo lab step 4 SQL> SQL> 2 3 4 5 6 7 PL/SQL procedure successfully completed. SQL> SQL> 12 25 undo lab step 3 SQL> 2 3 4 13 14 15 16 26

10

11

5 17 18

6 19

7 20

8 21

10 22

11 23

24

Oracle Database 11g: Administration Workshop II A-210

Practice 16-1: Managing Resources (continued)


PL/SQL procedure successfully completed. SQL> undo lab step 2 SQL> SQL> 2 3 4 5 6 7 PL/SQL procedure successfully completed. $ 8 9

e) To delete the APPUSER resource group in Enterprise Manager, select Server > Consumer Groups.

f) On the Consumer Groups page, select APPUSER and click the Delete button. g) Confirm your deletion by clicking Yes. You should receive a success message. h) Exit Enterprise Manager and close all terminal windows.

Oracle Database 11g: Administration Workshop II A-211

Practices for Lesson 17

In these practices, you explore Oracle Scheduler capabilities.

Oracle Database 11g: Administration Workshop II A-212

Practice 17-1: Creating Scheduler Components


In this practice, you use Enterprise Manager Database Control to create Scheduler objects in the ORCL database instance and automate tasks. While logged in to the database as the HR user in Database Control, create a simple job that runs a SQL script: General: Name: CREATE_LOG_TABLE_JOB Owner: HR Description: Create the SESSION_HISTORY table for the next part of this practice Logging Level: RUNS Command Type: PL/SQL PL/SQL Block: BEGIN execute immediate('create table
session_history(snap_time TIMESTAMP WITH LOCAL TIME ZONE, num_sessions NUMBER)'); END;

Schedule: Repeating: Do not Repeat Start: Immediately Options: No special options

1) As the SYS user, grant CONNECT, RESOURCE, and DBA roles to the HR user.
$ . oraenv ORACLE_SID = [orcl] ? orcl $ sqlplus / as sysdba Connected. SQL> grant connect, resource, dba to hr; Grant succeeded.

2) Log in to Enterprise Manager Database Control as the HR user with the oracle_4U password.

3) To create a job, navigate to Server > Jobs (in the Oracle Scheduler region). a) On the Scheduler Jobs page, click the Create button. b) On the Create Job - General page, enter and confirm the following values:
Name: CREATE_LOG_TABLE_JOB Schema: HR
Oracle Database 11g: Administration Workshop II A-213

Practice 17-1: Creating Scheduler Components (continued)


Enabled: Yes Description: Create the SESSION_HISTORY table Logging Level: Log job runs only (RUNS) Command Type: PL/SQL Block PL/SQL Block:
begin execute immediate ('create table session_history( snap_time TIMESTAMP WITH LOCAL TIME ZONE, num_sessions NUMBER)'); end;

c) On the Schedule folder tab, enter and confirm the following values: Timezone: Your_local_timezone Repeating: Do not Repeat Start: Immediately

Oracle Database 11g: Administration Workshop II A-214

Practice 17-1: Creating Scheduler Components (continued)

d) Click Show SQL if you want to view the SQL statement defining your job.

e) Review the statements (Your time zone might be different.) and click Return. f) Click OK to create the job.

Oracle Database 11g: Administration Workshop II A-215

Practice 17-1: Creating Scheduler Components (continued)

g) If the job does not appear on the Scheduler Jobs page, click the Refresh button until it succeeds. Also, you may not see it running, but already with the Last Run Status of SUCCEEDED. 4) Create a program called LOG_SESS_COUNT_PRGM that logs the current number of database sessions into a table. Use the following code:
DECLARE sess_count NUMBER; BEGIN SELECT COUNT(*) INTO sess_count FROM V$SESSION; INSERT INTO session_history VALUES (systimestamp, sess_count); COMMIT; END;

a) Logged into Enterprise Manager as the HR user, naviagate to Server > Programs or click the Programs in the Related Links section on the Scheduler Jobs page.

b) On the Scheduler Programs page, click the Create button. c) On the Create Program page, enter and confirm the following values:
Name: LOG_SESS_COUNT_PRGM Schema: HR Enabled: Yes

Oracle Database 11g: Administration Workshop II A-216

Practice 17-1: Creating Scheduler Components (continued)


Type: PLSQL_BLOCK Source:
DECLARE sess_count NUMBER; BEGIN SELECT COUNT(*) INTO sess_count FROM V$SESSION; INSERT INTO session_history VALUES (systimestamp, sess_count); COMMIT; END;

d) Click Show SQL.

e) Review the statements, and then click Return. f) Click OK to create the program.

Oracle Database 11g: Administration Workshop II A-217

Practice 17-1: Creating Scheduler Components (continued)

You should see the program on the Scheduler Programs page. 5) Create a schedule named SESS_UPDATE_SCHED owned by HR that executes every three seconds. Use SQL*Plus and the DBMS_SCHEDULER.CREATE_SCHEDULE procedure to create the schedule.
BEGIN DBMS_SCHEDULER.CREATE_SCHEDULE ( schedule_name => 'SESS_UPDATE_SCHED', start_date => SYSTIMESTAMP, repeat_interval => 'FREQ=SECONDLY;INTERVAL=3', comments => 'Every three seconds'); END; /

Return to Enterprise Manager Database Control and verify that the SESS_UPDATE_SCHED schedule was created. Hint: You may have to refresh the page for the Schedule to appear. a) In a terminal window, enter:
$ sqlplus hr Enter password: oracle_4U <<< not displayed

b) In your SQL*Plus session, enter:


BEGIN DBMS_SCHEDULER.CREATE_SCHEDULE ( schedule_name => 'SESS_UPDATE_SCHED', start_date => SYSTIMESTAMP, repeat_interval => 'FREQ=SECONDLY;INTERVAL=3', comments => 'Every three seconds'); END; / PL/SQL procedure successfully completed.

c) In Enterprise Manager, select Server > Schedules. d) Verify that the SESS_UPDATE_SCHED schedule has been created. (You may have to refresh the page for the Schedule to appear.)

Oracle Database 11g: Administration Workshop II A-218

Practice 17-1: Creating Scheduler Components (continued)

6) Using Enterprise Manager Database Control, create a job named LOG_SESSIONS_JOB that uses the LOG_SESS_COUNT_PRGM program and the SESS_UPDATE_SCHED schedule. Make sure that the job uses FULL logging. a) In Enterprise Manager, select Server > Jobs, and then click the Create button. b) On the Create Job page, enter and confirm the following values:
Name: LOG_SESSIONS_JOB Owner: HR Enabled: Yes Description: Count sessions with HR.LOG_SESS_COUNT_PRGM Logging level: Log everything (FULL)

c) Click Change Command Type, and on the Select Command Option page, select Program Name, and enter HR.LOG_SESS_COUNT_PRGM in the field next to it, or use the Lookup (flashlight) icon to select the program.

d) Click OK.

Oracle Database 11g: Administration Workshop II A-219

Practice 17-1: Creating Scheduler Components (continued)

e) Back on the Create Job page, click the Schedule tab. f) Change the Schedule Type to Use Pre-Defined Schedule, and select the HR.SESS_UPDATE_SCHED schedule by using the flashlight icon.

g) Click Show SQL.

Oracle Database 11g: Administration Workshop II A-220

Practice 17-1: Creating Scheduler Components (continued)

h) Review the statements and then click Return. i) On the Create Job page, click OK to create the job. You should receive a success message and see the job on the Scheduler Jobs page.

Note that it quicly accumulates previous runs, because it executes every three seconds. 7) In your SQL*Plus session, check the HR.SESSION_HISTORY table for rows. a) Enter:
SQL> SELECT * FROM SESSION_HISTORY ORDER BY snap_time;

Your result looks different but the second values should be three seconds apart:
SNAP_TIME -------------------------------------------------------------NUM_SESSIONS -----------31-JUL-09 03.07.55.101299 PM 41

Oracle Database 11g: Administration Workshop II A-221

Practice 17-1: Creating Scheduler Components (continued)


31-JUL-09 03.07.58.099194 PM 41

Question: If there are rows in the table, are the time stamps three seconds apart? Answer: Yes, there are rows. Yes, the time stamps are three seconds apart. 8) Use Enterprise Manager Database Control to alter the SESS_UPDATE_SCHED schedule from every three seconds to every three minutes. Then use SQL*Plus to verify that the rows are now being added every three minutes: query the HR.SESSION_HISTORY table, ordered by the SNAP_TIME column. a) In Enterprise Manager, select Server > Schedules. b) Click the SESS_UPDATE_SCHED link. c) On the View Schedule page, click Edit. d) Change the description to Every three minutes. e) Change Available to Start to Immediately. f) Change the value in the Repeat drop-down list from By Seconds to By Minutes.

g) Ensure that the interval is 3 and then click Show SQL.

Oracle Database 11g: Administration Workshop II A-222

Practice 17-1: Creating Scheduler Components (continued)

h) Review the statements, click Return, and then click Apply. You should receive a success message. 9) In your SQL*Plus session, query the HR.SESSION_HISTORY table, ordered by the SNAP_TIME column. (Wait for three minutes after you update the schedule.) Enter:
SQL> SELECT * FROM HR.SESSION_HISTORY ORDER BY snap_time;

Your result looks different (but the minute values should be three minutes apart):
SNAP_TIME
--------------------------------------------------------------------

NUM_SESSIONS
--------------

31-JUL-09 03.10.39.185103 PM 41 31-JUL-09 03.13.38.927866 PM 41

10) This is your mandatory cleanup task. Use Enterprise Manager to drop the LOG_SESSIONS_JOB and CREATE_LOG_TABLE_JOB jobs, the LOG_SESS_COUNT_PRGM program, and the SESS_UPDATE_SCHED schedule. Use SQL*Plus to drop the SESSION_HISTORY table, and exit from your session. Note: Make sure that you do not delete the wrong schedule. a) In Enterprise Manager, select Server > Jobs.

Oracle Database 11g: Administration Workshop II A-223

Practice 17-1: Creating Scheduler Components (continued)

b) With the LOG_SESSIONS_JOB job selected, click the Delete button.

c) Select Drop the job and stop any running instance, and then click Yes. d) Go back to the Scheduler Jobs page, select CREATE_LOG_TABLE_JOB, and click Delete. Select Drop the job and stop any running instance, and then click Yes. e) Click the Database Instance breadcrumb at the upper-left corner of the page to return to the Server page. Then click Programs.

f) With the LOG_SESS_COUNT_PRGM program selected, click the Delete button. Click Yes to confirm.

Oracle Database 11g: Administration Workshop II A-224

Practice 17-1: Creating Scheduler Components (continued)


g) Click Schedules in the Related Links section h) With the SESS_UPDATE_SCHED schedule selected, click the Delete button. Make sure that you do not delete the wrong schedule.

i) Select If there are dependent objects, it will not be dropped, and then click Yes to confirm. j) In your SQL*Plus session as the HR user, delete the SESSION_HISTORY table, and then exit the session. Enter:
SQL> DROP TABLE session_history PURGE; Table dropped. SQL> EXIT

Oracle Database 11g: Administration Workshop II A-225

Practice 17-2: Creating Lightweight Scheduler Jobs


In this optional practice, you create and run a lightweight scheduler job. View the metadata for a lightweight scheduler job. Navigate to your $HOME/labs directory. 1) Create a job template for the lightweight job. The template must be a PL/SQL procedure or a PL/SQL block. Run the cr_test_log.sql script to create the test_log table. Then run prog_1.sql. The prog_1.sql script in the $HOME/labs directory creates a job template. Note: The job template has a subset of the attributes of a scheduler program. Most of the attributes of a template cannot be changed for the job. a) Navigate to the labs directory.
$ cd ~/labs $

b) Execute the cr_test_log.sql and prog_1.sql scripts as the system user. The password for the system user is oracle_4U.
$ sqlplus system Enter password: oracle_4U <<< not displayed SQL> SQL> SQL> run SQL> drop @cr_test_log.sql -- cleanup previous runs -- you will see an error the first time this script is

drop table system.test_log; table system.test_log * ERROR at line 1: ORA-00942: table or view does not exist

SQL> SQL> SQL> SQL> 2 3 4 5

-- create a table to hold timing information create table system.test_log (job_type VARCHAR2(10), timemark VARCHAR2(10), act_time TIMESTAMP with TIME ZONE) /

Table created. SQL> SQL> SQL> SQL> SQL> 2 3 4 @prog_1.sql REM For training only set echo on BEGIN -- This will produce an error the first -- time it is run since PROG_1 does not exist

Oracle Database 11g: Administration Workshop II A-226

Practice 17-2: Creating Lightweight Scheduler Jobs (continued)


5 DBMS_SCHEDULER.DROP_PROGRAM ( 6 program_name => '"SYSTEM"."PROG_1"'); 7 END; 8 / BEGIN * ERROR at line 1: ORA-27476: "SYSTEM.PROG_1" does not exist ORA-06512: at "SYS.DBMS_ISCHED", line 27 ORA-06512: at "SYS.DBMS_SCHEDULER", line 61 ORA-06512: at line 5

SQL> BEGIN 2 DBMS_SCHEDULER.CREATE_PROGRAM( 3 program_name=>'"SYSTEM"."PROG_1"' 4 ,program_action=>'DECLARE 5 time_now DATE; 6 BEGIN 7 INSERT INTO test_log VALUES(''LWT'',''DONE'',SYSTIMESTAMP); 8 END;' 9 , program_type=>'PLSQL_BLOCK' 10 , number_of_arguments=>0, 11 comments=>'Insert a timestamp into the test_log' 12 ,enabled=>TRUE); 13 END; 14 / . PL/SQL procedure successfully completed. SQL>

2) Create a lightweight job, using the PL/SQL API. The job will run the my_prog template daily with an interval of 2, starting immediately. Note: EM does not expose the JOB_STYLE setting at this time. a) Logged into SQL*Plus as the system user, execute the my_lwt_job.sql script.
SQL> @my_lwt_job.sql SQL> REM For training only SQL> set echo on SQL> BEGIN 2 -- the drop procedure will give and error the first time 3 -- this script is run 4 sys.DBMS_SCHEDULER.DROP_JOB('my_lwt_job'); 5 END; 6 / BEGIN *

Oracle Database 11g: Administration Workshop II A-227

Practice 17-2: Creating Lightweight Scheduler Jobs (continued)


ERROR at line 1: ORA-27475: "SYSTEM.MY_LWT_JOB" must be a job ORA-06512: at "SYS.DBMS_ISCHED", line 213 ORA-06512: at "SYS.DBMS_SCHEDULER", line 651 ORA-06512: at line 4

SQL> SQL> 2 3 4 5 6 7 8 9 10 11 12 13 14 15

DECLARE jobname VARCHAR2(30); BEGIN -- Create the Job jobname := 'my_lwt_job'; sys.dbms_scheduler.create_job( job_name => '"SYSTEM"."MY_LWT_JOB"', program_name => '"SYSTEM"."PROG_1"', job_class => '"DEFAULT_JOB_CLASS"', job_style => 'LIGHTWEIGHT', repeat_interval => 'FREQ=DAILY;INTERVAL=2', comments => 'Lightweight job', enabled => TRUE); END; /

PL/SQL procedure successfully completed. SQL>

3) Check the Scheduler metadata views USER_SCHEDULER_JOBS, _PROGRAMS, DBA_JOBS. Select JOB_NAME, JOB_STYLE, and PROGRAM_NAME from USER_SCHEDULER_JOBS.
SQL> COL program_name format a12 SQL> SELECT job_name, job_style, program_name FROM USER_SCHEDULER_JOBS; JOB_NAME JOB_STYLE PROGRAM_NAME ------------------------------ ----------- -----------MY_LWT_JOB LIGHTWEIGHT PROG_1

4) Check the Enterprise Manager Scheduler Jobs page, find the MY_LWT_JOB, and view the attributes. a) Log into Enterprise Manager as the SYSTEM user with the oracle_4U password.

Oracle Database 11g: Administration Workshop II A-228

Practice 17-2: Creating Lightweight Scheduler Jobs (continued)

b) Navigate to the Scheduler Jobs page. Then click the History tab. c) View the history of MY_LWT_JOB.

d) Click the Job Name to view the job attributes.

e) Click OK. 5) On the Scheduler Jobs, All page, delete the MY_LWT_JOB job a) Navigate to the Scheduler Jobs, All page, select the MY_LWT_JOB job and click Delete.

Oracle Database 11g: Administration Workshop II A-229

Practice 17-2: Creating Lightweight Scheduler Jobs (continued)

b) On the Confirmation page, select Drop the job and any running instance. Click Yes.

Oracle Database 11g: Administration Workshop II A-230

Practice 17-3: Monitoring the Scheduler


Background: Because your job tasks are regularly increasing, you decide to automate routine tasks. You first monitor existing scheduler elements, and then you create scheduler components and test them. In this practice, use Enterprise Manager Database Control to define and monitor the Scheduler and automate tasks. Click Show SQL regularly to review all statements that are new to you. Log in as the SYS user (with oracle_4U password, connect as SYSDBA) or as HR user (with oracle_4U password, connect as Normal), as indicated. Perform the necessary tasks either through Enterprise Manager Database Control or through SQL*Plus. All scripts for this practice are in the /home/oracle/labs directory. 1) Log in to Enterprise Manager Database Control as the SYS user with the oracle_4U password, connect as SYSDBA, and check the following roles for the HR user:

CONNECT role RESOURCE role DBA role

Because you are going to use the HR user to administer jobs through Database Control, you need to make sure that HR is registered as a possible administrator. a) In Enterprise Manager, naviaget to Server > Users (in the Security section). b) On the Users page, select the HR user and click Edit. c) On the Edit User page, click the Roles tab.

d) If the roles are not yet selected, then click the Edit List button on the right side of the page. On the Modify Roles page, make sure that the DBA, CONNECT, and RESOURCE roles are selected. Click OK, then click Apply. e) Click the Setup link in the upper-right region of the page.

Oracle Database 11g: Administration Workshop II A-231

Practice 17-3: Monitoring the Scheduler (continued)

f) On the Enterprise Manager Configuration page, click the Administrators link.

g) On the Administrators page, click the Create button.

Oracle Database 11g: Administration Workshop II A-232

Practice 17-3: Monitoring the Scheduler (continued)

h) On the Create Administrators: Properties page, enter HR as Name, ensure that the Grant SELECT_CATALOG_ROLE is selected and click Review. i) On the Create Administrator HR: Review page, click the Finish button. You should receive a success message

j) Click the Logout link at the upper-right corner of the page. 2) Log in to Enterprise Manager Database Control as the HR user. On the Server tabbed page, click the Jobs link in the Database Scheduler region. Are there any jobs? a) Click the Login button to log in as the HR user. b) Enter HR as username, oracle_4U as password, Connect As Normal, and click Login. c) In Enterprise Manager, navigate to Server > Jobs.

Oracle Database 11g: Administration Workshop II A-233

Practice 17-3: Monitoring the Scheduler (continued)

Question: Are there any jobs? Possible Answer: There are some jobs. 3) Click Programs in the Related Links section.

Question: Are there any existing programs?

Oracle Database 11g: Administration Workshop II A-234

Practice 17-3: Monitoring the Scheduler (continued)


Answer: There are some existing programs. 4) Click Schedules in the Related Links section.

Question: Are there any existing schedules? Answer: There are three schedules: BSLN_MAINTAIN_STATS_SCHED, FILE_WATCHER_SCHEDULE and DAILY_PURGE_SCHEDULE.

5) Click Windows in the Related Links section. Review the Scheduler Windows page in Enterprise Manager. Are there any existing windows? Which resource plan is associated with each window?

Oracle Database 11g: Administration Workshop II A-235

Practice 17-3: Monitoring the Scheduler (continued)


Question 1: Are there any existing windows? Are any enabled? Answer: There are several windows. All are enabled except WEEKNIGHT_WINDOW and WEEKEND_WINDOW. 6) Click the MONDAY_WINDOW link. Answer the questions, then click OK.

Question 1: At which time does this window open? Possible Answer: 10 PM Question 2: For how long does it stay open? Possible Answer: for 4 hours 7) Click Job Classes in the Related Links section and review them.

Oracle Database 11g: Administration Workshop II A-236

Practice 17-3: Monitoring the Scheduler (continued)

Question 1: Are there any existing job classes? Possible Answer: There are many job classes. Question 2: Which resource consumer group is associated with the DEFAULT_JOB_CLASS job class? Possible Answer: None. 8) On the Scheduler Job classes page, click the ORA$AT_JCURG_OS link.

Question 1: Which resource consumer group is associated with the job class? Possible Answer: ORA$AT_JCURG_OS is associated with ORA$AUTOTASK_URGENT_GROUP.
Oracle Database 11g: Administration Workshop II A-237

Practice 17-3: Monitoring the Scheduler (continued)


Question 2: For which task is this job class used? Possible Answer: For automatic optimizer statistics collection 9) Click OK, and then exit Enterprise Manager.

Oracle Database 11g: Administration Workshop II A-238

Practices for Lesson 18


Background: To prepare for an upcoming merger, you want to set the warning and critical thresholds to a lower value than the default. Ensure that you receive early warnings to give you more time to react. When you finish your test case, drop the tablespace that you used.

Oracle Database 11g: Administration Workshop II A-239

Practice 18-1: Managing Storage


Access the orcl database as the SYS user (with the oracle_4U password, connect as SYSDBA) and perform the necessary tasks through Enterprise Manager Database Control or through SQL*Plus. All scripts for this practice are in the /home/oracle/labs directory. 1) Using the DBMS_SERVER_ALERT.SET_THRESHOLD procedure, reset the databasewide threshold values for the Tablespace Space Usage metric. Connect to a SQL*Plus session and execute the following procedure:
$ . oraenv ORACLE_SID = [orcl] ? orcl $ cd ~/labs $ sqlplus / as sysdba SQL> exec DBMS_SERVER_ALERT.SET_THRESHOLD(dbms_server_alert.tablespace_pct_full,NULL,NULL,NULL,NULL,1,1,NULL,dbms_server_alert.object_type_tablespace,NULL); > > > PL/SQL procedure successfully completed. SQL>

2) From your SQL*Plus session, check the databasewide threshold values for the Tablespace Space Usage metric using the following command:
SQL> SELECT warning_value,critical_value FROM dba_thresholds WHERE metrics_name='Tablespace Space Usage' AND object_name IS NULL; WARNING_VALUE
--------------------------------------------------------------------

CRITICAL_VALUE
-------------------------------------------------------------------85 97

3) Create a new tablespace called TBSALERT with a 120 MB file called

tbsalert.dbf. Make sure that this tablespace is locally managed and uses Automatic Segment Space Management. Do not make it autoextensible, and do not specify any thresholds for this tablespace. Use Enterprise Manager Database Control to create it. If this tablespace already exists in your database, drop it first, including its files. a) Logged into Enterprise Manager as the SYS user, navigate to Server > Tablespaces.

Oracle Database 11g: Administration Workshop II A-240

Practice 18-1: Managing Storage (continued)

b). Click the Create button. c) Enter TBSALERT as the name, and click the Add button in the Datafiles region. d) Enter or confirm the following values, then click Continue Name Storage Type Disk Group Template Alias name File Size Reuse Existing File AUTOEXTEND Value Automatic Storage Management DATA DATAFILE tbsalert 120 MB TRUE FALSE

Oracle Database 11g: Administration Workshop II A-241

Practice 18-1: Managing Storage (continued)

e) Click Continue

f) On the Crate tablespace page, click Show SQL.

g) Review the SQL and then click Return.

Oracle Database 11g: Administration Workshop II A-242

Practice 18-1: Managing Storage (continued)


h) Click OK to create the tablespace. You should receive a success message.

4) In Enterprise Manager, change the Tablespace Space Usage thresholds of the TBSALERT tablespace. Set its warning level to 55 percent and its critical level to 70 percent.

a) On the Tablespaces page, select TBSALERT, click Edit, and then click Thresholds.

Oracle Database 11g: Administration Workshop II A-243

Practice 18-1: Managing Storage (continued)


b) Select Specify Thresholds, and enter 55 as Warning (%) and 70 as Critical (%) under the Space Used section. Then click Show SQL.

c) Review the statement and click Return. d) On the Edit Tablespace: TBSALERT, click Apply to modify the threshold values. You should receive a success message. 5) Return to your SQL*Plus session and check the new threshold values for the TBSALERT tablespace. In your SQL*Plus session, enter:
SQL> select warning_value,critical_value from dba_thresholds where metrics_name='Tablespace Space Usage' and object_name='TBSALERT'; WARNING_VALUE -------------------------------------------------------------CRITICAL_VALUE -------------------------------------------------------------55 70

6) In your SQL*Plus session, query the reason and resolution columns from DBA_ALERT_HISTORY for the TBSALERT tablespace.
SQL> select reason,resolution from dba_alert_history where object_name='TBSALERT';

The result should be (if you are repeating this practice, look at the last row):
REASON RESOLUT ---------------------------------------------------------Threshold is updated on metrics "Tablespace Space Usage" cleared SQL> exit $

----

Oracle Database 11g: Administration Workshop II A-244

Practice 18-1: Managing Storage (continued)


7) From the labs directory, review and execute the seg_advsr_setup.sh script that creates and populates new tables in the TBSALERT tablespace.
$ cd ~/labs $ cat seg_advsr_setup.sh
#!/bin/sh # For training only, execute as oracle OS user sqlplus /nolog <<EOF connect / as sysdba alter system set disk_asynch_io = FALSE scope = spfile; shutdown immediate; startup set echo on create table employees1 tablespace tbsalert as select * hr.employees; create table employees2 tablespace tbsalert as select * hr.employees; create table employees3 tablespace tbsalert as select * hr.employees; create table employees4 tablespace tbsalert as select * hr.employees; create table employees5 tablespace tbsalert as select * hr.employees; alter alter alter alter alter table table table table table employees1 employees2 employees3 employees4 employees5 enable enable enable enable enable row row row row row movement; movement; movement; movement; movement;

from from from from from

BEGIN FOR i in 1..10 LOOP insert into employees1 select * from employees1; insert into employees2 select * from employees2; insert into employees3 select * from employees3; insert into employees4 select * from employees4; insert into employees5 select * from employees5; commit; END LOOP; END; / insert into employees1 select * from employees1; insert into employees2 select * from employees2; insert into employees3 select * from employees3; commit; exit EOF $ $ ./seg_advsr_setup.sh SQL> Connected. SQL> System altered.

Oracle Database 11g: Administration Workshop II A-245

Practice 18-1: Managing Storage (continued)


SQL> Database closed. Database dismounted. ORACLE instance shut down. SQL> ORACLE instance started. Total System Global Area 481259520 bytes Fixed Size 1337324 bytes Variable Size 385878036 bytes Database Buffers 88080384 bytes Redo Buffers 5963776 bytes Database mounted. Database opened. SQL> SQL> Table created. SQL> Table created. SQL> Table created. SQL> Table created. SQL> Table created. SQL> SQL> Table altered. SQL> Table altered. SQL> Table altered. SQL> Table altered. SQL> Table altered. SQL> SQL> 2 3 4 5 6 7 8 PL/SQL procedure successfully completed. SQL> 109568 rows created. SQL> 109568 rows created. SQL> 109568 rows created. SQL> Commit complete. SQL>

10

11

8) Check the fullness level of the TBSALERT tablespace by using Database Control or SQL*Plus. The current level should be around 60%. Wait a few minutes and check that the warning level is reached for the TBSALERT tablespace. (If you are too fast and receive erros, just use your browsers Refresh button, or select your destintion again.) a) Logged into SQL*Plus as the SYS user, enter:
$ sqlplus / sysdba

Oracle Database 11g: Administration Workshop II A-246

Practice 18-1: Managing Storage (continued)


SQL> select sum(bytes) *100 /125829120 from dba_extents where tablespace_name='TBSALERT'; SUM(BYTES)*100/125829120 -----------------------60 SQL>

b) Enter the following query. Your results should be similar to the following:
SQL> select reason from dba_outstanding_alerts where object_name='TBSALERT'; REASON -------------------------------------------------------------Tablespace [TBSALERT] is [60 percent] full SQL>

Note: If your result is: no rows selected, wait a little longer and repeat the query. c) In Enterprise Manager on the Tablespaces page, see Used (%).

d) Navigate to the Database home page. You should see the new alert in the Space Summary section. It might take several minutes for the alert to appear.

9) In your SQL*Plus session, execute the inserts below to add more data to TBSALERT. Wait a few moments and view the critical level in both the database and Database Control. Verify that TBSALERT fullness is around 75%. a) Execute the following commands:

Oracle Database 11g: Administration Workshop II A-247

Practice 18-1: Managing Storage (continued)


SQL> insert into employees4 select * from employees4; 109568 rows created. SQL> commit; SQL> insert into employees5 select * from employees5; 109568 rows created. SQL> commit; SQL>

b) Wait a few minutes and view the critical level in both the database and Database Control. Verify that TBSALERT fullness is around 75%. In SQL*Plus, enter:
SQL> select sum(bytes) *100 /125829120 from dba_extents where tablespace_name='TBSALERT'; SUM(BYTES)*100/125829120 -----------------------75

c) Check the outstanding alrets. You may need to wait a few minutes.
SQL> select reason, message_level from dba_outstanding_alerts where object_name='TBSALERT';
REASON -------------------------------------------Tablespace [TBSALERT] is [75 percent] full MESSAGE_LEVEL ------------1

d) In Enterprise Manager,navigate to Server > Tablespaces page, amd review Used (%).

e) Navigate to the Database home page. You should see the new alert in the Space Summary region. It will take several minutes for the change in status to take effect. Note the red flag instead of the yellow one.

Oracle Database 11g: Administration Workshop II A-248

Practice 18-1: Managing Storage (continued)

10) In your SQL*Plus session, execute the following delete statements to delete rows from tables in TBSALERT. These statements will take several minutes to complete. Then exit your SQL*Plus session.
SQL> delete employees1; 219136 rows deleted. SQL> commit; Commit complete. SQL> delete employees2; 219136 rows deleted. SQL> commit; Commit complete. SQL> delete employees3; 219136 rows deleted SQL> commit; Commit complete. SQL> exit $

11) Now, run the Segment Advisor for the TBSALERT tablespace in Enterprise Manager. Make sure that you run the Advisor in Comprehensive mode without time limitation. Accept and implement its recommendations. After the recommendations have been implemented, check whether the fullness level of TBSALERT is below 55%. a) From the Database home page, select Advisor Central under Related Links and then click Segment Advisor.

Oracle Database 11g: Administration Workshop II A-249

Practice 18-1: Managing Storage (continued)

b) On the Segment Advisor: Scope page, select Tablespaces and click Next. c) On the Segment Advisor: Objects page, click Add, select TBSALERT. Click OK and then click Show Advanced Options. d) In the Options section, click Limited and enter 30 for Time Limit (mins)

e) Then click Next.

Oracle Database 11g: Administration Workshop II A-250

Practice 18-1: Managing Storage (continued)

f) On the Segment Advisor: Schedule page, make sure Immediately is selected. Select your proper timezone and click Next. g) On the Segment Advisor: Review page, click Show SQL.
Create task and objects script DECLARE taskname varchar2(100); taskdesc varchar2(128); task_id number; object_id number; timeLimit varchar2(25); numDaysToRetain varchar2(25); objectName varchar2(100); objectType varchar2(100); BEGIN taskname := 'SEGMENTADV_5033431'; taskdesc :='Get shrink advice based on object growth trend'; numDaysToRetain :='30'; dbms_advisor.create_task('Segment Advisor',?,taskname,taskdesc ,NULL); dbms_advisor.create_object(taskname, 'TABLESPACE', 'TBSALERT', ' ', ' ', NULL, object_id); dbms_advisor.set_task_parameter(taskname, 'RECOMMEND_ALL', 'TRUE'); timeLimit :='1800'; dbms_advisor.set_task_parameter(taskname, 'TIME_LIMIT', timeLimit);

Oracle Database 11g: Administration Workshop II A-251

Practice 18-1: Managing Storage (continued)


dbms_advisor.set_task_parameter(taskname, 'DAYS_TO_EXPIRE', numDaysToRetain); END; Execute task script DECLARE taskname varchar2(100); BEGIN taskname := 'SEGMENTADV_5033431'; dbms_advisor.reset_task(taskname); dbms_advisor.execute_task(taskname); END;

h) Review the statements and click Return.

i) Back on the Segment Advisor: review page, the Submit button. j) This takes you back to the Advisor Central page. Click the SEGMENTADV_xxxxx link in the Name column. k) On the Segment Advisor Task page, click the Recommendation Details button .

Oracle Database 11g: Administration Workshop II A-252

Practice 18-1: Managing Storage (continued)


l) If needed, click your browsers Refresh button until you see recommendations for the TBSALERT tablespace. m) Click Recommendation Details.

n) Click the Select All link and then click the Shrink button.

o) On the Shrink Segment: Options page, make sure that you click the Compact Segments and Release Space option button. Click Show SQL.

p) Review the statements and click Return.

Oracle Database 11g: Administration Workshop II A-253

Practice 18-1: Managing Storage (continued)

q) On the Shrink Segment: Options page, click Implement.

r) On the Shrink Segment: Schedule page, click the Submit button.

s) On the Scheduler Jobs page, click the SQLSCRIPT_nnn link.

Oracle Database 11g: Administration Workshop II A-254

Practice 18-1: Managing Storage (continued)

t) On the View Job page, scroll to the bottom of the page. Under Operation Detail, you should see that the job succeeded. (If its still running, use your browsers Refresh button). Then click OK. 12) Wait a few minutes and check that there are no longer any outstanding alerts for the TBSALERT tablespace. Then navigate to the Database home page. You should see Problem Tablespaces: 0.

13) Retrieve the history of the TBSALERT Tablespace Space Usage metric for the last 24

hours. a) On the Database home page, select All Metrics in the Related Links region.

Oracle Database 11g: Administration Workshop II A-255

Practice 18-1: Managing Storage (continued)

b) Expand the Tablespaces Full category, and click the Tablespace Space Used (%) link.

c) Make sure that you select Real Time: Manual Refresh from the View Data dropdown list. Then click the TBSALERT link. d) This takes you to the Tablespace Space Used (%): Tablespace Name TBSALERT page. Select Last 24 hours from the View Data drop-down list.

e) View entries in the Alert History.


14) Reset the databasewide default thresholds from the Tablespace Space Usage metric

for a) On the Tablespace Space Used (%): Tablespace Name TBSALERT page, click the Edit Tablespace link in the related Links section. b) This opens the Edit Tablespace: TBSALERT page. Click the Thresholds tab. c) Click Use Database Default Thresholds option in the Space Used (%) section. Then click Show SQL.

Oracle Database 11g: Administration Workshop II A-256

Practice 18-1: Managing Storage (continued)

d) Review the statement and click return. e) On the Edit Tablespace: TBSALERT, Thresholds page, click the Apply button. You should receive a success message. 15) Note: This is your mandatory cleanup step. Because you have finished with your test case, view and execute the seg_advsr_cleanup.sh script from the labs directory to drop your TBSALERT tablespace.
$ cat seg_advsr_cleanup.sh #!/bin/sh # For training only, execute as oracle OS user sqlplus /nolog <<EOF connect / as sysdba alter system set disk_asynch_io = TRUE scope = spfile; shutdown immediate; startup drop tablespace tbsalert including contents and datafiles; exit EOF $ $ ./seg_advsr_cleanup.sh SQL> Connected. SQL> System altered. SQL> Database closed. Database dismounted. ORACLE instance shut down. SQL> ORACLE instance started. Total System Global Area Fixed Size Variable Size Database Buffers Redo Buffers Database mounted. Database opened. SQL> Tablespace dropped. SQL> $ 481259520 1337324 385878036 88080384 5963776 bytes bytes bytes bytes bytes

Oracle Database 11g: Administration Workshop II A-257

Practices for Lesson 19


Physical disks with 4 KB-sectors are now available. Although this largely concerns only the operating system, the Oracle server is aware of them and uses them automatically when you create new databases. However, as a DBA you might have databases, which were created on 512-bytes disks. In this practice, you learn about how to perform an offline migration from 512-bytes disks to 4 KB-sector disks.

Oracle Database 11g: Administration Workshop II A-258

Practice 19-1: Managing Space for the Database


In this practice, you view a demonstration of using 4 KB-sector disks. The focus is on performing an offline migration of redo log groups form 512-bytes to 4 KB-sector disks. 1) Click the oracles Home icon on your desktop. 2) Navigate to the /home/oracle/demos/4kb_disks directory. 3) Double-click the 4kb_disks_viewlet_swf.html file. 4) In the Run or Display window, click Display and view the presentation. 5) Use the controls at the bottom of the viewlet window to start, pause and stop the presentation, as suits your personal learning style. 6) Uninterrupted viewing of the demos takes about ten minutes. When you have finished viewing the presentation, close your Web browser window.

Oracle Database 11g: Administration Workshop II A-259

Practices for Lesson 20


Background: You are responsible for an active database that cannot be shut down. It is running in ARCHIVELOG mode. Now you are requested to duplicate this database, for testing purposes. To setup a working environment for your duplicated database, you: Add two disks to your DATA disk group. Ensure that the orcl source database is in ARCHIVELOG mode with a 7 GB fast recovery area. Set up dbtest as the net service name for your planned dbtest database. Use Oracle Net Manager to configure the LISTENER with the dbtest and orcl database services. Clone a database by using RMAN. Start the duplication process in Enterprise Manager. Test access

Oracle Database 11g: Administration Workshop II A-260

Practice 20-1: Duplicating a Database


In this practice, you clone a database and use additional utilities to setup a working environment. To simulate this environment, assume that your active database is orcl (which is stored in ASM). 1) Before you start cloning your database, add the last two ASM disks to the DATA disk group. a) From a graphical terminal window, connected as user oracle, set up your environment to use the +ASM instance, and execute asmca.
$ . oraenv ORACLE_SID = [orcl] ? +ASM The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid is /u01/app/oracle $ $ asmca

b) On the Configure ASM: Disk Groups subpage, select DATA disk group. c) Right click.

d) Select Add disks.

e) On the Add Disks page, select both ORCl:ASMDISK12 and ORCL:ASMDISK13. f) Click OK.

Oracle Database 11g: Administration Workshop II A-261

Practice 20-1: Duplicating a Database (continued)

g) On the information window that appears, click OK. h) Back to the Configure ASM: Disk Groups subpage, click Exit. i) On the ASM Configuration Assistant window, click Yes. 2) Check the ASM activities and wait until the rebalance operation is finished: a) Log in to Enterprise Manager as user SYS.

b) On the Home page, click the +ASM link in the General section. c) On the ASM Home page, click the Disk Groups tab. d) You may have to log in to the ASM instance if you have not previously done it and saved credentials: On the Automatic Storage Management Login page, enter SYS in the Username field, oracle_4U in the Password field, and SYSASM in the Connect As field. Select Save as Preferred Credential. Then click Login.

Oracle Database 11g: Administration Workshop II A-262

Practice 20-1: Duplicating a Database (continued)

e) On the Disk Groups sub page, click the DATA link.

f) On the Disk Group: DATA page, click at the Pending Operations field in the General section.

g) Click Refresh and Wait until the rebalance operation is finished. h) Then click the database tab. 3) To ensure that you are pointing to the orcl database and that this database is in ARCHIVELOG mode with a 7 GB fast recovery area, execute the rman_archivelog.sh script from a terminal window in your working directory.
$ . oraenv ORACLE_SID = [+ASM] ? orcl The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle

Oracle Database 11g: Administration Workshop II A-263

Practice 20-1: Duplicating a Database (continued)


$ ./rman_archivelog.sh ******************************************* For demo purposes ONLY: * Enable ARCHIVELOG mode for database The script may appear to hang at the SQL prompt when the database is shutting down and being opened. Wait a few minutes and it should progress. ******************************************* SQL> SQL> System altered. SQL> SQL> Database closed. Database dismounted. ORACLE instance shut down. SQL> ORACLE instance started. Total System Global Area Fixed Size Variable Size Database Buffers Redo Buffers Database mounted. SQL> Database altered. SQL> Database altered. SQL> Database log mode Automatic archival Archive destination Oldest online log sequence Next log sequence to archive Current log sequence SQL> $ Archive Mode Enabled USE_DB_RECOVERY_FILE_DEST 15 17 17 481259520 1337324 394266644 79691776 5963776 bytes bytes bytes bytes bytes

4) Set up dbtest as the net service name for your planned dbtest database. a) In a graphical terminal window as the oracle user, set up your environment to point to your orcl instance and invoke the netca utility. $ . oraenv ORACLE_SID = [orcl] ? orcl $ netca
The Oracle Net Configuration Assistant (NETCA) opens a window.

b) On the Welcome page, select Local Net Service Name configuration, and click Next. c) On the Net Service Name Configuration page, select Add and click Next.

Oracle Database 11g: Administration Workshop II A-264

Practice 20-1: Duplicating a Database (continued)


d) In the Service Name field, enter dbtest and click Next. e) On the Net Service Name Configuration, Select Protocols page, select TCP and click Next.

f) On the Net Service Name Configuration, TCP/IP Protocol page, enter your host name, for example, edrsr37p1.us.oracle.com, select Use the standard port number of 1521, and then click Next. g) On the Net Service Name Configuration, Test page, select No, do not test (because your dbtest database does not yet exist) and click Next. h) On the Net Service Name Configuration, Net Service Name page, enter dbtest as Net Service Name, and then click Next. i) Click No in answer to the question Would you like to configure another net service name? and then click Next. j) When you see the completion message, click Next again. k) Finally, click Finish. 5) Use Oracle Net Manager to configure the LISTENER with the dbtest and orcl database services. a) In a graphical terminal window as the oracle user, set up your environment to point to your +ASM instance and invoke the netmgr utility.
$ . oraenv ORACLE_SID = [orcl] ? +ASM

Oracle Database 11g: Administration Workshop II A-265

Practice 20-1: Duplicating a Database (continued)


The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid is /u01/app/oracle $ netmgr

b) The Oracle Net Manager opens a window. Click the + icon, right before the word Local, then click the + icon, right before the word Listeners to expand the nodes in the navigation tree until you see the listener, called LISTENER.

c) First select LISTENER in the left part of the window then, select Database Services from the drop-down in the right part of the window. d) Click the Add Database button.

Oracle Database 11g: Administration Workshop II A-266

Practice 20-1: Duplicating a Database (continued)

e) Enter or confirm the following values: Global Database Name: dbtest Oracle Home Directory: /u01/app/oracle/product/11.2.0/grid/ SID: dbtest f) Click the Add Database button again. g) Enter the following values: Global Database Name: orcl Oracle Home Directory: /u01/app/oracle/acfsmounts/acfs_db1/ SID: orcl

Oracle Database 11g: Administration Workshop II A-267

Practice 20-1: Duplicating a Database (continued)

h) From the Oracle Net Manager menu bar, select File > Save Network Configuration, then File > Exit. 6) Clone a database by using RMAN. Start the duplication process in Enterprise Manager. a) Log in to Enterprise Manager as the SYS user with the oracle_4U password and connect as SYSDBA. b) Navigate to Data Movement > Clone Database (in the Move Database Files section).

c) On the Clone Database: Source Type page, select A running database and Use Recovery Manager (RMAN) to copy database files and then click Continue.

Oracle Database 11g: Administration Workshop II A-268

Practice 20-1: Duplicating a Database (continued)

d) On the Clone Database: Source Options page, enter or confirm oracle as the username and password, click Save as Preferred Credential, and then click Next.

e) On the Clone Database: Select Destination page, enter dbtest both as Global Database Name and as Instance Name, and select Automatic Storage Management (ASM) from the Database Storage drop down list. Then click Next. f) If the Clone Database: ASM Instance Login page appears, enter oracle_4U as SYS password, and click Login.

Oracle Database 11g: Administration Workshop II A-269

Practice 20-1: Duplicating a Database (continued)

g) On the Clone Database: Destination Options page, enter or confirm DATA as Database Area, FRA as the Flash Recovery Area, and enter 2000 as the Flash Recovery Area Size. Then click Next. h) You receive a warming that the FRA is smaller then twice the database size. Because you plan to rarely use the FRA of this test database, click Yes to continue.

Oracle Database 11g: Administration Workshop II A-270

Practice 20-1: Duplicating a Database (continued)

i) On the Clone Database: Database Configuration page: Select Configure Enterprise Manager Database Control for this database, Confirm
/u01/app/oracle/product/11.2.0/dbhome_1/network/admin as

the Configuration File Location. Enter or confirm /u01/app/oracle/product/11.2.0/dbhome_1 in the Listener Oracle Home field. Enter oracle_4U six times in all password fields, and enter 5505 as HTTP port. Click Next. j) If you receive a warning, that the sqlnet.ora file or the listener.ora file do not exist, accept the warning by clicking Yes.

Oracle Database 11g: Administration Workshop II A-271

Practice 20-1: Duplicating a Database (continued)

k) On the Clone Database: Schedule page, ensure that the job starts immediately and click Next.

Oracle Database 11g: Administration Workshop II A-272

Practice 20-1: Duplicating a Database (continued)

l) On the Clone Database: Review page, review the Details, including the Database Storage and click Submit Job. m) Wait on the Clone Database job is being submitted page.

n) The Clone Database: Confirmation page should display a success message. Click the View Status to transfer to the Job Activity page. o) This takes you to the Execution page. Occasionally, click your browsers reload button, to display the job progress until you receive a success message. (The execution time for your job depends on your hardware and available system resources.)

Oracle Database 11g: Administration Workshop II A-273

Practice 20-1: Duplicating a Database (continued)

p) Scroll to the bottom of the page to see the executed steps. Some of the executed steps have output logs, for example: Source Preparation shows the initialization parameters of the source database. Destination Preparation shows dbtest listener and service information. Duplicate database contains RMAN operations. Recover Database shows restarting of the dbtest database. Add Temporary Files also shows output from Enterprise Manager configuration. Check Database and Mask data each log into the new duplicated database.

7) Test the access to your cloned databases in SQL*Plus.


Oracle Database 11g: Administration Workshop II A-274

Practice 20-1: Duplicating a Database (continued)


a) Connected as the oracle user in a graphical terminal session, ensure that you are pointing to the orcl database.
$ . oraenv ORACLE_SID = [+ASM] ? orcl $

b) Connect as the SYS user to your orcl database and execute the following query:
select dbid, name, created, open_mode from v$database; $ sqlplus / as sysdba SQL> select dbid, name, created, open_mode from v$database; DBID NAME CREATED OPEN_MODE ---------- --------- ------------------- -------------------1221383234 ORCL 2009-07-30:19:21:38 READ WRITE SQL>

c) Now connect as the SYSTEM user with the oracle_4U password to your dbtest database and execute the preceding query. Exit from SQL*Plus.
SQL> connect system@dbtest Enter password: oracle_4U <<< not displayed Connected. SQL> select dbid, name, created, open_mode from v$database; DBID NAME CREATED OPEN_MODE ---------- --------- ------------------- -------------------1086723993 DBTEST 2009-08-02:19:12:25 READ WRITE SQL> exit $

8) With the dbca utility, delete the DBTEST database because it is no longer needed a. In a terminal window,sStart dbca.
$ dbca

b. Click Next on the Welcome page. c. Choose Delete a Database on the Operations page.

d. Select dbtest from the list of databases to delete. Then click Finish.

Oracle Database 11g: Administration Workshop II A-275

Practice 20-1: Duplicating a Database (continued)


e. Confirm the delete operation by clicking Yes. f. After the delete operation is finished, click No when asked if you want to perform another dbca operation.

Oracle Database 11g: Administration Workshop II A-276

You might also like