Sunday, February 14, 2016

Manually Migrate a single instance Oracle 12cR1 database with file system storage to an Oracle RAC environment with ASM Storage

Part III - Convert your single instance database to a RAC database

1. Relink the oracle binary with RAC option to enable RAC enable Oracle Real Application Clusters

-- Execute the following on all nodes where the ORACLE_HOME exists:

-- Log in as the ORACLE_HOME owner.

cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk rac_on ioracle



 2. Add RAC specific parameters to the single instance database

-- Startup the single instance DB in SQLPlus and execute the following commands:

SQL> [oracle@testrac1 dbs]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Sun Feb 14 18:59:21 2016

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

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 834666496 bytes
Fixed Size 2929888 bytes
Variable Size 624954144 bytes
Database Buffers 201326592 bytes
Redo Buffers 5455872 bytes
Database mounted.
Database opened.
SQL> select instance_name,status from gv$instance;

INSTANCE_NAME STATUS
---------------- ------------
RACDB1 OPEN

SQL>

 -- create an pfile from your current spfile and use it to create your RAC spfile in ASM

SQL> create pfile='initRACDB_bkp.ora' from spfile;

File created.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup pfile='initRACDB_bkp.ora'
ORACLE instance started.

Total System Global Area 834666496 bytes
Fixed Size 2929888 bytes
Variable Size 624954144 bytes
Database Buffers 201326592 bytes
Redo Buffers 5455872 bytes
Database mounted.
Database opened.
SQL> select instance_name,status from gv$instance;

INSTANCE_NAME STATUS
---------------- ------------
RACDB1 OPEN

SQL> create spfile='+DATA' from pfile='initRACDB_bkp.ora';

File created.

SQL>

Get the value of your newly created spfile using "asmcmd" and use it to create the initRACDB1.ora file under the dbs directory
[oracle@testrac2 ~]$ asmcmd
ASMCMD> ls
DATA/
FRA/
OCR/
ASMCMD> cd DATA/RACDB/PARAMETERFILE
ASMCMD> pwd
+DATA/RACDB/PARAMETERFILE
ASMCMD> ls
spfile.287.903813031
ASMCMD>

-- So your newly created initRACDB1.ora file will look like this
spfile='+DATA/RACDB/PARAMETERFILE/spfile.287.903813031'

-- Shutdown the DB instance again and bring it up with the newly created spfile.
SQL> show parameter pfile

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
SQL>
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup
ORACLE instance started.

Total System Global Area 834666496 bytes
Fixed Size 2929888 bytes
Variable Size 624954144 bytes
Database Buffers 201326592 bytes
Redo Buffers 5455872 bytes
Database mounted.
Database opened.
SQL>
SQL> show parameter pfile

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DATA/RACDB/PARAMETERFILE/spfil
e.287.903813031
SQL>

-- Now add the Oracle RAC-specific parameters to this spfile and use it to start your RAC database

SQL> alter system set cluster_database=TRUE scope=spfile;

System altered.

SQL> alter system set instance_number=1 scope=spfile sid='*';

System altered.

SQL> alter system set instance_number=2 scope=spfile sid='*';

System altered.

SQL> alter system set thread=1 scope=spfile sid='*';

System altered.

SQL> alter system set thread=2 scope=spfile sid='*';

System altered.

SQL> alter system set undo_tablespace='UNDOTBS1' scope=spfile sid='*';

System altered.

SQL> alter system set undo_tablespace='UNDOTBS2' scope=spfile;

System altered.

SQL>

-- Copy over the initRACDB1 to the second node in the appropriate directory
[oracle@testrac1 dbs]$ scp initRACDB1.ora oracle@testrac2:/u01/app/oracle/product/12.0.1/db_1/dbs/initRACDB2.ora
initRACDB1.ora 100% 55 0.1KB/s 00:00
[oracle@testrac1 dbs]$

-- Shutdown the single instance and bring it up as an Oracle RAC database after adding it and its accompanying instances to Oracle Restart

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
[oracle@testrac1 dbs]$ srvctl add db -d RACDB -o /u01/app/oracle/product/12.0.1/db_1 -p '+DATA/RACDB/PARAMETERFILE/spfile.287.902596077'
[oracle@testrac1 dbs]$ srvctl add instance -d RACDB -i RACDB1 -n testrac1.brontechsolutions.com
[oracle@testrac1 dbs]$ srvctl add instance -d RACDB -i RACDB2 -n testrac2.brontechsolutions.com
[oracle@testrac1 dbs]$ srvctl start db -d RACDB
[oracle@testrac2 dbs]$ srvctl status db -d RACDB
Instance RACDB1 is running on node testrac1
Instance RACDB2 is running on node testrac2
[oracle@testrac2 dbs]$
SQL> select instance_name,status from gv$instance;

INSTANCE_NAME STATUS
---------------- ------------
RACDB1 OPEN
RACDB2 OPEN

SQL>

Have fum - Your feedback is always welcome...

Sunday, January 31, 2016

Manually Migrate a single instance Oracle 12cR1 database with file system storage to an Oracle RAC environment with ASM Storage

Part II - Convert database files from filesystem to ASM Storage

1. Prepare the ORACLE_HOME environment for the 2nd node (.bash_proofile & ORACLE_HOME)


[oracle@testRAC2 ~]$ vi .bash_profile
[oracle@testRAC2 ~]$ . ./.bash_profile
[oracle@testRAC2 ~]$ echo $ORACLE_HOME
/u01/app/oracle/product/12.0.1/db_1
[oracle@testRAC2 ~]$ cd $ORACLE_HOME
-bash: cd: /u01/app/oracle/product/12.0.1/db_1: No such file or directory
[oracle@testRAC2 ~]$ cd $ORACLE_BASE
[oracle@testRAC2 ~]$ ll
total 8
-rw-r--r-- 1 oracle oinstall   50 Sep 19 13:00 afiedt.buf
drwxr----- 3 oracle oinstall 4096 Sep 15 14:07 oradiag_oracle
[oracle@testRAC2 ~]$ mkdir -p product/12.0.1/db_1


2. Copy over the zipped ORACLE_HOME to the newly created directory and unzip/untar to create your ORACLE_HOME in the second node and relink the binaries


[oracle@testRAC2 12.0.1]$ pwd
/u01/app/oracle/product/12.0.1
[oracle@testRAC2 12.0.1]$ scp oracle@student190:/oradata/backup/DB12c_HOME.tar.gz .
The authenticity of host 'student190 (192.168.x.x)' can't be established.
RSA key fingerprint is 56:6c:41:17:2d:9e:a8:0a:a9:2f:08:a9:b8:9a:e1:4c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'student190,192.168.x.x' (RSA) to the list of known hosts.
oracle@student190's password:
DB12c_HOME.tar.gz                                                                          4%  115MB   9.5MB/s   04:27 ETA
DB12c_HOME.tar.gz                                                                        100% 2661MB   7.9MB/s   05:36
[oracle@testRAC2 12.0.1]$ pwd
/u01/app/oracle/product/12.0.1
[oracle@testRAC2 12.0.1]$ ll
total 2727320
-rw-r--r-- 1 oracle oinstall 2790039829 Jan 30 21:12 DB12c_HOME.tar.gz
[oracle@testRAC2 12.0.1]$ gunzip DB12c_HOME.tar.gz
[oracle@testRAC2 12.0.1]$ ll
total 5403744
-rw-r--r-- 1 oracle oinstall 5528023040 Jan 30 21:12 DB12c_HOME.tar
[oracle@testRAC2 12.0.1]$ tar -xvf DB12c_HOME.tar
db_1/
db_1/lib/
db_1/lib/sscoreed.o
db_1/lib/libsql12.a
db_1/lib/libclntsh.so.11.1
db_1/lib/libons.so
db_1/lib/libsrvmhas12.so
db_1/lib/libclsce12.so
:
:
[oracle@testRAC2 12.0.1]$ pwd
/u01/app/oracle/product/12.0.1
[oracle@testRAC2 12.0.1]$ ll
total 5403748
drwxr-xr-x 70 oracle oinstall       4096 Jan 30 09:30 db_1
-rw-r--r--  1 oracle oinstall 5528023040 Jan 30 21:12 DB12c_HOME.tar
[oracle@testRAC2 12.0.1]$ rm -f DB12c_HOME.tar
[oracle@testRAC2 12.0.1]$ cd db_1/bin
[oracle@testRAC2 bin]$ pwd
/u01/app/oracle/product/12.0.1/db_1/bin
[oracle@testRAC2 bin]$ ./relink all
writing relink log to: /u01/app/oracle/product/12.0.1/db_1/install/relink.log
[oracle@testRAC2 bin]$


3. Switch over to node 1 & login as the grid user & install the 12cR1 Grid Infrastructure software (See screen shots)
[grid@testRAC1 ~]$ cd /downloads/ORACLE_12C/GridInfrastructure/grid
[grid@testRAC1 grid]$ pwd
/downloads/ORACLE_12C/GridInfrastructure/grid
[grid@testRAC1 grid]$ ll
total 44
drwxrwxrwx  4 500 student01 4096 Jul  1  2015 install
drwxrwxrwx  2 500 student01 4096 Jul  7  2014 response
drwxrwxrwx  2 500 student01 4096 Jul  7  2014 rpm
-rwxrwxrwx  1 500 student01 5085 Dec 20  2013 runcluvfy.sh
-rwxrwxrwx  1 500 student01 8534 Jul  7  2014 runInstaller
drwxrwxrwx  2 500 student01 4096 Jul  7  2014 sshsetup
drwxrwxrwx 14 500 student01 4096 Jul  7  2014 stage
-rwxrwxrwx  1 500 student01  500 Feb  6  2013 welcome.html
[grid@testRAC1 grid]$ ./runInstaller
Starting Oracle Universal Installer...
Checking Temp space: must be greater than 415 MB.   Actual 10629 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 3999 MB    Passed
Checking monitor: must be configured to display at least 256 colors.    Actual 16777216    Passed
[grid@testRAC1 grid]$
Install and Configure Grid Infrastructure for a Cluster
Too bad we can't install a Flex Cluster (One of the 12cR1 new features as I have just 2 nodes to play with)


4. Use the ASM Configuration Assistant (asmca) to create DATA & FRA disk groups (see creen shots)


5. Check the status of the clusterware and related high availability resources on both nodes.

[grid@testRAC1 ~]$ crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
[grid@testRAC1 ~]$
[grid@testRAC1 ~]$ crsctl check cluster -all
**************************************************************
testRAC1:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
testRAC2:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************


6. Create ASM diskgroups and add appropriate diskgroups for your DB storage and backup/recovery in ASM using asmca (see screen shots)


7. Convert your database files from filesystem to ASM storage using RMAN
 - Switch user to "oracle", login to the DB and take an inventory of all the database files to be converted

SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/u01/oradata/ORCL/controlfile/o1_mf_c985pl01_.ctl
/u01/app/oracle/fast_recovery_area/ORCL/controlfile/o1_mf_c985ploz_.ctl
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/oradata/ORCL/datafile/o1_mf_system_c985kcf0_.dbf
/u01/oradata/ORCL/datafile/o1_mf_sysaux_c985g9fz_.dbf
/u01/oradata/ORCL/datafile/o1_mf_undotbs1_c985o01b_.dbf
/u01/oradata/ORCL/datafile/o1_mf_users_c985nyqx_.dbf
SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
/u01/oradata/ORCL/datafile/temp01.dbf
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/u01/oradata/ORCL/onlinelog/o1_mf_3_c985q5oy_.log
/u01/oradata/ORCL/onlinelog/o1_mf_2_c985pxxc_.log
/u01/oradata/ORCL/onlinelog/o1_mf_1_c985pq3w_.log
/u01/app/oracle/fast_recovery_area/ORCL/onlinelog/redo01.log
/u01/app/oracle/fast_recovery_area/ORCL/onlinelog/redo02.log
/u01/app/oracle/fast_recovery_area/ORCL/onlinelog/redo03.log
6 rows selected.
 - Convert the above files to ASM files

SQL> select instance_name,status from gv$instance;
INSTANCE_NAME    STATUS
---------------- ------------
ORCL             OPEN
SQL>


 - Disable block change tracking if you're using it


SQL> ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;
ALTER DATABASE DISABLE BLOCK CHANGE TRACKING
*
ERROR at line 1:
ORA-19759: block change tracking is not enabled
 - I'm not using BCT hence command fails
SQL>  select * from v$block_change_tracking;
STATUS     FILENAME                                                               BYTES     CON_ID
---------- ----------------------------------------------------------------- ---------- ----------
DISABLED


 - Create a pfile and add/modify the below parameters in the initORCL.ora file created


SQL> create pfile from spfile;
File created.
*.control_files=(+DATA, +FRA)
*.db_recovery_file_dest=+FRA
*.db_create_file_dest=+DATA
*.db_create_online_log_dest_1=+FRA
*.db_create_online_log_dest_2=+DATA -- optional if you want another online redo logs dest.


 - With the target database open, edit the initialization parameter control_files and db_create_file_dest to point to the ASM disk group +DATA.
 - Also configure db_recovery_file_dest to point to the ASM disk group +FRA


SQL> ALTER SYSTEM SET control_files='+DATA','+FRA' scope=spfile;
System altered.
SQL> ALTER SYSTEM SET db_create_file_dest='+DATA' scope=spfile;
System altered.
SQL> ALTER SYSTEM SET db_recovery_file_dest='+FRA' scope=spfile;
System altered.
SQL> ALTER SYSTEM SET db_create_online_log_dest_1='+FRA' scope=spfile;
System altered.

 - shutdown the database cleanly and bring it backup NOMOUNT mode:

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup nomount
ORACLE instance started.
Total System Global Area  834666496 bytes
Fixed Size                  2929888 bytes
Variable Size             557845280 bytes
Database Buffers          268435456 bytes
Redo Buffers                5455872 bytes
SQL>


 - From an RMAN session, copy one of your controlfiles from the local file system to its new location in ASM.
  - The new controlfile will be copied to the value specified in the initialization parameter control_files:


RMAN> RESTORE CONTROLFILE FROM '/u01/oradata/ORCL/controlfile/o1_mf_c985pl01_.ctl';
Starting restore at 31-JAN-16
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=26 device type=DISK
channel ORA_DISK_1: copied control file copy
output file name=+DATA/ORCL/CONTROLFILE/current.276.902588359
output file name=+FRA/ORCL/CONTROLFILE/current.257.902588361
Finished restore at 31-JAN-16
RMAN>


 - mount the database in your RMAN session

RMAN> alter database mount;
Statement processed
released channel: ORA_DISK_1
RMAN>


 -  Use RMAN to copy the database files from the local file system to ASM

RMAN> configure device type disk parallelism 4;
new RMAN configuration parameters:
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;
new RMAN configuration parameters are successfully stored
released channel: ORA_DISK_1
RMAN> BACKUP AS COPY DATABASE FORMAT '+DATA';
Starting backup at 31-JAN-16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=26 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=7 device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=30 device type=DISK
allocated channel: ORA_DISK_4
channel ORA_DISK_4: SID=31 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/u01/oradata/ORCL/datafile/o1_mf_sysaux_c985g9fz_.dbf
channel ORA_DISK_2: starting datafile copy
input datafile file number=00001 name=/u01/oradata/ORCL/datafile/o1_mf_system_c985kcf0_.dbf
channel ORA_DISK_3: starting datafile copy
input datafile file number=00004 name=/u01/oradata/ORCL/datafile/o1_mf_undotbs1_c985o01b_.dbf
channel ORA_DISK_4: starting datafile copy
input datafile file number=00006 name=/u01/oradata/ORCL/datafile/o1_mf_users_c985nyqx_.dbf
output file name=+DATA/ORCL/DATAFILE/users.281.902588631 tag=TAG20160131T150349 RECID=10 STAMP=902588632
channel ORA_DISK_4: datafile copy complete, elapsed time: 00:00:03
channel ORA_DISK_4: starting datafile copy
copying current control file
output file name=+DATA/ORCL/CONTROLFILE/backup.282.902588635 tag=TAG20160131T150349 RECID=11 STAMP=902588635
channel ORA_DISK_4: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_4: starting full datafile backup set
channel ORA_DISK_4: specifying datafile(s) in backup set
including current SPFILE in backup set
channel ORA_DISK_4: starting piece 1 at 31-JAN-16
channel ORA_DISK_4: finished piece 1 at 31-JAN-16
piece handle=+DATA/ORCL/BACKUPSET/2016_01_31/nnsnf0_tag20160131t150349_0.283.902588637 tag=TAG20160131T150349 comment=NONE
channel ORA_DISK_4: backup set complete, elapsed time: 00:00:01
output file name=+DATA/ORCL/DATAFILE/undotbs1.280.902588631 tag=TAG20160131T150349 RECID=12 STAMP=902588638
channel ORA_DISK_3: datafile copy complete, elapsed time: 00:00:08
output file name=+DATA/ORCL/DATAFILE/sysaux.278.902588631 tag=TAG20160131T150349 RECID=13 STAMP=902588641
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:12
output file name=+DATA/ORCL/DATAFILE/system.279.902588631 tag=TAG20160131T150349 RECID=14 STAMP=902588644
channel ORA_DISK_2: datafile copy complete, elapsed time: 00:00:20
Finished backup at 31-JAN-16
RMAN>

 - Switch the database now to the copy in RMAN


RMAN> SWITCH DATABASE TO COPY;
using target database control file instead of recovery catalog
datafile 1 switched to datafile copy "+DATA/ORCL/DATAFILE/system.279.902588631"
datafile 3 switched to datafile copy "+DATA/ORCL/DATAFILE/sysaux.278.902588631"
datafile 4 switched to datafile copy "+DATA/ORCL/DATAFILE/undotbs1.280.902588631"
datafile 6 switched to datafile copy "+DATA/ORCL/DATAFILE/users.281.902588631"
RMAN>


 - From an SQL*Plus session, perform incomplete recovery and open the database using the RESETLOGS option.
 - When prompted for three options, type "CANCEL"
  
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
ORA-00279: change 3120135 generated at 01/31/2016 14:56:47 needed for thread 1
ORA-00289: suggestion : +FRA
ORA-15173: entry 'ARCHIVELOG' does not exist in directory 'ORCL'
ORA-00280: change 3120135 for thread 1 is in sequence #71
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL
Media recovery cancelled.
SQL>
SQL> ALTER DATABASE OPEN RESETLOGS;
Database altered.
SQL>


 - Recreate any tempfiles that are still on filesystem storage

SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
/u01/oradata/ORCL/datafile/temp01.dbf
SQL> alter tablespace temp add tempfile '+DATA' size 128M reuse;
Tablespace altered.
SQL> alter tablespace temp drop tempfile '/u01/oradata/ORCL/datafile/temp01.dbf';
Tablespace altered.
 -  Determine the current online redo logfiles to move to ASM by examining the file names (and sizes) from V$LOGFILE

SQL> select a.group#, a.member, b.bytes from v$logfile a, v$log b where a.group# = b.group#;
    GROUP# MEMBER                                                                 BYTES
---------- ----------------------------------------------------------------- ----------
         3 /u01/oradata/ORCL/onlinelog/o1_mf_3_c985q5oy_.log                   52428800
         2 /u01/oradata/ORCL/onlinelog/o1_mf_2_c985pxxc_.log                   52428800
         1 /u01/oradata/ORCL/onlinelog/o1_mf_1_c985pq3w_.log                   52428800
         1 /u01/app/oracle/fast_recovery_area/ORCL/onlinelog/redo01.log        52428800
         2 /u01/app/oracle/fast_recovery_area/ORCL/onlinelog/redo02.log        52428800
         3 /u01/app/oracle/fast_recovery_area/ORCL/onlinelog/redo03.log        52428800
6 rows selected.


Force a log switch until the last redo log is marked "CURRENT"


SQL> select group#, status from v$log;
    GROUP# STATUS
---------- ----------------
         1 CURRENT
         2 ACTIVE
         3 ACTIVE
SQL> alter system switch logfile;
System altered.
SQL> alter system switch logfile;
System altered.
SQL> alter system switch logfile;
System altered.


 - Drop the first online redolog file

SQL> select group#, status from v$log;
    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         2 INACTIVE
         3 CURRENT
SQL> alter database drop logfile group 1;
Database altered.


 - Recreate the first online redo log group in ASM for a RAC DB instance and do same for all redo log files

SQL> alter database add logfile group 1 '+FRA' size 128M reuse;
Database altered.
SQL> alter database drop logfile group 2;
Database altered.
SQL> alter database add logfile group 2 '+FRA' size 128M reuse;
Database altered.
SQL> alter system switch logfile;
SQL> alter database drop logfile group 3;
Database altered.
SQL> alter database add logfile group 3 '+FRA' size 128M reuse;
Database altered.
SQL> select a.group#, a.member, b.bytes from v$logfile a, v$log b where a.group# = b.group#;
    GROUP# MEMBER                                                                 BYTES
---------- ----------------------------------------------------------------- ----------
         3 +FRA/ORCL/ONLINELOG/group_3.260.902589839                          134217728
         2 +FRA/ORCL/ONLINELOG/group_2.259.902589793                          134217728
         1 +FRA/ORCL/ONLINELOG/group_1.258.902589727                          134217728
 - Multiplex the online redo logs

SQL> alter database add logfile member '+DATA' to group 1;
Database altered.
SQL> alter database add logfile member '+DATA' to group 2;
Database altered.
SQL> alter database add logfile member '+DATA' to group 3;
Database altered.
SQL> select a.group#, a.member, b.bytes from v$logfile a, v$log b where a.group# = b.group#;
    GROUP# MEMBER                                                                 BYTES
---------- ----------------------------------------------------------------- ----------
         3 +FRA/ORCL/ONLINELOG/group_3.260.902589839                          134217728
         2 +FRA/ORCL/ONLINELOG/group_2.259.902589793                          134217728
         1 +FRA/ORCL/ONLINELOG/group_1.258.902589727                          134217728
         1 +DATA/ORCL/ONLINELOG/group_1.285.902589995                         134217728
         2 +DATA/ORCL/ONLINELOG/group_2.286.902590003                         134217728
         3 +DATA/ORCL/ONLINELOG/group_3.287.902590007                         134217728
6 rows selected.

 -  Relocate the SPFILE from the local file system to an ASM disk group


 SQL> show parameter pfile
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/oracle/product/12.0.1
                                                 /db_1/dbs/spfileORCL.ora
SQL> create spfile='+DATA/ORCL/spfileORCL.ora' from pfile='initORCL.ora';
File created.
 - Shutdown the DB instance
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>


 - Update the text-based initORCL.ora file with the new location of the SPFILE in ASM

[oracle@testRAC1 dbs]$ echo "SPFILE='+DATA/ORCL/spfileORCL.ora'" > $ORACLE_HOME/dbs/initORCL.ora


 - Rename the old SPFILE on the local file system so that the new text-based initORCL.ora will be used

[oracle@testRAC1 dbs]$ mv $ORACLE_HOME/dbs/spfileORCL.ora $ORACLE_HOME/dbs/intORCL_bkp.ora


 - Open the Oracle database using the new SPFILE

SQL> startup
ORACLE instance started.
Total System Global Area  834666496 bytes
Fixed Size                  2929888 bytes
Variable Size             557845280 bytes
Database Buffers          268435456 bytes
Redo Buffers                5455872 bytes
Database mounted.
Database opened.
SQL>
SQL> show parameter pfile;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +DATA/ORCL/spfileorcl.ora
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
+DATA/ORCL/CONTROLFILE/current.276.902588359
+FRA/ORCL/CONTROLFILE/current.257.902588361
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
+DATA/ORCL/DATAFILE/system.279.902588631
+DATA/ORCL/DATAFILE/sysaux.278.902588631
+DATA/ORCL/DATAFILE/undotbs1.280.902588631
+DATA/ORCL/DATAFILE/users.281.902588631
SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
+DATA/ORCL/TEMPFILE/temp.284.902589053

- We have now completely migrated all our database files to ASM storage. Take a full backup of your database at this point


[oracle@testRAC1 ~]$ rman target /
Recovery Manager: Release 12.1.0.2.0 - Production on Sun Jan 31 15:59:34 2016
Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.
connected to target database: ORCL (DBID=1428644494)
RMAN>  configure device type disk parallelism 4;
using target database control file instead of recovery catalog
old RMAN configuration parameters:
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;
new RMAN configuration parameters:
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;
new RMAN configuration parameters are successfully stored
RMAN>
RMAN> RMAN> alter database archivelog;
Statement processed
RMAN> backup database archivelog all;
Starting backup at 31-JAN-16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=27 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=31 device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=32 device type=DISK
allocated channel: ORA_DISK_4
channel ORA_DISK_4: SID=33 device type=DISK
specification does not match any archived log in the repository
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00003 name=+DATA/ORCL/DATAFILE/sysaux.278.902588631
channel ORA_DISK_1: starting piece 1 at 31-JAN-16
:
:
piece handle=+FRA/ORCL/BACKUPSET/2016_01_31/nnndf0_tag20160131t160139_0.262.902592101 tag=TAG20160131T160139 comment=NONE
channel ORA_DISK_2: backup set complete, elapsed time: 00:00:18
Finished backup at 31-JAN-16


 - You can do a cleanup of your filesystem on disk at this point as well as delete backup copies from RMAN which your created earlier


Thanks for reading. Your feedback is always welcome...

Saturday, January 30, 2016

Manually Migrate a single instance Oracle 12cR1 database with file system storage to an Oracle RAC environment with ASM Storage

Part I - Move your single instance database over to a RAC environment

1. Take a backup directory of your ORACLE_HOME for the ORCL database under the oradata directory
[oracle@testserver01 12.2.0]$ cd /oradata
[oracle@testserver01 12.2.0]$ mkdir backup
[oracle@testserver01 12.2.0]$ cd $ORACLE_HOME
[oracle@testserver01 12.2.0]$ cd ../
[oracle@testserver01 12.2.0]$tar -cvf /oradata/backup/DB12c_HOME.tar db_1



2. zip up the backup file to make it more light weight
[oracle@testserver01 12.2.0]$ cd /oradata/backup
[oracle@testserver01 backup]$ ll
total 5403744
-rw-r--r-- 1 oracle oinstall 5528023040 Jan 30 09:58 DB12c_HOME.tar
[oracle@testserver01 backup]$ gzip DB12c_HOME.tar



3. Make the appropriate ORACLE_HOME directory in the RAC server
[oracle@testRAC1 ~]$ echo $ORACLE_HOME
/u01/app/oracle/product/11.2.0/db_1
[oracle@testRAC1 ~]$
[oracle@testRAC1 ~]$ cd $ORACLE_HOME
[oracle@testRAC1 db_1]$ pwd
/u01/app/oracle/product/11.2.0/db_1
[oracle@testRAC1 db_1]$ cd ../../
[oracle@testRAC1 product]$ pwd
/u01/app/oracle/product
[oracle@testRAC1 product]$ mkdir 12.0.1
[oracle@testRAC1 product]$ cd 12.0.1
[oracle@testRAC1 db_1]$ pwd
/u01/app/oracle/product/12.0.1
[oracle@testRAC1 db_1]$



4. Move the zipped file to the RAC server
[oracle@testserver01 backup]$ ll
total 2727320
-rw-r--r-- 1 oracle oinstall 2790039829 Jan 30 09:58 DB12c_HOME.tar.gz
[oracle@testserver01 backup]$ pwd
/oradata/backup
[oracle@testserver01 backup]$ scp DB12c_HOME.tar.gz oracle@testRAC1:/u01/app/oracle/product/12.0.1
The authenticity of host 'testRAC1 (192.168.x.x)' can't be established.
RSA key fingerprint is xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'testRAC1,192.168.x.x' (RSA) to the list of known hosts.
oracle@testRAC1's password:
DB12c_HOME.tar.gz                                                                        100% 2661MB   8.6MB/s   05:11
[oracle@testserver01 backup]$



5. unzip & untar the 12c HOME under the appropriate location in the RAC server
[oracle@testRAC1 12.0.1]$ pwd
/u01/app/oracle/product/12.0.1
[oracle@testRAC1 12.0.1]$ ll
total 2727320
-rw-r--r-- 1 oracle oinstall 2790039829 Jan 30 10:36 DB12c_HOME.tar.gz
[oracle@testRAC1 12.0.1]$ gunzip DB12c_HOME.tar.gz
[oracle@testRAC1 12.0.1]$ ll
total 5403744
-rw-r--r-- 1 oracle oinstall 5528023040 Jan 30 10:36 DB12c_HOME.tar
[oracle@testRAC1 12.0.1]$ tar -xvf DB12c_HOME.tar
db_1/
db_1/lib/
db_1/lib/sscoreed.o
db_1/lib/libsql12.a
db_1/lib/libclntsh.so.11.1
db_1/lib/libons.so
db_1/lib/libsrvmhas12.so
db_1/lib/libclsce12.so

You now have your db_1 directory created for the 12c ORACLE_HOME



6. Remove the large tar file from your system
[oracle@testRAC1 12.0.1]$ ll
total 5403748
drwxr-xr-x 70 oracle oinstall       4096 Jan 30 09:30 db_1
-rw-r--r--  1 oracle oinstall 5528023040 Jan 30 10:36 DB12c_HOME.tar
[oracle@testRAC1 12.0.1]$ rm -f DB12c_HOME.tar
[oracle@testRAC1 12.0.1]$ ll
total 4
drwxr-xr-x 70 oracle oinstall 4096 Jan 30 09:30 db_1
[oracle@testRAC1 12.0.1]$



7. Go to the 12c ORACLE_HOME/bin directory as and link the Oracle 12c Software binaries to your new OS (This simulates the process of a clean Oracle Software install).
   Tail the logfile generated on a separate terminal & see the linking that's being done (just so you know how to tail log files when running processes)
[oracle@testRAC1 12.0.1]$ pwd
/u01/app/oracle/product/12.0.1
[oracle@testRAC1 12.0.1]$ ll
total 4
drwxrwxr-x 70 oracle oinstall 4096 Jan 30 09:30 db_1
[oracle@testRAC1 12.0.1]$ cd db_1
[oracle@testRAC1 db_1]$ pwd
/u01/app/oracle/product/12.0.1/db_1
[oracle@testRAC1 db_1]$ export ORACLE_HOME=/u01/app/oracle/product/12.0.1/db_1
[oracle@testRAC1 db_1]$ cd $ORACLE_HOME/bin
[oracle@testRAC1 bin]$ pwd
/u01/app/oracle/product/12.0.1/db_1/bin
[oracle@testRAC1 bin]$ ./relink all
writing relink log to: /u01/app/oracle/product/12.0.1/db_1/install/relink.log
[oracle@testRAC1 bin]$
[oracle@testRAC1 bin]$ tail -f /u01/app/oracle/product/12.0.1/db_1/install/relink.log

When the command prompt returns, your relinking is done.
STOP!! Go back to your single instance environment !!

8. Take an inventory of all your controlfiles, datafiles any archived redo log files from your single instance env't to the RAC server
- First, take an inventory of all the files in your single instance environment

SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/oradata/ORCL/controlfile/o1_mf_c985pl01_.ctl
/u01/app/oracle/fast_recovery_area/ORCL/controlfile/o1_mf_c985ploz_.ctl

SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/oradata/ORCL/onlinelog/o1_mf_3_c985q5oy_.log
/u01/app/oracle/fast_recovery_area/ORCL/onlinelog/o1_mf_3_c985q5t1_.log
/oradata/ORCL/onlinelog/o1_mf_2_c985pxxc_.log
/u01/app/oracle/fast_recovery_area/ORCL/onlinelog/o1_mf_2_c985pzj6_.log
/oradata/ORCL/onlinelog/o1_mf_1_c985pq3w_.log
/u01/app/oracle/fast_recovery_area/ORCL/onlinelog/o1_mf_1_c985pqfh_.log

SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/oradata/ORCL/datafile/o1_mf_system_c985kcf0_.dbf
/oradata/ORCL/datafile/o1_mf_sysaux_c985g9fz_.dbf
/oradata/ORCL/datafile/o1_mf_undotbs1_c985o01b_.dbf
/oradata/ORCL/datafile/o1_mf_users_c985nyqx_.dbf

SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
/oradata/ORCL/datafile/o1_mf_temp_c985rt8m_.tmp

STOP!! Go back to your RAC environment & create the appropriate parent directories for all the DB files above

[oracle@testRAC1 ~]$ cd /u01
[oracle@testRAC1 u01]$ ll
total 4
drwxrwxr-x 8 oracle oinstall 4096 Jan 28 18:23 app
[oracle@testRAC1 u01]$ mkdir -p oradata/ORCL
[oracle@testRAC1 u01]$ cd /u01/app/oracle
[oracle@testRAC1 oracle]$ mkdir -p fast_recovery_area/ORCL

STOP!! Go back to your single instance environment and move the files over !! Will take a while to transfer all directories and files depending on how large your database is



[oracle@testserver01 ORCL]$ scp -r /oradata/ORCL/* oracle@testRAC1:/u01/oradata/ORCL/
oracle@testRAC1's password:
o1_mf_c985pl01_.ctl                                                                 100% 9808KB   9.6MB/s   00:01
o1_mf_users_c985nyqx_.dbf                                                           100% 5128KB   1.0MB/s   00:05
o1_mf_temp_c985rt8m_.tmp                                                            100%   60MB  12.0MB/s   00:05
o1_mf_sysaux_c985g9fz_.dbf                                                          100% 1010MB   7.5MB/s   02:15
o1_mf_system_c985kcf0_.dbf                                                          100%  810MB   6.5MB/s   02:05
o1_mf_undotbs1_c985o01b_.dbf                                                        100%   75MB  10.7MB/s   00:07
o1_mf_1_c985pq3w_.log                                                               100%   50MB  12.5MB/s   00:04
o1_mf_2_c985pxxc_.log                                                               100%   50MB   4.6MB/s   00:11
o1_mf_3_c985q5oy_.log                                                               100%   50MB   6.3MB/s   00:08
[oracle@testserver01 ORCL]$
[oracle@testserver01 ORCL]$ scp -r /u01/app/oracle/fast_recovery_area/ORCL/* oracle@testRAC1:/u01/app/oracle/fast_recovery_area/ORCL
oracle@testRAC1's password:
o1_mf_c985ploz_.ctl                                                                 100% 9808KB 576.9KB/s   00:17
o1_mf_3_c985q5t1_.log                                                               100%   50MB   1.0MB/s   00:50
o1_mf_1_c985pqfh_.log                                                               100%   50MB   3.3MB/s   00:15
o1_mf_2_c985pzj6_.log                                                               100%   50MB   4.2MB/s   00:12
[oracle@testserver01 ORCL]$
[oracle@testserver01 ORCL]$



STOP!! Go back to your RAC environment & bring up the single instance database



9. create a pfile from the spfile, then modify the controlfile and db_create_file_dest to point to their new locations
Also create the adump directory
[oracle@testRAC1 ~]$ cd $ORACLE_HOME/dbs
[oracle@testRAC1 dbs]$ ll
total 44
-rwxrwxr-x 1 oracle oinstall 1544 Jan 30 11:33 hc_ORCL.dat
-rwxrwxr-x 1 oracle oinstall 1544 Jan 13 21:50 hc_ZFPRD1.dat
-rwxrwxr-x 1 oracle oinstall 2992 Feb  3  2012 init.ora
-rwxrwxr-x 1 oracle oinstall   24 Jan 11 15:50 lkORCL
-rwxrwxr-x 1 oracle oinstall   24 Jan 13 20:39 lkZFPRD1
-rwxrwxr-x 1 oracle oinstall 7680 Jan 11 15:58 orapwORCL
-rwxrwxr-x 1 oracle oinstall 7680 Jan 13 21:33 orapwZFPRD1
-rwxrwxr-x 1 oracle oinstall 3584 Jan 30 09:30 spfileORCL.ora
-rwxrwxr-x 1 oracle oinstall 3584 Jan 13 23:52 spfileZFPRD1.ora
[oracle@testRAC1 dbs]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Sat Jan 30 12:58:06 2016

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

Connected to an idle instance.
SQL> create pfile from spfile;

File created.

SQL> !
[oracle@testRAC1 dbs]$ ls -ltr
total 48
-rwxrwxr-x 1 oracle oinstall 2992 Feb  3  2012 init.ora
-rwxrwxr-x 1 oracle oinstall   24 Jan 11 15:50 lkORCL
-rwxrwxr-x 1 oracle oinstall 7680 Jan 11 15:58 orapwORCL
-rwxrwxr-x 1 oracle oinstall   24 Jan 13 20:39 lkZFPRD1
-rwxrwxr-x 1 oracle oinstall 7680 Jan 13 21:33 orapwZFPRD1
-rwxrwxr-x 1 oracle oinstall 1544 Jan 13 21:50 hc_ZFPRD1.dat
-rwxrwxr-x 1 oracle oinstall 3584 Jan 13 23:52 spfileZFPRD1.ora
-rwxrwxr-x 1 oracle oinstall 3584 Jan 30 09:30 spfileORCL.ora
-rwxrwxr-x 1 oracle oinstall 1544 Jan 30 12:58 hc_ORCL.dat
-rw-r--r-- 1 oracle oinstall  989 Jan 30 12:58 initORCL.ora
[oracle@testRAC1 dbs]$
[oracle@testRAC1 dbs]$ vi initORCL.ora
*control_files='/u01/oradata/ORCL/controlfile/o1_mf_c985pl01_.ctl','/u01/app/oracle/fast_recovery_area/ORCL/controlfile/o1_mf_c985ploz_.ctl'
*.db_create_file_dest='/u01/oradata'

[oracle@testRAC1 ~]$ cd $ORACLE_BASE/admin/ORCL
[oracle@testRAC1 ORCL]$ mkdir adump
[oracle@testRAC1 ORCL]$ ll
total 8
drwxr-xr-x 2 oracle oinstall 4096 Jan 30 13:11 adump
drwxr-xr-x 2 oracle oinstall 4096 Jan 30 13:09 xdb_wallet
[oracle@testRAC1 ORCL]$



10. create a new controlfile for your database with your basic redo & datafile information using a script similar to the following

[oracle@testRAC1 dbs]$ vi create_controlfile.sql
[oracle@testRAC1 dbs]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Sat Jan 30 14:41:33 2016
Copyright (c) 1982, 2014, Oracle.  All rights reserved.
Connected to an idle instance.

SQL> @create_controlfile.sql
SQL> spool create_controlfile.log
SQL>
SQL> STARTUP NOMOUNT
ORACLE instance started.

Total System Global Area  834666496 bytes
Fixed Size                  2929888 bytes
Variable Size             557845280 bytes
Database Buffers          268435456 bytes
Redo Buffers                5455872 bytes
SQL>
SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG
  2      MAXLOGFILES 32
  3      MAXLOGMEMBERS 2
  4      MAXDATAFILES 32
  5      MAXINSTANCES 1
  6      MAXLOGHISTORY 449
  7  LOGFILE
  8    GROUP 1 '/u01/oradata/ORCL/onlinelog/o1_mf_1_c985pq3w_.log',
  9    GROUP 2 '/u01/oradata/ORCL/onlinelog/o1_mf_2_c985pxxc_.log',
 10    GROUP 3 '/u01/oradata/ORCL/onlinelog/o1_mf_3_c985q5oy_.log'
 11  DATAFILE
 12    '/u01/oradata/ORCL/datafile/o1_mf_system_c985kcf0_.dbf',
 13    '/u01/oradata/ORCL/datafile/o1_mf_sysaux_c985g9fz_.dbf',
 14    '/u01/oradata/ORCL/datafile/o1_mf_undotbs1_c985o01b_.dbf',
 15    '/u01/oradata/ORCL/datafile/o1_mf_users_c985nyqx_.dbf'
 16  CHARACTER SET WE8MSWIN1252
 17  ;

Control file created.

SQL>
SQL> recover database;
Media recovery complete.
SQL>
SQL> alter database open;

Database altered.

SQL>
SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
ORCL             OPEN

SQL>

11. Take a backup of your spfile

SQL> create pfile from spfile;

File created.

SQL>



11. Take an inventory of all your datafiles, compare with the one you took earlier and add those that are missing. Also multiplex as needed
SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/u01/oradata/ORCL/controlfile/o1_mf_c985pl01_.ctl
/u01/app/oracle/fast_recovery_area/ORCL/controlfile/o1_mf_c985ploz_.ctl

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/oradata/ORCL/datafile/o1_mf_system_c985kcf0_.dbf
/oradata/ORCL/datafile/o1_mf_sysaux_c985g9fz_.dbf
/oradata/ORCL/datafile/o1_mf_undotbs1_c985o01b_.dbf
/oradata/ORCL/datafile/o1_mf_users_c985nyqx_.dbf

SQL> alter database add logfile member '/u01/app/oracle/fast_recovery_area/ORCL/onlinelog/redo01.log' to group 1;

Database altered.

SQL> alter database add logfile member '/u01/app/oracle/fast_recovery_area/ORCL/onlinelog/redo02.log ' to group 2;

Database altered.

SQL> alter database add logfile member '/u01/app/oracle/fast_recovery_area/ORCL/onlinelog/redo03.log' to group 3;

Database altered.
SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u01/oradata/ORCL/onlinelog/o1_mf_3_c985q5oy_.log
/u01/oradata/ORCL/onlinelog/o1_mf_2_c985pxxc_.log
/u01/oradata/ORCL/onlinelog/o1_mf_1_c985pq3w_.log
/u01/app/oracle/fast_recovery_area/ORCL/onlinelog/redo01.log
/u01/app/oracle/fast_recovery_area/ORCL/onlinelog/redo02.log
/u01/app/oracle/fast_recovery_area/ORCL/onlinelog/redo03.log

6 rows selected.



12. Add a tempfile to the TEMP tablespace
SQL> select name from v$tempfile;
no rows selected
SQL> alter tablespace TEMP add tempfile '/u01/oradata/ORCL/datafile/temp01.dbf' size 128M reuse;
Tablespace altered.
SQL>
SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
/u01/oradata/ORCL/datafile/temp01.dbf
SQL>
13. Bounce the database to ensure a "clean" startup
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL>
SQL> startup
ORACLE instance started.
Total System Global Area  834666496 bytes
Fixed Size                  2929888 bytes
Variable Size             557845280 bytes
Database Buffers          268435456 bytes
Redo Buffers                5455872 bytes
Database mounted.
Database opened.
SQL>
SQL>
SQL> select instance_name,status from v$instance;
INSTANCE_NAME    STATUS
---------------- ------------
ORCL             OPEN
SQL> select name,log_mode,open_mode,database_role from v$database;
NAME      LOG_MODE     OPEN_MODE            DATABASE_ROLE
--------- ------------ -------------------- ----------------
ORCL      NOARCHIVELOG READ WRITE           PRIMARY
SQL>
Your ORCL database is now up and running in the RAC enironment. Part II of this article will be to convert this single instance
that uses filesystem storage to an Oracle RAC database using ASM.
Thanks for reading. Your feedback is very welcome


















Tuesday, May 13, 2014

Week 14 – Making the Case for Information Architecture


Making the case for Information Architecture (IA) has never been the easiest of tasks for even the most seasoned of Information Architects (IA). In fact, this might be the single most important task an IA will have to complete to be able to secure employment, not only for themselves, but for their entire team, which might eventually be for everyone in the organization or company due to heavy returns on investments that can be generated from a properly, professionally designed website or intranet.

As an IA, trying to sell your services and creating a business case for Information Architecture will involve several methodical steps put together by you as a proposal on how you can bring more value than just what is offered by a development team and a graphics designer. I, for one will use the following methodology to present my case:

       I.          Make a short presentation of not more than 8 slides to the each and every stakeholder that will mention and discuss the following deliverables as the outcome of your efforts

                           i.          Site Scope
In your presentation of what the Site Scope brings on the table, you should identify the essential problem your site is going to solve or the opportunity it will afford users. You need to show your understanding of the needs of both the target audience and site sponsors, and articulate a broad, but justified rationale of how the site will meet their needs through its information architecture design. This should bring added value which can never be accomplished by simple graphics design with application development. During your discussion with each stakeholder, you should present a clear cut methodology on how you intend on proceeding with the site scope effort. Typically, in your methodology, you should outline the following techniques:
·       Data collection - discuss the importance of data collection for the site design effort using techniques such as user interviews and questionnaires, competitive benchmarking and stakeholder interviews
·       Data Analysis – discuss and present how you intend to analyze the data you’ll be collecting in the above step and the various data analysis techniques you’ll be employing in this effort like benchmarking analysis and user analysis.
·       Results presentation – you, as the IA should give the stakeholders an afore-taste of the delicious meal they’ll be consuming in the future by telling him how you intend to present the result of you research and analysis carried out above. How you intend to bring out the major problems with the current state of affairs, summarize the results of your benchmarking and present/propose clear cut solutions to take care of the problems you’ll be identifying.
You can even go ahead and tell them that after this initial Site Scope process, if they do not see any value in the project, then it should be scrapped. You should be however very careful here because you just took a very big risk, which can either pay off enormously or lead to the death of your project.

                         ii.          Blueprint
Here, you want to mention and discuss with all the stakeholders how you’ll be present a clear pictorial, as well as literal description of the structure of the site you’ll be designing, something that’s out of touch to a developer or a graphics designer who doesn’t understand how information should be structured on a website.
You should sell the value of the Site’s blueprint by elaborating what it will deliver at the end, which is usually a focus on representing the information organization and navigation of the site, and maybe mention what techniques of labelling you intend to implement on the site.

                       iii.          Wireframes
Selling value for your design with the use of Wireframes can never be over-looked. Your initial discussions with the project stakeholders should definitely involve stating how you intend to create wireframes for the web site or intranet to be developed (again, something out of the scope of a developer or plain graphics designer).
Here, you want to mention how you will represent the layout of the content and navigation for individual pages within the site in the form of a low cost prototype. Discuss how you intend to use this to bring out to the front those pages considered to be complicated or unique, or which serve as templates to other pages.

Using the above methodology and with good presentation skills should go a long way to be able to sell your IA project and convince stakeholders why you, as an IA is needed to lead this effort, NOT developers and graphics designers. However, as an IA, you should do more than the above to sell your project. This will be outlined in section II below.


     II.          Making your case and Selling your Information Architecture

You, as the IA, must be prepared to take the case forward for what you do. Be prepared to change negative thinking into positive since most people still don’t know and understand the value of Information Architecture. You need to be ready for this, not just getting the point across initially, but being able to “sell” what you do on the ground. Hence, you need to be a salesperson at this point in your life to be able to convince the stakeholders to kick off the project.

As a generalization, it’s been found that business people typically fall into two groups: “by the numbers” folks, and “gut reactionaries”. The former require data to help make their decisions. They need figures to rationally consider return on investment (ROI) as the basis of their business decisions. The latter, on the other hand, do what feels right. They trust their instinct and often have plenty of good experience to draw on. As an IA, you’ll encounter, and will have to deal and sell with both types of business people, so be prepared for both. If necessary, you should be able to run the numbers and present the various factors involved in your IA project as a function of cost and convince your stakeholders with these figures.
It’s generally possible to measure the value (and ROI) of some of an architecture’s individual components. For example, we may be able to determine how well users navigate a broad and shallow hierarchy versus a narrow and deep one. Or we might measure how users respond to one way pf presenting search results versus another. If necessary, you, the IA should quantify these values and present to your audience as a justification of your project.

On the other side, the success of the case you present to gut reactionaries often depends on luck as much as anything else, but there should always be that saying at the back of your mind that “we make our own luck”, so you should be able, as an IA to have those words in your mouth that can tilt luck to your favor. One of the best ways to engage and educate such individuals is telling first hand “stories”. You might be lucky your gut reactionary doesn’t have much experience in the subject matter, and when you find this loophole, feel it as fast and as perfectly as you can. Use this technique to put them in the shoes of a peer who faces a comparable situation, feel that person’s pain, and help him see how information architecture helped his situation. An effective story should provide the listener with both a role and a situation to identify with. The role and the situation should set up a painful, problematic situation so that the listener feels the pain and can see how investing in IA can help make it go away.

Making your case as an IA, can and should involve most of the following case-making techniques:

i.                 User sensitivity “boot camp’ sessions” – get decision makers who aren’t web-savvy in front of a web browser. Ask them to try to accomplish three or four basic and common tasks using their own web site (or a competitor’s), and have them think aloud while you make notes of their problems
ii.               Expert site evaluations – quickly identify 5 or 10 major IA problems in a site. This can make a huge impression in a writing presentation or in the context of a sales call.
iii.             Strategy sessions – one to two day sessions geared toward bringing together decision makers and opinion leaders, providing them with a brief introduction to IA and discuss on the company’s strategy and issues with overloaded information.
iv.             Competitive analyses – already discussed above, a site’s IA issues can be riveting when the site is placed alongside its competitors. Always look for opportunities to compare architectural components and features to help prospects and clients see how they stack up. Present these analyses to the stakeholders.
v.               Comparative analyses – compare the existing site or intranet with comparable sites, comparing specific features, such as search interfaces or shopping carts and present your findings to stakeholders.
vi.             Be aggressive and be early – make sure the IA is included in the marketing and branding that comprise the firm’s public face, not to mention the list of services.

Whatever technique you use, consider these three pieces of advice:
·       Pain is your best friend – more than anything else, work hard to identify the source of a prospect or client’s pain
·       Articulation is half the battle – make your clients to be able to talk about their pain and issues, and also be prepared to use the right words to sell to them, the solution to their pain and problems.
·       Get off your high horse – be ready to defuse the jargon with alternative, “real-language” descriptions of what IA really is and what problem it addresses.

Whatever technique you use to make the case for IA, and whether you’re making a quantitative or qualitative case, there must be a checklist that you should be able to follow relevant to your story, answering all potential questions you might get from potential clients and stake holders. As you prepare to make your case, review this check list to make sure you’re not missing any important point. Your typical checklist can be the following advantages and points you intend to present and defend to sell your IA project
·       Reduces the cost of finding information
·       Reduces the cost of finding wrong information
·       Reduces the cost of not finding information at all
·       Provides a competitive advantage
·       Increase product awareness
·       Increases sales
·       Makes using a site a more enjoyable experience
·       Improves brand loyalty
·       Reduces reliance upon documentation
·       Reduces maintenance costs
·       Reduces training costs
·       Reduces staff turnover
·       Reduces organizational upheaval
·       Reduces organization politicking
·       Improves knowledge sharing
·       Reduces duplication of effort
·       Solidifies business strategy

As a final note, which ever points and approaches you use to make your case for IA, keep in mind how difficult this challenge is and be ready to tackle it since IA is still being looked like a new kid in the block and is generally a lot harder to sell that other goods and services out there. Hence, be ready to be that Information sales person.

On the other hand, problems associated with information explosion (unregulated ridiculous growth of information stored in websites and intranets) are only going to get worse as a result of poor maintenance of content and data stores, hence the need for seasoned Information Architects. 

Monday, April 28, 2014

Week 13 – IA Tools and Software

Several tools come in handy to the development and management of IA and web content. These tools, however can also lead to chaos given their varied nature and classification for various functions. To the IA, choosing the right tool or software can sometimes be a challenge because various factors come into play in determining the right choice(s). Some of the various tools and categories available to the IA include software for Automated Categorization, Search Engines, Thesaurus Management Tools, Portal or Enterprise knowledge Platform, Content Management Systems, Web Analysis/Tracking, Diagramming Software, Prototyping Tools, User Research and testing tools.
Automated Categorization Software are also known as automated classification, automated indexing, automated tagging and clustering software. Examples are Interwoven’s Metatagger and Vivisimo’s Clustering Engine. These tools use human-defined rules or pattern matching algorithms to automatically assign controlled vocabulary metadata to documents.
Search Engines provide full-text indexing and searching capabilities. Examples include Google Enterprise Solutions and Fast.
Thesaurus Management tools provide support for the development and management of controlled vocabularies and thesauri. Examples include Factiva Synaptica and WebChoir.
Portals or Enterprise Knowledge Platforms provide completely integrated enterprise portal solutions. Examples are MS SharePoint Portal Server, IBM’s WebSphere Portal and Oracle Portal.
Content management Systems manage workflow from content authoring to editing and publishing. They make it easier and more efficient to create, edit and publish web content and can range from small applications to huge enterprise-wide solutions. Examples include WordPress, Drupal and Documentum.
Analytics Software analyzes the usage and statistical performance of web sites, providing valuable metrics about user behavior and characteristics. Examples are Google Analytics and WebTrends
Diagramming Software are visual communication tools that IAs use to create diagrams, charts, blueprints and wireframes. Examples include MS Visio, PowerPoint and OmniGraffle.
Prototyping tools are web development software that enables IAs and web designers to create interactive wireframes and clickable prototypes. Examples include Dreamweaver, Visio and Flash.
Whatever categories or software/tools you the IA might choose to use, there’s still a lot of research and questions to be asked here so as to make the right decision in order to provide a balance between technology and price, as well as appropriate functionality. The most important advice from experts is to know your needs, your process and the end-users’ abilities before making your choice. CMSwatch.com is a fee-based consulting service that publishes reports on CMS-s and can help you select a CMS. Be realistic about your needs, devote extra time to information architecture and don’t neglect the content in favor of flashy/sexier IA and technology.
Also, prior to choosing any particular tool or software suite or package from a particular vendor, always get an Engineer from within the vendor’s firm who will answer you the most intriguing questions about the tool like what it does well, what it does poorly and what they wish it could do.

Sunday, April 20, 2014

Week 12 - Search Systems and Search Engine Optimization

Information retrieval through searches and search engines is very challenging, expensive and well-established. If search becomes a necessity, some sites or intranets incorporate search systems from sites that allow you to search the entire web. There are three different ways of searching the web:
·        A search within your site or its sub-sites, e.g. a search within www.dice.com and its very sub-sites
·        Search indexes of web pages, e.g. those of www.bing.com
·        Metasearch, which involves searching across multiple sites, e.g. www.clusty.com and www.dogpile.com

The website http://searchenginewatch.com/ is a great resource for the latest information on web searching. The IA has to make the decision whether their site needs to be searchable or not. They should be very careful not to make the typical assumption that a search engine alone will satisfy all users’ information needs. There are browsers who forego the search utility but prefer to peruse the site and have a feel of things. Before the IA makes the decision of adding the search functionality to their site, they should carefully answer the following questions;
·        Is there sufficient content in your site?
·       Does the company have sufficient resources to invest in this effort? Is the investment going to divert resources from more useful navigation systems?
·        Is time and the technical know-how available to invest in optimizing your search system/
·        Are there better alternatives to search?
·        Will your site’s users actually bother to use its search system?

Planning the capacity of your site or intranet can sometime be very tricky and determinant whether to include a search system or not. When sites become very popular, they grow organically and more and more functional features get piled on haphazardly, leading to a navigation nightmare. Certain issues can actually help the IA decide whether or not their site has reached the point of needing a search system:
·        Your site has too much information to browse
·        If the site has become fragmented, it can definitely use some help from a search system
·        Search can actually become a learning tool to help improve the site through the analysis of the search logs
·        Nowadays, search actually needs to be there because it has become a user expectation;  most users typically expect to find a search window on every single web site they visit
·        If your site has highly dynamic content, you should definitely include a search system to it.

The IA should make search inclusion decisions based on the end-users of the site; hence they should know their site’s users. The decision whether or not to include a search functionality to either the intranet or a website is greatly influenced on how much the IA knows his/her site’s users. This decision should be solely made with the users in mind, rather than on the available technology. The search system actually interfaces with the site’s users, hence the user should be the King in influencing this decision.

The working of the search system is usually a three part configuration. At the center of this configuration is the search engine which contains indexes from indexed documents and processes the queries from the searchers via the search interface. Matching indexes are produced in the form of results to the queries which were supplied to the search engine. Documents usually include web pages and web sites serve as the input into the search system. Indexing can be manual or automatic. Traditional commonly used manual systems for compiling indexes of documents make use of cards, such as library catalogue cards, but nowadays a good computerized Personal Reference System is to be preferred. For each document acquired, the bibliographic identification elements are written, or typed, on a card. Thus, for a journal article, the structure is: author's surname and forenames; article title; periodical title; volume number; part number; date of publication; pages. Keywords or descriptors of the contents should be written up. Alternatively, a short abstract or summary can be included (you can often make use of abstracts written by the author). The use of a standardized reference format style is recommended. In automatic indexing, spiders & robots crawl websites and index pages according to their own rules. As a result, they build large databases containing the indexes.

Determining what to search for can also be tricky. Whether to search the entire site or just specific pages or documents or whether to create search zones or not, or whether to index the entire site or just specific pages or documents or zones within the site are all decisions to be made by the IA during the search system design. Sometimes it becomes necessary to determinate search zones to limit searching the entire site/intranet. It might also be necessary to create a mini search site within the website itself. This search site can either be sub-site or a document type. Some sites might necessitate the incorporation of web search within. This involves searching through multimedia and heterogeneous sites with diverse content. Search can also involve full text searches of the information being requested or just the metadata about what’s being requested. The IA also has to decide what type of indexing to incorporate within the search engine for documents, either content words or just important words as those found in the metadata fields. Indexing can also be for specific audiences, by topic or just for recent content, reading level, topic, date of update, user task, etc…

Search algorithms find items with specified properties among a collection of items. The items may be stored individually as records in a database; or may be elements of a search space defined by a mathematical formula or procedure, such as the roots of an equation with integer variables; or a combination of the two, such as the Hamiltonian circuits of a graph. There are about 40 different retrieval algorithms which retrieve information in different ways. Most of these algorithms employ pattern-matching which uses recall and precision.

Query builders affect the outcome of a search by souping up a query’s performance. They are usually invisible to users and common examples include:
·        Spell checks
·        Phonetic tools (the best-known of which is “Soundex”)
·        Stemming tools that allow users to enter a term
·        Natural language processing tools
·        Controlled vocabularies and thesauri

The IA will also need to determine afore-hand and make choices on how the results for the search engines are to be presented. Here, there are two main issues to consider:
·        Which content components to display for each retrieved document– display less information to users who know what they’re looking for, and more information to users who aren’t sure what they want, how much or how many, how much information for each item,.
·        How to list or group the search results – by categories, alphabetically, chronologically, ranking by relevance, ranking by popularity, by users’ or experts’ ratings, by pay-for-placement (different sites bid for the right to be ranked high, or higher, on users’ result lists.

Design the search interface implies putting together what to search, what to retrieve, and how to present the results in a single interface. With a varied user commodity and search-technology functions, there are also many different types of search interfaces. Designing the search interface will involve considering the following variables:
·        Level of searching expertise and motivation
·        Type of information need
·        Type of information being searched

·        Amount of information being searched