05 September, 2016

Index of Posts

My friend, Ravi Muthupalani has created an Index of my Blog Posts.


Hemant's Oracle DBA Blog

As on 03-Oct-16

2016-10
OBJ# and DATAOBJ# in 12c AWR

2016-09
SQLLoader DIRECT Option and Unique Index
SQL*Net Message Waits
CODE :  View My Source Code -- a Function

2016-07
CODE : Persistent Variables via PL/SQL Package and DBMS_APPLICATION_INFO
Loading SQL*Plus HELP into the Database
ACS, SQL Patch and SQL Plan Baseline

2016-06
Services -- 4 : Using the SERVICE_NAMES parameter (non-RAC, PDB)
Services -- 3 : Monitoring Usage of Custom Services
Services -- 2 : Starting and Connecting to Services (non-RAC)
Services -- 1 : Services in non-RAC 12c MultiTenant
Data Recovery Advisor (11g)
Blog Series on 11gR2 RAC, GI, ASM
Compression -- 8 : DROPping a Column of a Compressed Table

2016-05
Restore and Recovery from Incremental Backups : Video
Recent Blog Series on Partition Storage
TRUNCATEing a Table makes an UNUSABLE Index VALID again
Partition Storage -- 8 : Manually Sizing Partitions
Compression -- 7 : Updating after BASIC Compression
Compression -- 6b : Advanced Index Compression (revisited)
Compression -- 6 : Advanced Index Compression
FBDA -- 7 : Maintaining Partitioned Source Table
Partition Storage -- 7 : Revisiting HWM - 2 (again)

2016-04
Partition Storage -- 6 : Revisiting Partition HWM
Partition Storage -- 5 : Partitioned Table versus Non-Partitioned Table ? (in 12.1)
Partition Storage -- 4 : Resizing Partitions
Partition Storage -- 3 : Adding new Range Partitions with SPLIT
Partition Storage -- 2 : New Rows Inserted in 12.1 Partitioned Table
Partition Storage -- 1 : Default Partition Sizes in 12c
Online Relocation of Database File : ASM to FileSystem and FileSystem to ASM
FBDA -- 6 : Some Bug Notes
Recent Blog Series on Compression
FBDA -- 5 : Testing AutoPurging
FBDA -- 4 : Partitions and Indexes
FBDA -- 3 : Support for TRUNCATEs
FBDA -- 2 : FBDA Archive Table Structure
FBDA -- 1 : Testing Flashback Data Archive in 12c (NonCDB)

2016-03
Now an OCP 12c
Compression -- 5 : OLTP Compression
Compression -- 4 : RMAN (BASIC) Compression
Compression -- 3 : Index (Key) Compression
COMPRESSION -- 2 : Compressed Table Partitions
Recent Blog Series on (SQL) Tracing
Recent Blog Series on RMAN

2016-02
Compression -- 1b : (more on) BASIC Table Compression
Compression -- 1 : BASIC Table Compression
RMAN : Unused Block Compression and Null Block Compression
Trace Files -- 12 : Tracing a Particular Process
Trace Files -- 11b : Using DBMS_SQLDIAG to trace the Optimization of an SQL Statement

2016-01
Trace Files -- 11 : Tracing the Optimization of an SQL Statement
Trace Files -- 10c : Query and DML (INSERT)

2015-12
Oracle High Availability Demonstrations
Trace Files -- 10b : More DML Tracing
Trace Files -- 10 : Tracing DML
Trace Files -- 9 : Advantages
Trace Files -- 8d : Full Table Scans
Auditing DBMS_STATS usage

2015-11
Trace Files -- 8c : Still More Performance Evaluation from Trace File
Trace Files -- 8b : More Performance Evaluation from Trace File
Trace Files -- 8a : Using SQL Trace for Performance Evaluations
Trace Files -- 7 : SQL in PL/SQL
SSL Support
Trace Files -- 6 : Multiple Executions of the same SQL

2015-10
Trace Files -- 5.2 : Interpreting the SQL Trace Summary level
Trace Files -- 5.1 : Reading an SQL Trace
Trace Files -- 4 : Identifying a Trace File
Trace Files -- 3 : Tracing for specific SQLs

2015-09
Trace Files -- 2 : Generating SQL Traces (another session)
Trace Files -- 1 : Generating SQL Traces (own session)
My YouTube Videos as introductions to Oracle SQL and DBA
RMAN -- 10 : VALIDATE
RMAN -- 9 : Querying the RMAN Views / Catalog

2015-08
RMAN -- 8 : Using a Recovery Catalog Schema
RMAN -- 7 : Recovery Through RESETLOGS -- how are the ArchiveLogs identified ?
RMAN -- 6 : RETENTION POLICY and CONTROL_FILE_RECORD_KEEP_TIME

2015-07
RMAN -- 5c : (Some More) Useful KEYWORDs and SubClauses
RMAN -- 5b : (More) Useful KEYWORDs and SubClauses
Monitoring and Diagnostics without Oracle Enterprise Manager
RMAN -- 5 : Useful KEYWORDs and SubClauses
RMAN -- 4b : Recovering from an Incomplete Restore with OMF Files
RMAN -- 4 : Recovering from an Incomplete Restore

2015-06
RMAN - 3 : The DB_UNIQUE_NAME in Backups to the FRA
RMAN -- 2 : ArchiveLog Deletion Policy
RMAN -- 1 : Backup Job Details

2015-05
Parallel Execution -- 6 Parallel DML Restrictions
Parallel Execution -- 5b Parallel INSERT Execution Plan
Status Of My SlideShare Material
Parallel Execution -- 5 Parallel INSERT

2015-04
Parallel Execution -- 4 Parsing PX Queries
Parallel Execution -- 3b Limiting PX Servers with Resource Manager

2015-03
1 million page views in less than 5 years
Parallel Execution -- 3 Limiting PX Servers
Parallel Execution -- 2c PX Servers
Parallel Execution -- 2b PX Servers
Parallel Execution -- 2 PX Servers
Parallel Execution -- 1b The PARALLEL Hint and AutoDoP (contd)

2015-02
Parallel Execution -- 1 The PARALLEL Hint and AutoDoP
Database Flashback -- 5
Database Flashback -- 4
Database Flashback -- 3
Database Flashback -- 2
Database Flashback -- 1

2015-01
A blog on Oracle Standard Edition
Inserting into a table with potentially long rows

2014-12
Statistics on this blog
StatsPack and AWR Reports -- Bits and Pieces -- 4

2014-11
StatsPack and AWR Reports -- Bits and Pieces -- 3
StatsPack and AWR Reports -- Bits and Pieces -- 2

2014-10
StatsPack and AWR Reports -- Bits and Pieces -- 1
Bandwidth and Latency
11g Adaptive Cursor Sharing --- does it work only for SELECT statements ? Using the BIND_AWARE Hint for DML

2014-09
The ADMINISTER SQL MANAGEMENT OBJECT Privilege
EXECUTE Privilege on DBMS_SPM not sufficient
Index Growing Larger Than The Table
RAC Database Backups

2014-08
ASM Commands : 2 -- Migrating a DiskGroup to New Disk(s)
ASM Commands : 1 -- Adding and Using a new DiskGroup for RAC
GI Commands : 2 -- Managing the Local and Cluster Registry

2014-07
GI Commands : 1 -- Monitoring Status of Resources
RAC Commands : 2 -- Updating Configuration for Services
RAC Commands : 1 -- Viewing Configuration
Installing OEL 6 and Database 12c
Passed the 11g RAC and Grid Expert Exam

2014-06
Gather Statistics Enhancements in 12c
Getting your Transaction ID
Guenadi Jilevski's posts on building RAC Clusters on VM Virtual Box

2014-05
Oracle Diagnostics Presentations
Partitions and Segments and Data Objects
(Slightly Off Topic) Spurious Correlations

2014-04
PageView Count
Upgrading Certification to 12c

2014-03
Storing Trailing NULLs in a table
Plan HASH_VALUE remains the same for the same Execution Plan, even if ROWS and COST change
My slideshare site has had 1000 views
Dropping an Index Partition

2014-02
RMAN Image Copy File Names
SQL Analytics
An SQL Performance Quiz
login.sql does not require a login
Database Technology Index
The difference between SELECT ANY DICTIONARY and SELECT_CATALOG_ROLE

2014-01
My first Backup and Recovery Quiz
LAST_CALL_ET in V$SESSION
OTNYathra 2014

2013-12
INTERVAL Partitioning
DEFAULT ON NULL on INSERT
GATHER_TABLE_STATS : What SQLs does it call ?. 12c

2013-11
Gather Statistics Enhancements in 12c -- 5
AIOUG Sangam'13 Day Two 09-Nov-13
AIOUG Sangam'13 Day One 08-Nov-13

2013-10
Gather Statistics Enhancements in 12c -- 4
The DEFAULT value for a column

2013-09
AIOUG Sangam 13
RMAN (and DataPump) book

2013-08
Sins of Software Deployment
Gather Statistics Enhancements in 12c -- 3
Common Mistakes Java Developers make when writing SQL
Gather Statistics Enhancements in 12c -- 2
Gather Statistics Enhancements in 12c -- 1
12c New Features to "Watch Out For"
Re-CATALOGing BackupPieces ??

2013-07
What happens if a database (or tablespace) is left in BACKUP mode
Interesting Bugs in 12cR1
Concepts / Features overturned in 12c
12c RMAN Restrictions -- when connected to a PDB
Information on 12c
Dynamic SQL

2013-06
A Function executing DML in a View
Oracle Database 12c Learning Library
Networking in Oracle Virtual Box
Upcoming Blog Post : DML when querying a View
Getting the ROWIDs present in a Block
DROP A Tablespace After a Backup
Bug 10013177 running Aggregation on Expression indexed by an FBI

2013-05
BACKUP CURRENT CONTROLFILE creates a Snapshot Controlfile
Games for DBAs

2013-04
Preparing for Oracle Certification
SSD Performance for Oracle Databases
Single Row Fetch from a LOB
Oracle Forums due for Upgrade

2013-03
Useful Oracle Youtube videos
Segment Size of a Partition (11.2.0.2 and above)
Short-Circuiting the COST

2013-02
Moving a Partition to an Archival Schema and Tablespace
Backup and Recovery with intermediate NOARCHIVELOG

2013-01
Oracle 11g Anti-Hackers Cookbook
Podcast on the Oracle ACE program
Oracle's Advisory On Certification Integrity

2012-12
Book on OEM 12c

2012-11
Oracle 11g Anti-Hackers Cookbook

2012-10
Separate Child Cursor with varying bind allocation length

2012-09
Cardinality Decay
IT Contracting in Singapore
Open Invitation from Packt Publishing

2012-08
Storage Allocation
Issue a RECOVER for a Tablespace/Datafile that does not need recovery

2012-07
How to use Oracle Virtual Box templates
Database Specialists in Singapore
ON COMMIT Refresh without a Primary Key
Materialized View Refresh ON COMMIT
WizIQ Tutorials
An Oracle Installer that automatically switches to Console mode

2012-06
OOW 2012 Content Catalog
CONTROLFILE AUTOBACKUPs are OBSOLETE[d]
RMAN BACKUP AS COPY
OEM 12c : New Book
Java for PLSQL Developers

2012-05
SQL written by Lisbeth Salander
CHECKPOINT_CHANGE#
CURRENT_SCN and CHECKPOINT_CHANGE#
Index Block Splits
RMAN Tips -- 4
Debugging stories
A Poll on the usage of SQL Plan Management
USER_TAB_MODIFICATIONS -- 1

2012-04
Create Histogram without having to gather Table Stats
AIOUG Sangam '12 -- CFP
When is an ArchiveLog created ?
Parameters for COMMIT operations
Primary Key name appears to be different
TOO_MANY_ROWS and Variable Assignment

2012-03
The Hot Backup "myth" about Datafiles not being updated
Relocating a datafile using RMAN
More than 250K page views
OOW 2012 CFP now open.
Oracle Database Performance Diagnostics -- before you begin
Another example of COST in an Explain Plan
Packt Publishing's Oracle Packtpot

2012-02
Two Partitioned Indexes with different HIGH_VALUEs
CURSOR_SHARING FORCE and Child Cursors
Archived Logs after RESETLOGS
SLOB
RESETLOGS

2012-01
Understanding RESETLOGS
Oracle Wiki Relaunched
Departmental Analytics -- a "pro-local" approach ?
Refreshing an MV on a Prebuilt Table
SQL in Functions
Growing Materialized View (Snapshot) Logs
Datafiles not Restored -- using V$DATAFILE and V$DATAFILE_HEADER

2011-12
Does a STARTUP MOUNT verify datafiles ?
DROP TABLESPACE INCLUDING CONTENTS drops segments
(Off-Topic) How NOT to make a chart
AIOUG Sangam '11 photographs
AIOUG Sangam 11 content

2011-11
Constraints and Indexes
Oracle PreConfigured Templates
SSDs for Oracle
ROWIDs from an Index
RESTORE, RECOVER and RESETLOGS
Grid and RAC Notes
Oracle's Best-Of-Breed Strategy
Tablespace Recovery in a NOARCHIVELOG database
CTAS in a NOARCHIVELOG database is a NOLOGGING operation
Index Organized Table(s) -- IOT(s)
An ALTER USER to change password updates the timestamp of the password file
Handling Exceptions in PLSQL

2011-10
AIOUG : Sangam '11
The impact of ASSM on Clustering of data -- 2
DBMS_REDEFINITION to redefine a Partition -- and the impact of deferred_segment_creation
The impact of ASSM on Clustering of data
Controlfiles : Number and Size
Oracle OpenWorld and JavaOne Announcements
RMAN Tips -- 3

2011-09
Another example of GATHER_TABLE_STATS and a Histogram
Oracle Android App
An Index that is a "subset" of a pre-existing Index
RMAN Tips -- 2
Very successful Golden Gate workshop at SG RACSIG
RMAN Tips -- 1
Outer Join Queries
Splitting a Range Partitioned Table
Understanding Obsolescence of RMAN Backups

2011-08
CREATE INDEX ..... PARALLEL
Gather Column (Histogram) Stats can use an Index
Does GATHER_TABLE_STATS update Index Statistics ?
Reading an AWR Report -- 3
Singapore RACSIG meeting today
Reading an AWR -- 2
Oracle 11g RAC Essentials

2011-07
More on COUNT()s -- 2
More on COUNT()s
Data Quality Issues cannot always be addressed by programming
Running a COUNT(column) versus COUNT(*)
Oracle Database "Performance" - A Diagnostics Method
ENABLE ROW MOVEMENT with MSSM
Virtathon Sessions Schedule
ENABLE ROW MOVEMENT
Using WGET to download Patches
Reading an AWR - 1
Multiple Channels in RMAN are not always balanced

2011-06
DDL Triggers
Are you ready ? (to buy bigger hardware or review your code ?)
How Are Students Learning Programming ?
Oracle APAC Developer Program
OOW 2011 Content Catalog
(OT) : Dead Media Never Really Die
Precedence in Parallel Query specifications
Inequality and NULL
SQL Injection
New Presentation : On Nested Loop and Hash Join
Getting the right statistics
Nested Loop and Consistent Gets

2011-05
Interpreting an AWR report when the ArchiveLog Dest or FRA was full
Deleting SQL Plan Baselines
Database Audit setup -- 2 interesting findings
Capturing SQL PLAN Baselines
11g OCP
Getting all the instance parameters
RMAN's COPY command
Collection of my Oracle Blog posts on Backup and Recovery

2011-04
SELECT FOR UPDATE with SubQuery (and "Write Consistency")
ArchiveLogs in the controlfile
DETERMINISTIC Functions - 3
Standby Databases (aka "DataGuard") -1
DETERMINISTIC Functions -- 2
DETERMINISTIC Functions

2011-03
OuterJoin with Filter Predicate
I/O for OutOfLine LOBs
Oracle Enterprise Cloud Summit in Singapore
Cardinality Estimates in Dynamic Partition Pruning
Primary Key and Index
Most Popular Posts - Feb 11

2011-02
ITIL v3 Foundation
Index Block Splits --- with REVERSE KEY Index
Qualifying Column/Object names to set the right scope
Cardinality Feedback in 11.2
Oracle Diagnostics Presentations
Locks and Lock Trees
Most Popular Posts - Jan 11

2011-01
Gather Stats Concurrently
Synchronising Recovery of two databases
Transaction Failure --- when is the error returned ?
GLOBAL TEMPORARY TABLEs and GATHER_TABLE_STATS
Rollback of Transaction(s) after SHUTDOWN ABORT
Latches and Enqueues
Incomplete Recovery
ZDNet Asia IT Salary Benchmark 2010
Most Popular Posts - Dec 10

2010-12
Using V$SESSION_LONGOPS
Most Popular Posts - Nov 10

2010-11
Oracle VM Templates released
Some Common Errors - 7 - "We killed the job because it was hung"
SET TIME ON in RMAN
Most Popular Posts - Oct 10

2010-10
How the Optimizer can use Constraint Definitions
Featured in Oracle Magazine
Data Skew and Cardinality Changing --- 2
Most Popular Posts

2010-09
Data Skew changing over time --- and the Cardinality Estimate as well !
Index Skip Scan
Deadlocks : 2 -- Deadlock on INSERT
Deadlocks

2010-08
Adding a DataFile that had been excluded from a CREATE CONTROLFILE
Trying to understand LAST_CALL_ET -- 3
Trying to understand LAST_CALL_ET -- 2
Trying to understand LAST_CALL_ET -- 1
Oracle Mergers and Acquisitions
Creating a "Sparse" Index

2010-07
Oracle switching to non-sequential logs
(Off Topic): "What's the body count ?"
Preserving the Index when dropping the Constraint
V$DATABASE.CREATED -- is this the Database Creation timestamp ?
(Off Topic) : "Now Is That Architecture ?"

2010-06
Some Common Errors - 6 - Not collecting Metrics
Know your data and write a better query
RECOVER DATABASE starts with an update -- 2

2010-05
RECOVER DATABASE starts with an update
Database Links
Cardinality Estimation
Read Only Tablespaces and BACKUP OPTIMIZATION
Database and SQL Training

2010-04
Oracle Database History
AutoTune Undo
Data Warehousing Performance
SQLs in PLSQL -- 2
SQLs in PLSQL
Partitions and Statistics
11gR2 Recursive SubQuery Factoring

2010-03
Extracting Application / User SQLs from a TraceFile
A large index for an empty table ?
ALTER INDEX indexname REBUILD.
Adaptive Cursor Sharing explained
An "unknown" error ?
Misinterpreting RESTORE DATABASE VALIDATE

2010-02
Some Common Errors - 5 - Not reviewing the alert.log and trace files
Something Unique about Unique Indexes
Some Common Errors - 4 - Not using ARRAYSIZE
Using Aliases for Columns and Tables in SQLs
Table and Index Statistics with MOVE/REBUILD/TRUNCATE
Some Common Errors - 3 - NOLOGGING and Indexes
An Oracle DBA Interview
Some Common Errors - 2 - NOLOGGING as a Hint
Multiple Block Sizes

2010-01
Common Errors Series
DDL on Empty Partitions -- are Global Indexes made UNUSABLE ?
Some Common Errors - 1 - using COUNT(*)
Adding a PK Constraint sets the key column to NOT NULL

2009-11
MOS Survey Results
SIZE specification for Column Histograms
Sample Sizes : Table level and Column level

2009-10
Some MORE Testing on Intra-Block Row Chaining
Some Testing on Intra-Block Row Chaining
Indexes Growing Larger After Rebuilds

2009-09
SQLs in Functions : Performance Impact
SQLs in Functions : Each Execution is Independent
RMAN can identify and catalog / use ArchiveLogs automagically
Table and Partition Statistics
I am an Oracle ACE, officially

2009-08
Histograms on "larger" columns
Counting the Rows in a Table
Using an Index created by a different user

2009-07
A PACKT book on Oracle Database Utilities
Direct Path Read cannot do delayed block cleanouts
The difference between NOT IN and NOT EXISTS
Simple Tracing
Sizing OR Growing a Table in AUTOALLOCATE

2009-06
AUTOEXTEND ON Next Size
Why EXPLAIN PLAN should not be used with Bind Variables

2009-05
Backup Online Redo Logs ? (AGAIN ?!)
Index Block Splits and REBUILD
Index Block Splits : 50-50
Database Recovery with new datafile not present in the controfile
Index Block Splits : 90-10
Rename Database while Cloning it.
Incorrectly using AUTOTRACE and EXPLAIN PLAN
Ever wonder "what if this database contains my data ?"

2009-04
Bringing ONLINE a Datafile that is in RECOVER mode because it was OFFLINE
Controlfile Backup older than the ArchiveLogs
RMAN Backup and Recovery for Loss of ALL files
Incorrect Cardinality Estimate of 1 : Bug 5483301

2009-03
Database Independence Anyone ?
Columnar Databases
Materialized View on Prebuilt Table
Materialized Views and Tables
Checking the status of a database
Logical and Physical Storage in Oracle

2009-02
CLUSTERING_FACTOR
RDBMS Software, Database and Instance
Restore or Create Controlfile
Full Table Scan , Arraysize etc
Array Processing, SQL*Net RoundTrips and consistent gets
MIN/MAX Queries, Execution Plans and COST

2009-01
Faulty Performance Diagnostics based on initial set of rows returned
When NOT to use V$SESSION_LONGOPS

2008-11
Database Event Trigger and SYSOPER
Tracing a Process -- Tracing DBWR
expdp to the default directory without the DBA role
Data Pump using default directory
Histogram (skew) on Unique Values
OPEN RESETLOGS without really doing a Recovery
Numbers and NULLs

2008-10
Using STATISTICS_LEVEL='ALL' and 10046, level 8
Delayed Block Cleanout -- through Instance Restart
Delayed Block Cleanout

2008-09
Relational Theory and SQL

2008-08
ASSM or MSSM ? -- DELETE and INSERT
The once again new forums.oracle.com
Testing Bug 4260477 Fix for Bug 4224840
ASSM or MSSM ? -- The impact on INSERTS
VMWare Bug presents a nightmare scenario
Preventing a User from changing his password
More Tests of COL_USAGE
Testing Gather Stats behaviour based on COL_USAGE

2008-07
More Tests on DBMS_STATS GATHER AUTO
Testing the DBMS_STATS option GATHER AUTO
Cardinality Estimate : Dependent Columns --- Reposted
Table Elimination (aka "Join Elimination")
Bind Variable Peeking

2008-06
Cardinality Estimates : Dependent Columns
Delete PARENT checks every CHILD row for Parent Key !
Monitoring "free memory" on Linux
A long forums discussion on Multiple or Different Block Sizes
Tuning Very Large SELECTs in SQLPlus
MVs with Refresh ON COMMIT cannot be used for Synchronous Replication

2008-05
Ever heard of "_simple_view_merging" ?
Tracing a DBMS_STATS run
Creating a COMPRESSed Table
Passwords are One Way Hashes, Not Encrypted
APPEND, NOLOGGING and Indexes
RMAN Consistent ("COLD" ?) Backup and Restore
DBAs working long hours
One Thing Leads to Another ....
TEMPORARY Segments in Data/Index Tablespaces

2008-04
Row Sizes and Sort Operations
Using SYS
Indexed column (unique or not) -- What if it is NULLable
The Worst Ever SQL Rewrite
Complex View Merging -- 7
Complex View Merging - 4,5,6
Programming for MultiCore architectures
Complex View Merging -- 3
Complex View Merging -- 2
Complex View Merging -- 1

2008-03
Example "sliced" trace files and tkprof
tkprof on partial trace files
Backup the Online Redo Logs ?
Rebuilding Indexes - When and Why ?
Rebuilding Indexes
ALTER TABLE ... SHRINK SPACE

2008-02
OS Statistics from AWR Reports
Database Recovery : RollForward from a Backup Controlfile
Indexing NULLs -- Update

2008-01
Is RAID 5 bad ? Always bad ?
The Impact of the Clustering Factor
Examples Of Odd Extent Sizes In Tablespaces With AUTOALLOCATE
When Should Indexes Be Rebuilt

2007-12
Using an Index for a NOT EQUALS Query
Always Explicitly Convert DataTypes

2007-11
Are ANALYZE and DBMS_STATS also DDLs ?

2007-10
Flush Buffer_Cache -- when Tracing doesn't show anything happening
Inserts waiting on Locks ? Inserts holding Locks ?

2007-09
More on Bind Variable Peeking and Execution Plans
ATOMIC_REFRESH=>FALSE causes TRUNCATE and INSERT behaviour in 10g ??

2007-08
When "COST" doesn't indicate true load
NULLs are not Indexed, Right ? NOT !
NLS_DATE_FORMAT
Shared Nothing or Shared Disks (RAC) ?
LGWR and 'log file sync waits'

2007-07
Using ARRAYSIZE to reduce RoundTrips and number of FETCH calls
Parse "Count"

2007-06
Read Consistency across Statements
Some observations from the latest Oracle-HP Benchmark
A Bug in OWI
Oracle Books in the Library

2007-05
AUTOALLOCATE and Undo Segments
Where's the Problem ? Not in the Database !
RollForward from a Cold Backup
Another Recovery from Hell story
SQL Statement Execution Times
Recovery in Cold Backup
Stress Testing

2007-04
DBA Best Practices
Recovery without UNDO Tablespace DataFiles
Programs that expect strings to be of a certain length !
UNDO and REDO for INSERTs and DELETEs
Snapshot Too Old or Rollback Segment Too Small

2007-03
Backups and Recoveries, SANs and Clones, and Murphy
Optimizer Index Cost Parameters
Understanding "Timed Events" in a StatsPack Report
Database Error Exposed on the Internet
Throughput v Scalability
Using Normal Tables for Temporary Data

2007-02
Interpreting Explain Plans
Creating Database Links
Buffer Cache Hit Ratio GOOD or BAD ?

2007-01
Sequences : Should they be Gap Free ?
Using Partial Recoveries to test Backups
Deleting data doesn't reduce the size of the backup
Large (Growing) Snapshot Logs indicate that you have a problem
Sometimes you trip up on Triggers
Views with ORDER BY
Building Materialized Views and Indexes

2006-12
ArchiveLogs and Transaction Volumes
ORA-1555 and UNDO_RETENTION
Why an Oracle DBA Blog ?


23 July, 2016

CODE : Persistent Variables via PL/SQL Package and DBMS_APPLICATION_INFO

I am now introducing some code samples in my blog.  I won't restrict myself to SQL but will also include PL/SQL  (C ? Bourne/Korn Shell ? what else ?)

This is the first of such samples.


Here I demonstrate using a PL/SQL Package to define persistent variables and then using them with DBMS_APPLICATION_INFO.  This demo consists of only 2 variables being used by 1 session.  But we could have a number of variables in this Package and invoked by multiple client sessions in the real workd.

I first :

SQL> grant create procedure to hr;

Grant succeeded.

SQL> 


Then, in the HR schema, I setup a Package to define variables that can persist throughout a session.  Public Variables defined in a Package, once invoked, persist throughout the session that invoked them.

create or replace package
define_my_variables
authid definer
is
  my_application varchar2(25) := 'Human Resources';
  my_base_schema varchar2(25) := 'HR';
end;
/

grant execute on define_my_variables to hemant;
grant select on employees to hemant;


As HEMANT, I then execute :

SQL> connect hemant/hemant  
Connected.
SQL> execute dbms_application_info.set_module(-
> module_name=>HR.define_my_variables.my_application,-
> action_name=>NULL);

PL/SQL procedure successfully completed.

SQL> 


As SYSTEM, the DBA can monitor HEMANT

QL> show user
USER is "SYSTEM"
SQL> select sid, serial#, to_char(logon_time,'DD-MON HH24:MI:SS') Logon_At, module, action
  2  from v$session
  3  where username = 'HEMANT'
  4  order by 1
  5  /

       SID    SERIAL# LOGON_AT                 MODULE
---------- ---------- ------------------------ ----------------------------------------------------------------
ACTION
----------------------------------------------------------------
         1     63450 23-JUL 23:24:03           Human Resources



SQL> 


Then, HEMANT intends to run a query on the EMPLOYEES Table.

SQL> execute dbms_application_info.set_action(-
> action_name=>'Query EMP');

PL/SQL procedure successfully completed.

SQL> select count(*) from hr.employees where job_id like '%PROG%'
  2  /

  COUNT(*)
----------
         5

SQL> 


SYSTEM can see what he is doing with

SQL> l
  1  select sid, serial#, to_char(logon_time,'DD-MON HH24:MI:SS') Logon_At, module, action
  2  from v$session
  3  where username = 'HEMANT'
  4* order by 1
SQL> /

       SID    SERIAL# LOGON_AT                 MODULE
---------- ---------- ------------------------ ----------------------------------------------------------------
ACTION
----------------------------------------------------------------
         1      63450 23-JUL 23:24:03          Human Resources
Query EMP


SQL> 


Returning, to the HEMANT login, I can see :

SQL> show user
USER is "HEMANT"
SQL> execute dbms_output.put_line(-
> 'I am running ' || hr.define_my_variables.my_application || '  against ' || hr.define_my_variables.my_base_schema);
I am running Human Resources  against HR

PL/SQL procedure successfully completed.

SQL> 


So, I have demonstrated :
1.  Using a PLSQL Package Specification (without the need for a Package Body) to define variables that are visible to another session.

2.  The possibility of using this across schemas.  HR could be my "master schema" that setups all variables and HEMANT is one of many "client" schemas (or users) that use these variables..

3. The variables defined will persist throughout the client session once they are invoked.

4.  Using DBMS_APPLICATION_INFO to call these variables and setup client information.


Note :  SYSTEM can also trace HEMANT's session using DBMS_MONITOR as demonstrated in Trace Files -- 2 : Generating SQL Traces (another session)

.
.
.

11 July, 2016

Loading SQL*Plus HELP into the Database

Oracle provides scripts to load the HELP command for SQL*Plus.

See $ORACLE_HOME/sqlplus/admin/help

The schema to use is SYSTEM, not SYS.

I demonstrate
(a) How to load SQLPlus Help  into the database
(b) How to customise the Help (e.g. add new commands)

[oracle@ora11204 help]$ cd $ORACLE_HOME/sqlplus/admin/help
[oracle@ora11204 help]$ ls -l
total 84
-rwxrwxrwx. 1 oracle oracle   265 Feb 17  2003 helpbld.sql
-rwxrwxrwx. 1 oracle oracle   366 Jan  4  2011 helpdrop.sql
-rwxrwxrwx. 1 oracle oracle 71817 Aug 17  2012 helpus.sql
-rwxrwxrwx. 1 oracle oracle  2154 Jan  4  2011 hlpbld.sql
[oracle@ora11204 help]$ sqlplus -S system/oracle @helpbld.sql `pwd` helpus.sql
...
...
...
View created.


58 rows created.


Commit complete.


PL/SQL procedure successfully completed.

[oracle@ora11204 help]$ 


The 'pwd`  (note the back-quote character, not the single quote character) is a way of specifying the current directory in Unix and Linux shells.   This specifies where the help datafile is located.  helpus.sql is the help data in English (US-English).

The scripts create a table called "HELP" in the SYSTEM schema.  SQL*Plus's "HELP" command then uses this table.

Examples :

SQL> connect hemant/hemant
Connected.
SQL> help

 HELP
 ----

 Accesses this command line help system. Enter HELP INDEX or ? INDEX
 for a list of topics.

 You can view SQL*Plus resources at
     http://www.oracle.com/technology/documentation/

 HELP|? [topic]


SQL> 
SQL> help set  

 SET
 ---

 Sets a system variable to alter the SQL*Plus environment settings
 for your current session. For example, to:
     -   set the display width for data
     -   customize HTML formatting
     -   enable or disable printing of column headings
     -   set the number of lines per page

 SET system_variable value

 where system_variable and value represent one of the following clauses:

   APPI[NFO]{OFF|ON|text}                   NEWP[AGE] {1|n|NONE}
   ARRAY[SIZE] {15|n}                       NULL text
   AUTO[COMMIT] {OFF|ON|IMM[EDIATE]|n}      NUMF[ORMAT] format
   AUTOP[RINT] {OFF|ON}                     NUM[WIDTH] {10|n}
   AUTORECOVERY {OFF|ON}                    PAGES[IZE] {14|n}
   AUTOT[RACE] {OFF|ON|TRACE[ONLY]}         PAU[SE] {OFF|ON|text}
     [EXP[LAIN]] [STAT[ISTICS]]             RECSEP {WR[APPED]|EA[CH]|OFF}
   BLO[CKTERMINATOR] {.|c|ON|OFF}           RECSEPCHAR {_|c}
   CMDS[EP] {;|c|OFF|ON}                    SERVEROUT[PUT] {ON|OFF}
   COLSEP {_|text}                            [SIZE {n | UNLIMITED}]
   CON[CAT] {.|c|ON|OFF}                      [FOR[MAT]  {WRA[PPED] |
   COPYC[OMMIT] {0|n}                          WOR[D_WRAPPED] |
   COPYTYPECHECK {ON|OFF}                      TRU[NCATED]}]
   DEF[INE] {&|c|ON|OFF}                    SHIFT[INOUT] {VIS[IBLE] |
   DESCRIBE [DEPTH {1|n|ALL}]                 INV[ISIBLE]}
     [LINENUM {OFF|ON}] [INDENT {OFF|ON}]   SHOW[MODE] {OFF|ON}
   ECHO {OFF|ON}                            SQLBL[ANKLINES] {OFF|ON}
   EDITF[ILE] file_name[.ext]               SQLC[ASE] {MIX[ED] |
   EMB[EDDED] {OFF|ON}                        LO[WER] | UP[PER]}
   ERRORL[OGGING] {ON|OFF}                  SQLCO[NTINUE] {> | text}
     [TABLE [schema.]tablename]             SQLN[UMBER] {ON|OFF}
     [TRUNCATE] [IDENTIFIER identifier]     SQLPLUSCOMPAT[IBILITY] {x.y[.z]}
   ESC[APE] {\|c|OFF|ON}                    SQLPRE[FIX] {#|c}
   ESCCHAR {@|?|%|$|OFF}                    SQLP[ROMPT] {SQL>|text}
   EXITC[OMMIT] {ON|OFF}                    SQLT[ERMINATOR] {;|c|ON|OFF}
   FEED[BACK] {6|n|ON|OFF}                  SUF[FIX] {SQL|text}
   FLAGGER {OFF|ENTRY|INTERMED[IATE]|FULL}  TAB {ON|OFF}
   FLU[SH] {ON|OFF}                         TERM[OUT] {ON|OFF}
   HEA[DING] {ON|OFF}                       TI[ME] {OFF|ON}
   HEADS[EP] {||c|ON|OFF}                   TIMI[NG] {OFF|ON}
   INSTANCE [instance_path|LOCAL]           TRIM[OUT] {ON|OFF}
   LIN[ESIZE] {80|n}                        TRIMS[POOL] {OFF|ON}
   LOBOF[FSET] {1|n}                        UND[ERLINE] {-|c|ON|OFF}
   LOGSOURCE [pathname]                     VER[IFY] {ON|OFF}
   LONG {80|n}                              WRA[P] {ON|OFF}
   LONGC[HUNKSIZE] {80|n}                   XQUERY {BASEURI text|
   MARK[UP] HTML [OFF|ON]                     ORDERING{UNORDERED|
     [HEAD text] [BODY text] [TABLE text]              ORDERED|DEFAULT}|
     [ENTMAP {ON|OFF}]                        NODE{BYVALUE|BYREFERENCE|
     [SPOOL {OFF|ON}]                              DEFAULT}|
     [PRE[FORMAT] {OFF|ON}]                   CONTEXT text}


SQL> 
SQL> help show

 SHOW
 ----

 Shows the value of a SQL*Plus system variable, or the current
 SQL*Plus environment. SHOW SGA requires a DBA privileged login.

 SHO[W] option

 where option represents one of the following terms or clauses:
     system_variable
     ALL
     BTI[TLE]
     ERR[ORS] [{FUNCTION | PROCEDURE | PACKAGE | PACKAGE BODY | TRIGGER
        | VIEW | TYPE | TYPE BODY | DIMENSION | JAVA CLASS} [schema.]name]
     LNO
     PARAMETERS [parameter_name]
     PNO
     RECYC[LEBIN] [original_name]
     REL[EASE]
     REPF[OOTER]
     REPH[EADER]
     SGA
     SPOO[L]
     SPPARAMETERS [parameter_name]
     SQLCODE
     TTI[TLE]
     USER


SQL> 
SQL> help connect

 CONNECT
 -------

 Connects a given username to the Oracle Database. When you run a
 CONNECT command, the site profile, glogin.sql, and the user profile,
 login.sql, are processed in that order. CONNECT does not reprompt
 for username or password if the initial connection does not succeed.

 CONN[ECT] [{logon|/|proxy} [AS {SYSOPER|SYSDBA|SYSASM}] [edition=value]]

 where logon has the following syntax:
     username[/password][@connect_identifier]

 where proxy has the syntax:
     proxyuser[username][/password][@connect_identifier]
 NOTE: Brackets around username in proxy are required syntax


SQL> 


Remember !  These are SQL*Plus commands, not SQL Language commands.  So you won't see help about CREATE or ALTER or SELECT and other such commands.

Since, it uses a plain-text file (helpus.sql in this case) to load the help information, it is possible to extend this.

For example, I copy helpus.sql as helpcustom.sql and add these lines into the scrip file :

INSERT INTO SYSTEM.HELP VALUES ('DBINFO', 1, NULL);
INSERT INTO SYSTEM.HELP VALUES ('DBINFO', 2, 'This Hemant''s Test Database');
INSERT INTO SYSTEM.HELP VALUES ('DBINFO', 3, 'A Playground database');
INSERT INTO SYSTEM.HELP VALUES ('DBINFO', 4, 'Running 11.2.0.4 on Linux');

INSERT INTO SYSTEM.HELP VALUES ('OWNERINFO', 1, NULL);
INSERT INTO SYSTEM.HELP VALUES ('OWNERINFO', 2, 'Test Database owned by Hemant');
INSERT INTO SYSTEM.HELP VALUES ('CONTENTS', 1, NULL);
INSERT INTO SYSTEM.HELP VALUES ('CONTENTS', 2, 'Various Experiments by Hemant');

INSERT INTO SYSTEM.HELP VALUES ('WHO IS HEMANT', 1, NULL);
INSERT INTO SYSTEM.HELP VALUES ('WHO IS HEMANT', 2, 'Hemant K Chitale');
INSERT INTO SYSTEM.HELP VALUES ('WHO IS HEMANT', 3, 'https://hemantoracledba.blogspot.com');

COMMIT;


and then I run the command :

sqlplus -S system/oracle @helpbld.sql `pwd` helpcustom.sql


And view the results :

SQL> connect hemant/hemant
Connected.
SQL> help dbinfo

This Hemant's Test Database
A Playground database
Running 11.2.0.4 on Linux

SQL> help ownerinfo

Test Database owned by Hemant

SQL> help who is hemant

Hemant K Chitale
https://hemantoracledba.blogspot.com

SQL>         
SQL> help startup

 STARTUP
 -------

 Starts an Oracle instance with several options, including mounting,
 and opening a database.

 STARTUP options | upgrade_options

 where options has the following syntax:
    [FORCE] [RESTRICT] [PFILE=filename] [QUIET] [ MOUNT [dbname] |
    [ OPEN [open_options] [dbname] ] |
    NOMOUNT ]

 where open_options has the following syntax:
    READ {ONLY | WRITE [RECOVER]} | RECOVER

 and where upgrade_options has the following syntax:
    [PFILE=filename] {UPGRADE | DOWNGRADE} [QUIET]


SQL> help shutdown

 SHUTDOWN
 --------

 Shuts down a currently running Oracle Database instance, optionally
 closing and dismounting a database.

 SHUTDOWN [ABORT|IMMEDIATE|NORMAL|TRANSACTIONAL [LOCAL]]


SQL> 


And, so, the SQL*Plus HELP command can be customised !

.
.
.