Friday, March 6, 2015

TOTAL RECALL - Flashback Data Archive

Administer Flashback Data Archive - FBA


1.      Documentation Tahiti ->
            Oracle Database 11g Release 2 (11.2) ->
                        Masters Book List ->
                                    Advanced Application Developer's Guide ->
                                                12 Using Oracle Flashback Technology ->
                                                            Using Flashback Data Archive (Oracle Total Recall)


2.     Flashback Data Archive, also known as Oracle Total Recall, allows recording and automatically clear all changes that occur in a set of tables in an Oracle 11g DB. Also you can check the data in these tables at any point in time up to a certain maximum defined by us (RETENTION).
By default, FBA (Flashback Data Archive) is disabled for all tables. We can turn to any table as long as the following conditions are met:
· We must have the FLASHBACK ARCHIVE privilege on that table
· The table cannot be of type NESTED, CLUSTER, TEMPORARY, or EXTERNAL REMOTE
· The table cannot contain columns or LONG NESTED
The privilege that allows us to manipulate a FBA setting is "FLASHBACK ARCHIVE ADMINISTER" but we will use SYSDBA so we should not worry about it.

3.      We perform tests on the HR diagram. First we need to configure FBA and enable any table.

- The first thing you need is a TBS where it will store the data of FBA

CREATE TABLESPACE FBA DATAFILE '/u01/app/oacle/oradata/OCM/Tbsfba01.dbf' SIZE500M;

- Create the file by default to FBA

CREATE FLASHBACK ARCHIVE DEFAULT FLA1 TABLESPACE FBA QUOTA 1500M RETENTION 2 YEAR;

CREATE FLASHBACK ARCHIVE FLA2 TABLESPACE TBS1 QUOTA 300M RETENTION 8 MONTH ;

SELECT * FROM DBA_FLASHBACK_ARCHIVE;
SELECT * FROM DBA_FLASHBACK_ARCHIVE_TS ;

- Setting Default Flashback Archive to FLA1

ALTER FLASHBACK ARCHIVE FLA1 SET DEFAULT ;

- Activate FBA for the EMPLOYEES table

ALTER TABLE HR.EMPLOYEES FLASHBACK ARCHIVE;

SELECT *
FROM DBA_FLASHBACK_ARCHIVE_TABLE
WHERE TABLE_NAME=’EMPLOYEES’
AND OWNER_NAME=’HR’ ;

- We can see the configuration of FBA in the following views

SELECT * FROM DBA_FLASHBACK_ARCHIVE;
SELECT * FROM DBA_FLASHBACK_ARCHIVE_TS;
SELECT * FROM DBA_FLASHBACK_ARCHIVE_TABLES;
4.      Now we can perform tests on the EMPLOYEES table.
- Get the current date and time to keep track of our tests
- Eg " 2014/12/22 01:53:29"
- We may also use the SNA DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
SELECT SYSDATE FROM DUAL;
SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;

- We modify some records
- We delete an employee


DELETE FROM HR.EMPLOYEES WHERE EMPLOYEE_ID=192;
COMMIT;

-- - Modify the salary of a worker repeatedly


UPDATE HR.EMPLOYEES SET SALARY=12000 WHERE EMPLOYEE_ID=200;
COMMIT;
UPDATE HR.EMPLOYEES SET SALARY=12500 WHERE EMPLOYEE_ID=200;
COMMIT;
UPDATE HR.EMPLOYEES SET SALARY=12550 WHERE EMPLOYEE_ID=200;
COMMIT;

- We consulted on the historical data stored in FBA
- Let's see what workers have left the company since we activate FBA

SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME
  FROM HR.EMPLOYEES
  AS OF TIMESTAMP TO_TIMESTAMP('2014/12/22 01:53:29','YYYY/MM/DD HH24:MI:SS')
MINUS
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME
  FROM HR.EMPLOYEES;

- We get all salary increments Lisa Ozer ( EMPLOYEE_ID = 200 )
- In this example we get all versions between two dates
- And also get the versions_starttime VERSIONS_STARTSCN pseudcolumnas

COL VERSIONS_STARTTIME FORMAT A40
SELECT     VERSIONS_STARTTIME,
           VERSIONS_STARTSCN,
           FIRST_NAME,
           LAST_NAME,
           SALARY
  FROM HR.EMPLOYEES VERSIONS BETWEEN TIMESTAMP
  TO_TIMESTAMP('2014/12/22 01:53:29','YYYY/MM/DD HH24:MI:SS') AND
  SYSTIMESTAMP
WHERE
  EMPLOYEE_ID=200;

- We can also view the data on a given SCN

SELECT FIRST_NAME, LAST_NAME, SALARY
  FROM HR.EMPLOYEES
  AS OF SCN 6750989
WHERE
  EMPLOYEE_ID=200;

5.     FBA allows us to capture a recording scheme:

Add , Delete , Rename or Edit a column
• Delete or Truncate a partition
• Rename or truncate a table ( a table with FBA Delete fails with error ORA- 55610 )
Some changes (eg:  MOVE / SPLIT / CHANGE PARTITIONS ) methods require DBMS_FLASHBACK_ARCHIVE package to do it. Consider for example , how we can detach and attach a table at historical case we have to perform any of these operations.

- Create a clone EMPLOYEES table with a CONSTRAINT

CREATE TABLE HR.EMPLOYEES_FBA AS SELECT * FROM HR.EMPLOYEES;

ALTER TABLE HR.EMPLOYEES_FBA ADD CONSTRAINT employee_pk PRIMARY KEY (employee_id);

- Activate FBA on it

ALTER TABLE HR.EMPLOYEES_FBA FLASHBACK ARCHIVE;

- We modify a record

UPDATE HR.EMPLOYEES_FBA SET SALARY=10000 WHERE EMPLOYEE_ID=203;
COMMIT;

- Disabling an CONSTRAINT

ALTER TABLE HR.EMPLOYEES_FBA DISABLE CONSTRAINT EMPLOYEE_PK;

- Back -enable (ERROR ORA- 55610 )

ALTER TABLE HR.EMPLOYEES_FBA ENABLE CONSTRAINT EMPLOYEE_PK;

- To enable CONSTRAINT need to detach the tablet of their historical
- First let's get what historical associated table
- Eg " SYS_FBA_HIST_65433 "

SELECT * FROM DBA_FLASHBACK_ARCHIVE_TABLES WHERE TABLE_NAME='EMPLOYEES_FBA';

- Table disassociate

EXEC DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA('HR','EMPLOYEES_FBA');

- Enable CONSTRAINT

ALTER TABLE HR.EMPLOYEES_FBA ENABLE CONSTRAINT EMPLOYEE_PK;

- Associate the table to resume operations FBA

EXEC DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA('HR','EMPLOYEES_FBA');

6.     Cleaning environment..
- You can purge the data from a file FBA (optional )

ALTER FLASHBACK ARCHIVE FLA1 PURGE BEFORE TIMESTAMP (SYSTIMESTAMP - INTERVAL '1'DAY);

- We disable FBA tables used for

ALTER TABLE HR.EMPLOYEES NO FLASHBACK ARCHIVE;
ALTER TABLE HR.EMPLOYEES_FBA NO FLASHBACK ARCHIVE;

- We delete the file FBA

DROP FLASHBACK ARCHIVE FLA1;

- We delete the TBS

DROP TABLESPACE FBA INCLUDING CONTENTS AND DATAFILES;

- We delete the temporary table EMPLOYEES_FBA

DROP TABLE HR.EMPLOYEES_FBA;

               


Oracle 11gR2 ASM Installation

Oracle 11gR2 ASM Installation

Introduction:

This is a series of articles which contains several important enhancements to Automatic Storage Management in Oracle 11gR2.

In this ASM inside story articles, we are going to use Oracle Linux 5 as the guest operating system, Oracle 11gR2 as database version.


Oracle VirtualBox is our virtualization software.

Oracle Linux Installation

Download and install Oracle Linux.

The following rpm packages must be installed in your system:


binutils-2.17.50.0.6
compat-libstdc++-33-3.2.3
elfutils-libelf-0.125
elfutils-libelf-devel-0.125
elfutils-libelf-devel-static-0.125
gcc-4.1.2
gcc-c++-4.1.2
glibc-2.5-24
glibc-common-2.5
glibc-devel-2.5
glibc-headers-2.5
kernel-headers-2.6.18
ksh-20060214
libaio-0.3.106
libaio-devel-0.3.106
libgcc-4.1.2
libgomp-4.1.2
libstdc++-4.1.2
libstdc++-devel-4.1.2
make-3.81
sysstat-7.0.2
unixODBC-2.2.11
unixODBC-devel-2.2.11

Example:
For Automatic Memory Manager, make the shared memory file system big enough and add the “tmpfs” setting in the “/etc/fstab” file:
Add the following lines in the /etc/sysctl.conf file:
Run the following command to change the current kernel parameters:
Add the following lines to the “/etc/security/limits.conf” file:


Make sure the SELINUX=disabled in the “/etc/selinux/config” file.
System Users and Groups creation


Prepare Oracle binaries and software directories

Set environment variables for Oracle system user
Login as Oracle system user. Then, edit the file .bash_profile and add the following lines. After that, save the changes and run the command “source .bash_profile”:


Configure devices for ASM using file system files and loop devices

In this step we are going to:


1-      Create a directory to hold the files to be used as ASM devices, as Oracle system user.
2-      Create 4 files to be used as Asm devices, 1GB of size for each, as root system user.
3-      Check the created files, as root system user.
4-      Create the loop devices, as root system user.
5-      Bind the loop devices to raw devices, as root system user.
6-      Setup raw devices permissions and ownership, as root system user.
7-      Edit the “/etc/rc.local” file and add the same commands mentioned before. why? Because after a reboot, the ownership and permisions will change back to root and “-rw-r–r–” files attributes.

or
Else Use asmlib for Linux to avoid below configurations.

[oracle@amit.example.com]$ mkdir asmdisk
[root@amit.example.com]#  dd if=/dev/zero
of=/u01/app/oracle/product/11.2.0/amit.example.com/asmdisk/disk1 bs=1024k
count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 23.5853 seconds, 44.5 MB/s

[root@amit.example.com]#  dd if=/dev/zero
of=/u01/app/oracle/product/11.2.0/amit.example.com/asmdisk/disk2 bs=1024k
count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 22.9174 seconds, 45.8 MB/s

[root@amit.example.com]#  dd if=/dev/zero
of=/u01/app/oracle/product/11.2.0/amit.example.com/asmdisk/disk3 bs=1024k
count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 32.2912 seconds, 32.5 MB/s

[root@amit.example.com]#  dd if=/dev/zero
of=/u01/app/oracle/product/11.2.0/amit.example.com/asmdisk/disk4 bs=1024k
count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 36.1176 seconds, 29.0 MB/s

[root@amit.example.com]# /sbin/losetup /dev/loop1
/u01/app/oracle/product/11.2.0/amit.example.com/asmdisk/disk1
[root@amit.example.com]# /sbin/losetup /dev/loop2
/u01/app/oracle/product/11.2.0/amit.example.com/asmdisk/disk2
[root@amit.example.com]# /sbin/losetup /dev/loop3
/u01/app/oracle/product/11.2.0/amit.example.com/asmdisk/disk3
[root@amit.example.com]# /sbin/losetup /dev/loop4
/u01/app/oracle/product/11.2.0/amit.example.com/asmdisk/disk4

[root@amit.example.com]# raw /dev/raw/raw1 /dev/loop1
/dev/raw/raw1:  bound to major 7, minor 1
[root@amit.example.com]# raw /dev/raw/raw2 /dev/loop2
/dev/raw/raw2:  bound to major 7, minor 2
[root@amit.example.com]# raw /dev/raw/raw3 /dev/loop3
/dev/raw/raw3:  bound to major 7, minor 3
[root@amit.example.com]# raw /dev/raw/raw4 /dev/loop4
/dev/raw/raw4:  bound to major 7, minor 4

[root@amit.example.com]# cd /dev/raw
[root@amit raw]# ls -ltr
total 0
crw------- 1 root root 162, 1 Feb 28 20:27 raw1
crw------- 1 root root 162, 2 Feb 28 20:27 raw2
crw------- 1 root root 162, 3 Feb 28 20:28 raw3
crw------- 1 root root 162, 4 Feb 28 20:28 raw4

[root@amit raw]# ---change owner raw devices

[root@amit raw]# chown -R oracle:oinstall *
[root@amit raw]# chmod 660 *
[root@amit raw]# ls -ltr
total 0
crw-rw---- 1 oracle oinstall 162, 1 Feb 28 20:27 raw1
crw-rw---- 1 oracle oinstall 162, 2 Feb 28 20:27 raw2
crw-rw---- 1 oracle oinstall 162, 3 Feb 28 20:28 raw3
crw-rw---- 1 oracle oinstall 162, 4 Feb 28 20:28 raw4

[root@amit tmp]# chown -R oracle:oinstall
/u01/app/oracle/product/11.2.0/amit.example.com/*
[root@amit raw]# vi /etc/rc.local

Also add in the “/etc/rc.local” file “chown -R oracle:oinstall *” and “chmod 660 *” lines:


Note that to delete a loop device, you can use the following sintax: “losetup –d /dev/loopX”

Oracle binary files installation


This is my own method I use; I first install the Oracle binaries, install the grid infrastructure for standalone server and then use the dbca to install the Oracle database.


To install the Oracle binaries, you can follow the screen shots below.

[oracle@amit database]$ ./runInstaller
Insert you Oracle metalink credentials: (for testing or demonstration you can skip this)


Choose to install the Oracle software only:


Choose a single instance installation against Real Application Clusters installation method:


Select the Oracle software languages:
Choose enterprise edition:


Confirm the Oracle base and software locations:


Choose your OSDBA and OSOPER groups:


Automatic verification of the configuration requirements:


Confirm the global settings resume:


The installation progress:


Open a new terminal window, login as root and run the “*.root.sh” scripts. After that click on “ok”.


Now the Oracle binaries are installed. Let’s configure ASM when installing the Oracle grid infrastructure for standalone server.

Grid Infrastructure Installation for standalone server

To configure ASM, we are going to install the grid infrastructure for standalone server.
The following screen shots best describe the steps you need to perform.

[oracle@amit grid]$ ./runInstaller

Choose to install Grid Infrastructure for standalone server option:
Select the software languages:
Select the ASM disk files we already created in the previous section:
Choose the sys password for SYSASM new privilege appeared with Oracle 11g version.
Choose the operating system groups for OSDBA, OSOPER and OSASM.
Confirm the Oracle base and the grid infrastructure software locations:
Configuration requirements verification status:
Confirm the Oracle grid infrastructure resume:
Installation progress:
Open a new terminal window, login as root and run the “root.sh” script. After that click on “ok”.

[root@amit ~]# /u01/app/oracle/product/11.2.0/grid/root.sh
Running Oracle 11g root.sh script...

The following environment variables are set as:
   ORACLE_OWNER= oracle
   ORACLE_HOME=  /u01/app/oracle/product/11.2.0/grid

Enter the full pathname of the local bin directory: [/usr/local/bin]:
The file "dbhome" already exists in /usr/local/bin.  Overwrite it? (y/n)
[n]:
The file "oraenv" already exists in /usr/local/bin.  Overwrite it? (y/n)
[n]:
The file "coraenv" already exists in /usr/local/bin.  Overwrite it? (y/n)
[n]:

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
2014-03-01 11:29:22: Checking for super user privileges
2014-03-01 11:29:22: User has super user privileges
2014-03-01 11:29:22: Parsing the host name
Using configuration parameter file:
/u01/app/oracle/product/11.2.0/grid/crs/install/crsconfig_params
Creating trace directory
/home/oracle/.bash_profile: line 1: racle: command not found
LOCAL ADD MODE
Creating OCR keys for user 'oracle', privgrp 'oinstall'..
Operation successful.
CRS-4664: Node amit successfully pinned.
Adding daemon to inittab
CRS-4123: Oracle High Availability Services has been started.
ohasd is starting

amit     2014/03/01 11:33:09
/u01/app/oracle/product/11.2.0/grid/cdata/amit/backup_20110301_113309.olr
Successfully configured Oracle Grid Infrastructure for a Standalone Server
Updating inventory properties for clusterware
Starting Oracle Universal Installer...

Checking swap space: must be greater than 500 MB.   Actual 1702 MB    Passed
The inventory pointer is located at /etc/oraInst.loc
The inventory is located at /u01/app/oraInventory
'UpdateNodeList' was successful.


Installation progress:
The installation confirmation message:

Database installation

Using dbca, we are going to install the Oracle 11gR2 database.
The screen shots below best describe the installation steps.

[oracle@amit database]$ dbca

Click next:


Choose to create a database against a tempalte:


Choose your database template:


Insert your Global database name, SID identifier:


Choose to configure Enterprise manager, database control:


Insert and confirm the user accounts password:


Choose ASM for storage management type and +DATA for Oracle managed files database area:


Specify ASMSNMP password:


In the recovery configuration screen click next:


Choose or not to add the sample schemas in your database:


Specify the global memory size and the database character Set:


Confirm and click next:


Choose to create a database and generate a creation database script for future quick database installation:


Confirm the next window:

Verify your database installation using ASM to manage the storage: