Knowledge is Power – share IT



Oracle 12c to 19c upgrade and plug-in to 19c Data Guard CDBPurpose:This note illustrates the steps required to upgrade an Oracle 12c Data Guard Primary and Standby database configuration to Oracle 19c and the convert the Oracle 19c non-CDB Primary/Standby databases to an Oracle 19c Pluggable Databases hosted in an Oracle 19c Data Guard Container CDB.The note assumes that we have already configured the Oracle 19c Data Guard Primary and Standby Container Databases (CDBs) and that there in no difference in the directory structure for the file names for Primary as well as Standby databases – both 12c as well as 19c.At a high level these are the main steps:Upgrade 12c Primary Database to Oracle 19c Upgrade 12c Standby Database to Oracle 19cPlugin non-CDB 19c Primary and Standby to 19c Data Guard CDBUpgrade Primary Database Check the Data Guard Configuration DGMGRL> connect / as sysdgConnected to "DGPDEVL"Connected as SYSDG.DGMGRL> show configuration;Configuration - SandpitDR Protection Mode: MaxPerformance Members: DGPDEVL - Primary database DGSDEVL - (*) Physical standby databaseFast-Start Failover: ENABLEDConfiguration Status:SUCCESS (status updated 28 seconds ago)Pre-Upgrade StepsSQL> exec dbms_stats.gather_dictionary_stats;PL/SQL procedure successfully completed.SQL> exec dbms_stats.gather_fixed_objects_stats;PL/SQL procedure successfully completed.SQL> purge dba_recyclebin;DBA Recyclebin purged.SQL>select object_name,object_type from dba_objects where owner in ('SYS','SYSTEM') and status='INVALID';no rows selectedSQL> create table system.invalid_objects as select owner,object_name,object_type from dba_objects where status='INVALID';Table created.SQL> select count(*) from system.invalid_objects; COUNT(*)---------- 475Disable Redo Transport and Redo Apply DGMGRL> edit database 'DGPDEVL' set state='TRANSPORT-OFF';Succeeded.DGMGRL> edit database 'DGSDEVL' set state='APPLY-OFF';Succeeded.DGMGRL>Create Flashback Database Restore Point Standby oracle@db22:~$ sqlplus sys as sysdbaConnected to:Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit ProductionSQL> create restore point before_upgrade guarantee flashback database;Restore point created.Primary oracle@db21:~$ sqlplus sys as sysdbaConnected to:Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit ProductionSQL> create restore point before_upgrade guarantee flashback database;Restore point created.Shutdown Standby Database SQL> shutdown immediate;ORA-01109: database not openDatabase dismounted.ORACLE instance shut down.Execute preupgrade.jar on Primary Databaseoracle@db21:~$ cd /d_admin/dba/scripts/oracle@db21:/d_admin/dba/scripts$ cp /opt/oracle/product/19.0.0/dbhome_1/rdbms/admin/preupgrade.jar .oracle@db21:/d_admin/dba/scripts$ $ORACLE_HOME/jdk/bin/java -jar preupgrade.jar==================PREUPGRADE SUMMARY================== /opt/oracle/cfgtoollogs/DGPDEVL/preupgrade/preupgrade.log /opt/oracle/cfgtoollogs/DGPDEVL/preupgrade/preupgrade_fixups.sql /opt/oracle/cfgtoollogs/DGPDEVL/preupgrade/postupgrade_fixups.sqlExecute fixup scripts as indicated below:Before upgrade:Log into the database and execute the preupgrade fixups@/opt/oracle/cfgtoollogs/DGPDEVL/preupgrade/preupgrade_fixups.sqlAfter the upgrade:Log into the database and execute the postupgrade fixups@/opt/oracle/cfgtoollogs/DGPDEVL/preupgrade/postupgrade_fixups.sqlPreupgrade complete: 2020-05-21T09:55:45Executing Oracle PRE-Upgrade Fixup ScriptAuto-Generated by: Oracle Preupgrade Script Version: 19.0.0.0.0 Build: 1Generated on: 2020-05-21 09:55:40For Source Database: DGPDEVLSource Database Version: 12.2.0.1.0For Upgrade to Version: 19.0.0.0.0Preup PreupgradeAction Issue IsNumber Preupgrade Check Name Remedied Further DBA Action------ ------------------------ ---------- -------------------------------- 1. invalid_objects_exist NO Manual fixup recommended. 2. sync_standby_db NO Informational only. Further action is optional. 3. rman_recovery_version NO Informational only. Further action is optional.The fixup scripts have been run and resolved what they can. However,there are still issues originally identified by the preupgrade thathave not been remedied and are still present in the database.Depending on the severity of the specific issue, and the nature ofthe issue itself, that could mean that your database is not readyfor upgrade. To resolve the outstanding issues, start by reviewingthe preupgrade_fixups.sql and searching it for the name ofthe failed CHECK NAME or Preupgrade Action Number listed above.There you will find the original corresponding diagnostic messagefrom the preupgrade which explains in more detail what still needsto be done.Perform 19c Upgrade via DBUAUpgrade Standby Database Standby Database HostStop the 12c Listeneroracle@db22:/opt/oracle/product/19.0.0/dbhome_1/network/admin$ lsnrctl stop LISTENER_DGDEVLLSNRCTL for Solaris: Version 12.2.0.1.0 - Production on 21-MAY-2020 11:27:13Copyright (c) 1991, 2016, Oracle. All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db22.intranet)(PORT=1599)(SEND_BUF_SIZE=10485760)(RECV_BUF_SIZE=10485760)(IP=V4_ONLY)))The command completed successfullyUpdate oratab entry with Oracle 19c Oracle Home oracle@db22:/opt/oracle/product/19.0.0/dbhome_1/network/admin$ vi /var/opt/oracle/oratabdgsdevl:/opt/oracle/product/19.0.0/dbhome_1:NCopy listener.ora from 12c Oracle Home to 19c Oracle Home and edit oracle@db22:/opt/oracle/product/19.0.0/dbhome_1/network/admin$ vi listener.oraLISTENER_DGDEVL = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = db22.intranet)(PORT = 1599)(SEND_BUF_SIZE = 10485760)(RECV_BUF_SIZE = 10485760)(IP = V4_ONLY)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1599)) ) )SID_LIST_LISTENER_DGDEVL = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = DGSDEVL.intranet) (ORACLE_HOME = /opt/oracle/product/19.0.0/dbhome_1) (SID_NAME = dgsdevl) ) (SID_DESC = (GLOBAL_DBNAME = DGSDEVL_DGMGRL.intranet) (ORACLE_HOME = /opt/oracle/product/19.0.0/dbhome_1) (SID_NAME = dgsdevl) ) )Start the 19c listener oracle@db22:/opt/oracle/product/19.0.0/dbhome_1/network/admin$ . oraenvORACLE_SID = [dgsdevl] ?The Oracle base remains unchanged with value /opt/oracleoracle@db22:/opt/oracle/product/19.0.0/dbhome_1/network/admin$ cd $ORACLE_HOME/binoracle@db22:/opt/oracle/product/19.0.0/dbhome_1/bin$ lsnrctl start LISTENER_DGDEVLLSNRCTL for Solaris: Version 19.0.0.0.0 - Production on 21-MAY-2020 11:29:23Copyright (c) 1991, 2019, Oracle. All rights reserved.Starting /opt/oracle/product/19.0.0/dbhome_1/bin/tnslsnr: please wait...TNSLSNR for Solaris: Version 19.0.0.0.0 - ProductionSystem parameter file is /opt/oracle/product/19.0.0/dbhome_1/network/admin/listener.oraLog messages written to /opt/oracle/diag/tnslsnr/db22/listener_dgdevl/alert/log.xmlListening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db22)(PORT=1599)))Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1599)))Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db22.intranet)(PORT=1599)(SEND_BUF_SIZE=10485760)(RECV_BUF_SIZE=10485760)(IP=V4_ONLY)))STATUS of the LISTENER------------------------Alias LISTENER_DGDEVLVersion TNSLSNR for Solaris: Version 19.0.0.0.0 - ProductionStart Date 21-MAY-2020 11:29:23Uptime 0 days 0 hr. 0 min. 0 secTrace Level offSecurity ON: Local OS AuthenticationSNMP OFFListener Parameter File /opt/oracle/product/19.0.0/dbhome_1/network/admin/listener.oraListener Log File /opt/oracle/diag/tnslsnr/db22/listener_dgdevl/alert/log.xmlListening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db22)(PORT=1599))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1599)))Services Summary...Service "DGSDEVL.intranet" has 1 instance(s). Instance "dgsdevl", status UNKNOWN, has 1 handler(s) for this service...Service "DGSDEVL_DGMGRL.intranet" has 1 instance(s). Instance "dgsdevl", status UNKNOWN, has 1 handler(s) for this service...The command completed successfullyCopy Data Guard Broker configuration files, password file and spfile from 12c to 19c Oracle Home oracle@db22:/opt/oracle/product/12.2.0/dbhome_2/dbs$ cp dr*DGDEVL.dat /opt/oracle/product/19.0.0/dbhome_1/dbsoracle@db22:/opt/oracle/product/12.2.0/dbhome_2/dbs$ cp orapwdgsdevl /opt/oracle/product/19.0.0/dbhome_1/dbsoracle@db22:/opt/oracle/product/12.2.0/dbhome_2/dbs$ cp spfiledgsdevl.ora /opt/oracle/product/19.0.0/dbhome_1/dbsStart the Standby Database Instance in MOUNT mode oracle@db22:/opt/oracle/product/12.2.0/dbhome_2/dbs$ sqlplus sys as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on Thu May 21 11:44:13 2020Version 19.6.0.0.0Copyright (c) 1982, 2019, Oracle. All rights reserved.Enter password:Connected to an idle instance.SQL> startup mount;ORACLE instance started.Total System Global Area 2147478488 bytesFixed Size 8874968 bytesVariable Size 1275068416 bytesDatabase Buffers 855638016 bytesRedo Buffers 7897088 bytesDatabase mounted.Primary Database HostCopy Data Guard Broker configuration files from 12c to 19c Oracle Home oracle@db21:/opt/oracle/product/19.0.0/dbhome_1/dbs$ cd /opt/oracle/product/12.2.0/dbhome_2/dbsoracle@db21:/opt/oracle/product/12.2.0/dbhome_2/dbs$ cp dr*DGPDEVL.dat /opt/oracle/product/19.0.0/dbhome_1/dbsEnable Oracle 19c Redo Transport and Redo Apply SQL> alter system set dg_broker_start=false;System altered.SQL> alter system set dg_broker_start=true;System altered.oracle@db21:/opt/oracle/product/19.0.0/dbhome_1/network/admin$ dgmgrlDGMGRL for Solaris: Release 19.0.0.0.0 - Production on Thu May 21 12:32:31 2020Version 19.6.0.0.0Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.Welcome to DGMGRL, type "help" for information.DGMGRL> connect / as sysdgConnected to "DGPDEVL"Connected as SYSDG.DGMGRL> edit database 'DGPDEVL' set state='TRANSPORT-ON';Succeeded.DGMGRL> edit database 'DGSDEVL' set state='APPLY-ON';Succeeded.Monitor Media Recovery Via Standby Database Alert Log ……oracle@db22:/d_admin/diag/rdbms/dgsdevl/dgsdevl/trace$ tail -f alert_dgsdevl.log2020-05-21T12:33:52.605718+08:00PR00 (PID:21538): Media Recovery Log /d_fra/devl/DGSDEVL/archivelog/2020_05_21/o1_mf_1_2416_hdd13rsf_.arc2020-05-21T12:33:53.040451+08:00PR00 (PID:21538): Media Recovery Log /d_fra/devl/DGSDEVL/archivelog/2020_05_21/o1_mf_1_2417_hdd13rw4_.arc2020-05-21T12:33:53.535561+08:00……PR00 (PID:21538): Media Recovery Log /d_fra/devl/DGSDEVL/archivelog/2020_05_21/o1_mf_1_2426_hdd13sbc_.arc2020-05-21T12:33:57.595912+08:00PR00 (PID:21538): Media Recovery Log /d_fra/devl/DGSDEVL/archivelog/2020_05_21/o1_mf_1_2427_hdd13smr_.arc2020-05-21T12:33:57.940277+08:00PR00 (PID:21538): Media Recovery Log /d_fra/devl/DGSDEVL/archivelog/2020_05_21/o1_mf_1_2428_hdd13snk_.arc……2020-05-21T12:34:26.477345+08:00PR00 (PID:21538): Media Recovery Log /d_fra/devl/DGSDEVL/archivelog/2020_05_21/o1_mf_1_2505_hdd13n4z_.arcPR00 (PID:21538): Media Recovery Waiting for T-1.S-2506 (in transit)2020-05-21T12:34:26.614455+08:00Recovery of Online Redo Log: Thread 1 Group 6 Seq 2506 Reading mem 0 Mem# 0: /d_redo1/devl/dgsdevl/standby_redo3.logConvert non-CDB Data Guard Configuration to 19c CDB/PDB Data Guard ConfigurationCheck 19c non-CDB Data Guard oracle@db21:/opt/oracle/product/19.0.0/dbhome_1/network/admin$ dgmgrlDGMGRL for Solaris: Release 19.0.0.0.0 - Production on Thu May 21 12:34:59 2020Version 19.6.0.0.0Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.Welcome to DGMGRL, type "help" for information.DGMGRL> connect / as sysdgConnected to "DGPDEVL"Connected as SYSDG.DGMGRL> show configurationConfiguration - SandpitDR Protection Mode: MaxPerformance Members: DGPDEVL - Primary database DGSDEVL - Physical standby databaseFast-Start Failover: DisabledConfiguration Status:SUCCESS (status updated 8 second ago)Check 19c CDB Data Guard DGMGRL> connect / as sysdgConnected to "dgdcdb"Connected as SYSDG.DGMGRL> show configurationConfiguration - dgdcdb_devl Protection Mode: MaxPerformance Members: dgdcdb - Primary database dgdcdb_s - Physical standby databaseFast-Start Failover: DisabledConfiguration Status:SUCCESS (status updated 40 seconds ago)Non-CDB 19c PRIMARY Disable Redo Transport and Redo Applyoracle@db21:/opt/oracle/product/19.0.0/dbhome_1/network/admin$ dgmgrlDGMGRL for Solaris: Release 19.0.0.0.0 - Production on Thu May 21 13:05:57 2020Version 19.6.0.0.0Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.Welcome to DGMGRL, type "help" for information.DGMGRL> connect / as sysdgConnected to "DGPDEVL"Connected as SYSDG.DGMGRL> edit database 'DGPDEVL' set state='TRANSPORT-OFF';Succeeded.DGMGRL> edit database 'DGSDEVL' set state='APPLY-OFF';Succeeded.Start Non-CDB 19c PRIMARY in READ-ONLY Mode oracle@db21:/opt/oracle/product/19.0.0/dbhome_1/network/admin$ sqlplus sys as sysdbaConnected to:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - ProductionVersion 19.6.0.0.0SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.SQL> startup mount;ORACLE instance started.Total System Global Area 2147478488 bytesFixed Size 8874968 bytesVariable Size 1258291200 bytesDatabase Buffers 872415232 bytesRedo Buffers 7897088 bytesDatabase mounted.SQL> alter system flush redo to dgsdevl no confirm apply;System altered.SQL> alter database open read only;Database altered.SQL> set numformat 99999999999999999SQL> select file#, CHECKPOINT_CHANGE# from v$datafile_header where file#=1; FILE# CHECKPOINT_CHANGE#------------------ ------------------12248372911323Recover and Stop Non-CDB 19c STANDBY oracle@db22:/d_admin/diag/rdbms/dgsdevl/dgsdevl/trace$ sqlplus sys as sysdbaConnected to:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - ProductionVersion 19.6.0.0.0SQL> alter database recover managed standby database until change 12248372911323;Database altered.SQL> set numformat 99999999999999999SQL> select file#, CHECKPOINT_CHANGE# from v$datafile_header where file#=1; FILE# CHECKPOINT_CHANGE#------------------ ------------------12248372911323SQL> shutdown immediate;ORA-01109: database not openDatabase dismounted.ORACLE instance shut down.Note: If 19c non-CDB Primary and Standby database file names have different directory paths, then edit the PDB_FILE_NAME_CONVERT parameter on the standby database Convert 19c non-CDB Primary to Pluggable Database in Data Guard Primary Container DatabaseSQL> exec DBMS_PDB.DESCRIBE ('/export/home/oracle/noncdb.xml');PL/SQL procedure successfully completed.SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.19c Primary CDB SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NOSQL> select database_role from v$database;DATABASE_ROLE----------------PRIMARYSQL> create pluggable database dgpdevl using '/export/home/oracle/noncdb.xml' nocopy tempfile reuse;Pluggable database created.SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 4 DGPDEVL MOUNTED19c Standby CDB oracle@db22:/d_admin/diag/rdbms/dgsdevl/dgsdevl/trace$ sqlplus sys as sysdbaConnected to:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - ProductionVersion 19.6.0.0.0SQL> select database_role from v$database;DATABASE_ROLE----------------PHYSICAL STANDBYSQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ---------- 2 PDB$SEED MOUNTED 4 DGPDEVL MOUNTEDView Standby CDB alert log ….Recovery created pluggable database DGPDEVLDGPDEVL(4):WARNING: File being created with same name as in PrimaryDGPDEVL(4):Existing file may be overwrittenDGPDEVL(4):Recovery created file /d_data/devl/dgpdevl/system01.dbfDGPDEVL(4):Successfully added datafile 13 to media recoveryDGPDEVL(4):Datafile #13: '/d_data/devl/dgpdevl/system01.dbf'DGPDEVL(4):WARNING: File being created with same name as in PrimaryDGPDEVL(4):Existing file may be overwrittenDGPDEVL(4):Recovery created file /d_data/devl/dgpdevl/sysaux01.dbfDGPDEVL(4):Successfully added datafile 14 to media recoveryDGPDEVL(4):Datafile #14: '/d_data/devl/dgpdevl/sysaux01.dbf'DGPDEVL(4):WARNING: File being created with same name as in PrimaryDGPDEVL(4):Existing file may be overwrittenDGPDEVL(4):Recovery created file /d_undo/devl/dgpdevl/undotbs01.dbfDGPDEVL(4):Successfully added datafile 15 to media recoveryDGPDEVL(4):Datafile #15: '/d_undo/devl/dgpdevl/undotbs01.dbf'DGPDEVL(4):WARNING: File being created with same name as in PrimaryDGPDEVL(4):Existing file may be overwrittenDGPDEVL(4):Recovery created file /d_data/devl/dgpdevl/users01.dbfDGPDEVL(4):Successfully added datafile 16 to media recoveryDGPDEVL(4):Datafile #16: '/d_data/devl/dgpdevl/users01.dbf'19c Primary CDB SQL> alter session set container=DGPDEVL;Session altered.SQL> @?/rdbms/admin/noncdb_to_pdb.sql….….While this is running monitor recovery is happening on the standby database rfs (PID:21056): Selected LNO:5 for T-1.S-35 dbid 3009826072 branch 10414194202020-06-02T12:03:56.468737+08:00PR00 (PID:725): Media Recovery Waiting for T-1.S-35 (in transit)2020-06-02T12:03:56.470725+08:00Recovery of Online Redo Log: Thread 1 Group 5 Seq 35 Reading mem 0 Mem# 0: /d_fra/devl/DGDCDB_S/onlinelog/o1_mf_5_hdyjswwj_.log2020-06-02T12:03:57.063896+08:00ARC2 (PID:28316): Archived Log entry 24 added for T-1.S-34 ID 0xffffffffb3695e81 LAD:12020-06-02T12:04:40.496526+08:00 rfs (PID:21056): Selected LNO:4 for T-1.S-36 dbid 3009826072 branch 10414194202020-06-02T12:04:40.533068+08:00PR00 (PID:725): Media Recovery Waiting for T-1.S-36 (in transit)2020-06-02T12:04:40.535517+08:00Recovery of Online Redo Log: Thread 1 Group 4 Seq 36 Reading mem 0 Mem# 0: /d_fra/devl/DGDCDB_S/onlinelog/o1_mf_4_hdyjspvh_.log2020-06-02T12:04:41.314940+08:00ARC0 (PID:28313): Archived Log entry 25 added for T-1.S-35 ID 0xffffffffb3695e81 LAD:1Script completes on Primary CDB ….……13:47:57 SQL> set tab OFF13:47:57 SQL> set termout ON13:47:57 SQL> set time OFFSQL> set timing OFFSQL> set trimout ONSQL> set trimspool ONSQL> set underline "-"SQL> set verify OFFSQL> set wrap ONSQL> set xmloptimizationcheck OFFOpen the Pluggable DatabaseSQL> alter pluggable database open;Pluggable database altered.Review any violations due to plugin operation (the ones below can be ignored)SQL> select con_id, type, message, status from PDB_PLUG_IN_VIOLATIONS where status <>'RESOLVED' order by time; CON_ID TYPE MESSAGE STATUS---------- --------- ---------------------------------------------------------------------------------------------------- --------- 4 WARNING Character set mismatch: PDB character set US7ASCII. CDB character set AL32UTF8. PENDING 4 WARNING Database option APS mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0. PENDING 4 WARNING Database option CATJAVA mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0. PENDING 4 WARNING Database option CONTEXT mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0. PENDING 4 WARNING Database option DV mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0. PENDING 4 WARNING Database option JAVAVM mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0. PENDING 4 WARNING Database option OLS mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0. PENDING 4 WARNING Database option ORDIM mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0. PENDING 4 WARNING Database option OWM mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0. PENDING 4 WARNING Database option SDO mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0. PENDING 4 WARNING Database option XML mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0. PENDING 4 WARNING Database option XOQ mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0. PENDINGCheck Pluggable Database is open in READ-WRITE mode SQL> conn / as sysdbaConnected.SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 4 DGPDEVL READ WRITE NO ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download