SQL Gone Bad What to do when faulty SQL code corrupts your database Mary Louise Powers Tom Smull Lehigh University.

Slides:



Advertisements
Similar presentations
Using the SQL Access Advisor
Advertisements

Refreshing Materialized Views
12 Copyright © 2005, Oracle. All rights reserved. Query Rewrite.
Using the Set Operators
Data recovery 1. 2 Recovery - introduction recovery restoring a system, after an error or failure, to a state that was previously known as correct have.
9 Copyright © 2006, Oracle. All rights reserved. Automatic Performance Management.
Overview of performance tuning strategies Oracle Performance Tuning Allan Young June 2008.
An Overview of GoldenGate Replication Brian Keating December 31, 2009.
A Guide to Oracle9i1 Creating and Modifying Database Tables Chapter 2.
11 Copyright © Oracle Corporation, All rights reserved. Managing Tables.
9 Copyright © 2004, Oracle. All rights reserved. Using DDL Statements to Create and Manage Tables.
9 Creating and Managing Tables. Objectives After completing this lesson, you should be able to do the following: Describe the main database objects Create.
Oracle Materialized Views for Replication COUG Presentation, Feb 20, 2014 Jane Lamont,
SQL2-ch2 管理綱要物件.
Data Definition Language (DDL)
Oracle Academy Egypt Virtual training week 8 Sections from 7 to 9.
Creating Tables. 2 home back first prev next last What Will I Learn? List and provide an example of each of the number, character, and date data types.
8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Using Explicit Cursors.
PL/SQL.
4 Oracle Data Integrator First Project – Simple Transformations: One source, one target 3-1.
Password Management for Oracle8 Ari Kaplan Independent Consultant.
13 Copyright © Oracle Corporation, All rights reserved. Controlling User Access.
1 Don’t Shut Down That Database! Use Oracle 9i Online Object Redefinition Instead Chris Lawson Performance Solutions Roger Schrag Database Specialists,
AN INTRODUCTION TO PL/SQL Mehdi Azarmi 1. Introduction PL/SQL is Oracle's procedural language extension to SQL, the non-procedural relational database.
INTRODUCTION TO ORACLE Lynnwood Brown System Managers LLC Backup and Recovery Copyright System Managers LLC 2008 all rights reserved.
17 Copyright © 2005, Oracle. All rights reserved. Performing Flashback.
Prligence Empowering Intelligence All About Fine Grained Access Control by Arup Nanda.
Backup and recovery Basics of Backup and restoration Types of recovery Defining strategy Starting up and shutting down 80/20 rule SLA’s.
A Guide to SQL, Seventh Edition. Objectives Create a new table from an existing table Change data using the UPDATE command Add new data using the INSERT.
Harvard University Oracle Database Administration Session 2 System Level.
RMAN Restore and Recovery
Backup and Recovery (2) Oracle 10g CAP364 1 Hebah ElGibreen.
Backup and Recovery Part 1.
Chapter 12 Performing Incomplete Recovery. Background Viewed as one of the more difficult chapters to write Thought it was important to put in material.
CHAPTER 16 User-Managed Backup and Recovery. Introduction to User Managed Backup and Recovery Backup and recover is one of the most critical skills a.
Backup Concepts. Introduction Backup and recovery procedures protect your database against data loss and reconstruct the data, should loss occur. The.
CHAPTER 16 User-Managed Backup and Recovery. Introduction to User Managed Backup and Recovery Backup and recover is one of the most critical skills a.
Adapted from Afyouni, Database Security and Auditing DB Auditing Examples (Ch. 9) Dr. Mario Guimaraes.
Adapted from Afyouni, Database Security and Auditing Database Application Auditing – Ch. 8.
ORACLE ONLINE TRAINING Contact our Support Team : SOFTNSOL India: Skype id : softnsoltrainings id:
1 Oracle Flashback Technologies COUG Presentation – Feb 2010 Feb 25, 2010 Ray Smith
9 Copyright © 2004, Oracle. All rights reserved. Flashback Database.
17 Copyright © Oracle Corporation, All rights reserved. Recovery Catalog Creation and Maintenance.
Oracle Database 10 g Time Navigation: Human-Error Correction Magnus Lubeck DBA/Systems Analyst CERN, IT-DB Group Session id: Tammy Bednar Sr. Product.
6 Copyright © 2006, Oracle. All rights reserved. Flashback.
Advanced Databases DBA: Security and Backups Guide to Oracle 10g 1.
10 Copyright © 2004, Oracle. All rights reserved. Recovering from User Errors.
14 Copyright © 2005, Oracle. All rights reserved. Backup and Recovery Concepts.
Over view  Why Oracle Forensic  California Breach security Act  Oracle Logical Structure  Oracle System Change Number  Oracle Data Block Structure.
Transactions, Roles & Privileges Oracle and ANSI Standard SQL Lecture 11.
© 2006 Northgate Information Solutions plc and its associated companies. All rights reserved. Slide 1.
18 Copyright © 2004, Oracle. All rights reserved. Backup and Recovery Concepts.
A Guide to SQL, Eighth Edition Chapter Six Updating Data.
6 Copyright © 2007, Oracle. All rights reserved. Performing User-Managed Backup and Recovery.
18 Copyright © 2004, Oracle. All rights reserved. Recovery Concepts.
14 Copyright © 2005, Oracle. All rights reserved. Backup and Recovery Concepts.
11 Copyright © 2007, Oracle. All rights reserved. Using Flashback Technology.
Introduction to Utilities for New DBAs Session #332 4/19/2008 Erik Hobbs Introduction to Utilities for New DBAs.
 CONACT UC:  Magnific training   
20 Copyright © 2006, Oracle. All rights reserved. Best Practices and Operational Considerations.
What is the Flashback Database? Improves a database’s availability Useful alternative to traditional restoration methods Contains Flashback logs Archived.
14 Copyright © 2007, Oracle. All rights reserved. Backup and Recovery Concepts.
What is Flashback? Technology that allows you to revert the database to a point in time in the past Several versions of flashback available Different types.
 Reviewing basic architecture concepts  Oracle 10g Architecture  Main features of 9i and 10g
23 Copyright © 2004, Oracle. All rights reserved. Preferring the Past: Flashback.
2 Copyright © 2009, Oracle. All rights reserved. Managing Schema Objects.
Performing Flashback.
Performing Tablespace Point-in-Time Recovery
Performing Tablespace Point-in-Time Recovery
Oracle 12R2 Database Flashback Technologies
Presentation transcript:

SQL Gone Bad What to do when faulty SQL code corrupts your database Mary Louise Powers Tom Smull Lehigh University

Lehigh University technical environment All SCT Banner modules installed All Self Service products installed AIX/Unix, Oracle 9i Luminis / Portal

What can go wrong? Batch updates to the system An unnoticed semi-colon Fixes to the system People make mistakes

When it does go wrong Symptoms Scope (what / where / how many) Causes Possible Solutions / Resources Effect repairs Communicate / Document Punish Offenders

What tools are available? Most recent backup Last nights export LogMiner Flashback

LogMiner Allows DBA to examine contents of archived redo logs Especially: SQL_REDO, SQL_UNDO Knowing when the error occurred is helpful Knowing Oracle user who did it is also helpful

LogMiner script generation Need access to current data dictionary Which archive logs are to be searched? Which tables are suspect? Which user performed the erroneous update?

accept start_seq prompt 'Starting sequence: ' accept end_seq prompt ' Ending sequence: ' spool logminer_&start_seq select '-- exec dbms_logmnr_d.build(''ban6dictfile'',''/home/local/dba/logmnr'');' from sys.dual; select 'exec dbms_logmnr.add_logfile(LogFileName=>'''||name||''',Options=>dbms_logmnr.NEW);' from V_$ARCHIVED_LOG where SEQUENCE# = to_number('&start_seq'); select 'exec dbms_logmnr.add_logfile(LogFileName=>'''||name||''',Options=>dbms_logmnr.ADDFILE) ;' from V_$ARCHIVED_LOG where SEQUENCE# between (to_number('&start_seq') +1) and (to_number('&end_seq')) order by SEQUENCE#;

-- PART 2… select 'exec dbms_logmnr.start_logmnr(DictFileName=>''/~/dba/logmnr/ban6dictfile'');' from sys.dual; select 'spool LOGMNR.lst select to_char(timestamp,''YY-MM-DD HH24:MI:SS'') DATE_TIME, username, sql_redo /* your code goes here */ from sys.v_$logmnr_contents /* where seg_name IN (''SPBPERS''); */ spool off exec dbms_logmnr.end_logmnr;' from sys.dual; spool off

sys.v_$logmnr_contents (partial) Name Type SCN NUMBER CSCN NUMBER TIMESTAMP DATE COMMIT_TIMESTAMP DATE THREAD# NUMBER LOG_ID NUMBER. SEG_OWNER VARCHAR2(32) SEG_NAME VARCHAR2(256) SEG_TYPE_NAME VARCHAR2(32) ROW_ID VARCHAR2(19) SESSION# NUMBER SERIAL# NUMBER USERNAME VARCHAR2(30) OPERATION VARCHAR2(32) OPERATION_CODE NUMBER SQL_REDO VARCHAR2(4000) SQL_UNDO VARCHAR2(4000). SQL_COLUMN_TYPE VARCHAR2(32) SQL_COLUMN_NAME VARCHAR2(32)

-- exec dbms_logmnr_d.build('ban6dictfile','/home/local/dba/logmnr'); exec dbms_logmnr.add_logfile(LogFileName=>'/u5/ORACLE/arch_ban6_1_ dbf', Options=>dbms_logmnr.NEW); exec dbms_logmnr.add_logfile(LogFileName=>'/u5/ORACLE/arch_ban6_1_ dbf', Options=>dbms_logmnr.ADDFILE); exec dbms_logmnr.add_logfile(LogFileName=>'/u5/ORACLE/arch_ban6_1_ dbf', Options=>dbms_logmnr.ADDFILE); exec dbms_logmnr.add_logfile(LogFileName=>'/u5/ORACLE/arch_ban6_1_ dbf', Options=>dbms_logmnr.ADDFILE); exec dbms_logmnr.add_logfile(LogFileName=>'/u5/ORACLE/arch_ban6_1_ dbf', Options=>dbms_logmnr.ADDFILE); exec dbms_logmnr.start_logmnr(DictFileName=>'/home/local/dba/logmnr/ban6dictfile'); spool LOGMNR.lst select to_char(timestamp,'YY-MM-DD HH24:MI:SS') DATE_TIME, username, sql_redo, sql_undo from sys.v_$logmnr_contents where seg_name = 'SPBPERS'; and username = 'SATURN' spool off exec dbms_logmnr.end_logmnr;

-- FINAL GENERATED RECOVERY CODE: update "SATURN"."SPBPERS" set "SPBPERS_ETHN_CODE" = 'H' where "SPBPERS_ETHN_CODE" IS NULL and ROWID = 'AAAGIeAADAABX+KAA'; update "SATURN"."SPBPERS" set "SPBPERS_ETHN_CODE" = 'X' where "SPBPERS_ETHN_CODE" IS NULL and ROWID = 'AAAGIeAADAABX+KAA'; update "SATURN"."SPBPERS" set "SPBPERS_ETHN_CODE" = 'W' where "SPBPERS_ETHN_CODE" IS NULL and ROWID = 'AAAGIeAADAABX+KAA'; update "SATURN"."SPBPERS" set "SPBPERS_ETHN_CODE" = 'H' where "SPBPERS_ETHN_CODE" IS NULL and ROWID = 'AAAGIeAADAABX+KAB';

Oracle Flashback Lets you see data as it was in the past Allows online processing Need to know what was changed Can only go back as far as Undo Retention time Can restore accidental drop/delete Useful to reset tables in testing mode

Requirements/Limitations Oracle 9i or higher Must use Auto Undo Management Limited to undo retention time User must have certain privileges Flashback any/target table Execute on dbms_flashback

Flashback vs LogMiner Logminer lets you review transactions to see what happened. Flashback requires you to know what happened. Flashback is limited to the retention time – Logminer is limited by archivelog availability. Flashback can provide a before/after view of data in real time.

Flashback Query – Oracle9i Dbms_flashback package exec dbms_flashback.enable_at_time(…); select * from mytable; Exec dbms_flashback.disable;

declare Type pers_cursor is REF CURSOR; pcur pers_cursor; prow spbpers%ROWTYPE; BEGIN -- make sure no transactions or flashback in progress commit; dbms_flashback.disable; -- set the database back to previous time dbms_flashback.enable_at_time(to_timestamp ('16-NOV-2005', 'DD-MON-YY')); open pcur for 'select * from spbpers where spbpers_ethn_code is not null'; -- move back to present by disabling flashback. dbms_flashback.disable; LOOP fetch pcur into prow; exit when pcur%NOTFOUND; update spbpers set spbpers_ethn_code = prow.spbpers_ethn_code where spbpers_pidm = prow.spbpers_pidm and spbpers_ethn_code is null; commit; END LOOP; END;

Flashback Query – Oracle9i as of clause Select * from mytable as of timestamp …; Example : -- Restore rows erroneously deleted: insert into mytable (select * from mytable as of timestamp systimestamp - interval '15' minute minus select * from mytable);

Flashback Enhancements - 10g Flashback table Flashback database Version(s) query

Flashback Table Alternative to point in time recovery from backup. Restores table to earlier point in time or undrops table. Requires select, insert, delete, alter, and flashback privileges on table. To rewind table, enable row movement. Flashback table to timestamp. Recycle bin holds dropped tables.

Flashback table to earlier point in time alter table mytable enable row movement; flashback table mytable to SCN ; Or flashback table mytable to TIMESTAMP ;

Flashback Dropped Table FLASHBACK TABLE TO BEFORE DROP ORIGINAL NAME RECYCLEBIN NAME DROP TIME NAME_ADDR BIN$6u0c1Kv2wG7gM4C0PwLAbg==$ :19:25:47 NAME_ADDR BIN$6R5+rrqmwPbgM4C0PwLA9g==$ :19:30:19 MYTABLE BIN$BdpRTDoogGrgQ4C0PwKAag==$ :11:20:36 SQL> select * from "BIN$BdpRTDoogGrgQ4C0PwKAag==$0"; ID NAME Smull 2 Winwood 3 Smith SQL> flashback table "BIN$BdpRTDoogGrgQ4C0PwKAag==$0" to before drop; Flashback complete. SQL> select * from mytable; ID NAME Smull 2 Winwood 3 Smith

Managing These Tools Production vs Test Systems Audit Trails Templates

References Oracle Database Backup and Recovery Advanced User's Guide Oracle Database Backup and Recovery Basics Oracle Database Recovery Manager Reference

Questions?

Presenters Mary Louise Powers Tom Smull