XPP A Practices Solutions
XPP A Practices Solutions
XPP A Practices 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
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
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.
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.
2) Use labs as your working directory. Unless otherwise indicated, always work from that directory.
$ cd ~/labs
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>
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.
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.
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
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
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
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
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>
5) Exit RMAN.
RMAN> exit Recovery Manager complete.
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.
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.
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.
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.
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.
18) Review the Confirmation page, and then click OK to start the database creation process.
20) When the Database Configuration Assistant finishes running, view the final page, and then click Exit.
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>
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
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>
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.
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
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>
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
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
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
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)
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.
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
Note that the control file and SPFILE are automatically backed up now.
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.
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
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.
e) Click OK. 2) Make sure that the ORACLE_SID variable is set to ORCL.
$ . oraenv ORACLE_SID = [orcl] ? orcl
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
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.
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
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 ---- -- ---- ---------- ------------------- ----
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>
8) List the backup sets again. See that the backup you just deleted is no longer listed.
RMAN> list backup of datafile 5;
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
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
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>
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';
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
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
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
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>
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
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.
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>
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>
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.
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?
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
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
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
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
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;
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
oinstall 4096 Jul oinstall 4096 Jul dba 26222592 Jul dba 1125867520 Jul dba 6601 Jul
29 29 29 29 29
$ 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
29 29 29 29
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>
12) Try again to access the sys.customers table, and then exit SQL*Plus.
SQL> select count(*) from sys.customers; COUNT(*) ----------
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 $
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
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
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
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
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
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.
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
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'
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
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
3) In a separate terminal window, perform some DML on the table in the APPRAISAL tablespace. Use the emp_inserts.sh script.
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;
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
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
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
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
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 ------- ---- - ------------------- ---------- ------------------
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>
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
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
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...
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 SERIAL# CONTEXT SOFAR TOTALWORK %_COMPLETE -------- ---------- ---------- ---------- ---------- ------21 934 4 131039 236000 55.53
7) Run the cleanup_tape_dir.sh script to remove files from the /tape directory.
$ ./cleanup_tape_dir.sh
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.
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
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:
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".
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.
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
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
orcl_ora_14872_i8729.trm
hm
incident
incpkg
ir
lck
metadata
stage
20) Use Enterprise Manager to package your problem quickly. 21) From the Problem Details page, click Quick Package in the Investigate and Resolve section.
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.
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.
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
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;
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.
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>
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
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
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.
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
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
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>
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
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.
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.
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')
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>
FLASHBACK_ARCHIVE_NAME format A25 ARCHIVE_TABLE_NAME format A20 TABLE_NAME format A12 OWNER_NAME format A10
DESC dba_flashback_archive
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>
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>
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.
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.
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.
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.
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.
13) Optionally, click the Show SQL button, review the SQL and click OK.
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.
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.
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
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
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
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.
(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
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
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>
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
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
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...
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.
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...
6 rows selected. SQL> SQL> pause Press [Enter] to exit the script... Press [Enter] to exit the script...
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
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...
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
IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE DEFERRED DEFERRED IMMEDIATE IMMEDIATE IMMEDIATE IMMEDIATE
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);
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
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
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
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.
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
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) ) )
b) Use the DBMS_SERVICE.CREATE_SERVICE procedure to create a service. (The command is entered on one line.)
$ sqlplus / as sysdba
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).
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 ------------------------- ----------- --------------------
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
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
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;
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.
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.
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
b) Toggle Enabled and Disabled, then click Show SQL when the Global Status is Enabled.
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.
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; /
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
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;
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
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.
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.
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.
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.
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
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%)
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.
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.
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.
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.
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.
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
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.
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 => ? ,
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.
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.
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.
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.
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.
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.
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.
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.
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>
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.
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
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.
$ ./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
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.
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
c) On the Schedule folder tab, enter and confirm the following values: Timezone: Your_local_timezone Repeating: Do not Repeat Start: Immediately
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.
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
e) Review the statements, and then click Return. f) Click OK to create the program.
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
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.)
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.
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.
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
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.
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
--------------
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.
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.
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
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
-- 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
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 *
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; /
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.
b) Navigate to the Scheduler Jobs page. Then click the History tab. c) View the history of MY_LWT_JOB.
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.
b) On the Confirmation page, select Drop the job and any running instance. Click Yes.
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.
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.
Question: Are there any jobs? Possible Answer: There are some jobs. 3) Click Programs 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?
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.
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
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
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.
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
e) Click Continue
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.
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 $
----
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.
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
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:
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.
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.
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)
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);
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 .
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.
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.
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.
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.
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
b) On the Configure ASM: Disk Groups subpage, select DATA disk group. c) Right click.
e) On the Add Disks page, select both ORCl:ASMDISK12 and ORCL:ASMDISK13. f) Click OK.
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.
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
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.
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
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.
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
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.
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.
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.
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.
k) On the Clone Database: Schedule page, ensure that the job starts immediately and click Next.
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.)
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.
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.