Показаны сообщения с ярлыком RAC. Показать все сообщения
Показаны сообщения с ярлыком RAC. Показать все сообщения

четверг, 1 марта 2018 г.

Переконфигурация сбойного узла в кластере.



Имеется двухнодовый кластер (узлы host01 и host02)

Необходимо переконфигурировать узел host02

1. Удалить сбойный узел host02 из кластера.


Удалить ПО RDBMS из inventory работающего узла host01.
(Оставить только host01)

oracle@host01# ./runInstaller -updateNodeList ORACLE_HOME=$RDBMS_HOME "CLUSTER_NODES={host01}" LOCAL_NODE=host01


Удалить ПО GI из inventory работающего узла host01.
(Оставить только host01)

oracle@host01# ./runInstaller -updateNodeList ORACLE_HOME=$GRID_HOME "CLUSTER_NODES={host01}" CRS=TRUE -silent


Удалить сбойный узел host02 из OCR (реестра кластера).

root@host01# crsctl delete node -n host02


Удалить VIP на хосте host02.

root@host01# srvctl config vip -node host02
VIP exists: network number 1, hosting node host02
VIP Name: host02-vip
VIP IPv4 Address: 192.168.1.101
VIP IPv6 Address:
VIP is enabled.
VIP is individually enabled on nodes:
VIP is individually disabled on nodes:

root@host01# srvctl stop vip -vip host02-vip -force
root@host01# srvctl remove vip -vip host02-vip
Please confirm that you intend to remove the VIPs host02-vip (y/[n]) y



Удалить экземпляр orcl2.

root@host01# srvctl remove instance -db orcl -instance orcl2
Remove instance from the database orcl? (y/[n]) y


На данный момент плохой узел host02 больше не является частью кластера.


2. Переходим на host02 и очистим остатки некоторых файлов конфигурации GI и RDBMS на этом узле


oracle@host02$ rm -rf /u01/app/oracle/product/12.1.0.2/
root@host02# rm -rf /u01/grid/crs12.1.0.2/*
root@host02# rm /var/tmp/.oracle/*
oracle@host02$ rm -rf /tmp/*
root@host02# rm /etc/oracle/ocr*
root@host02# rm /etc/oracle/olr*
root@host02# rm -rf /pkg/oracle/app/oraInventory
root@host02# rm -rf /etc/oracle/scls_scr



3. Добавляем узел host02 обратно в кластер



oracle@host01$ cd $GRID_HOME/addnode

oracle@host01$ ./addnode.sh -ignoreSysPrereqs -ignorePrereq -silent "CLUSTER_NEW_NODES={host02}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={host02-vip}"


Это приведет к клонированию  GI_HOME с host01 на host02.
В конце будет предложено запустить root.sh на host02.
Запуск этого скрипта приведет к подключению GI к OCR и Voting disks и запуску clusterware stackvting.

Но вначале запустим.

root@host02# cd $GRID_HOME/crs/install
root@host02# ./rootcrs.sh -verbose -deconfig -force


root@host02# cd $GRID_HOME
root@host02# ./root.sh



host02 теперь входит в состав кластера, а GI работает.
Проверяем

root@host02# crs_stat -t
root@host02# olsnodes -n



Также проверяем VIP.

root@host02# srvctl status vip -vip host02-vip
VIP host02-vip is enabled
VIP host02-vip is running on node: host02



Запустим клонирование RDBMS_HOME с host01 на host02.

oracle@host01]$ cd $RDBMS_HOME/addnode
oracle@host01]$ ./addnode.sh "CLUSTER_NEW_NODES={host02}"


Это запустит OUI. Проходим мастер, чтобы завершить процесс клонирования.


4. Добавим экземпляр обратно на узел host02.


oracle@host01$ srvctl add instance -db orcl -instance orcl2 -node host02
Если все пойдет хорошо, экземпляр запустится.

Проверяем:

oracle@host01$ srvctl start instance -db orcl -instance orcl2

oracle@host01$ srvctl status database -d orcl
Instance orcl1 is running on node host01
Instance orcl2 is running on node host02

SQL> select inst_id,status from gv$instance;

INST_ID STATUS
---------- ------------
 1 OPEN
 2 OPEN


Остается только перенастроить и запустить любые необходимые службы.

srvctl modify service -db orcl -service my_svc -modifyconfig -preferred "orcl1,orcl2"
srvctl start service -db orcl -service my_svc -node host02
srvctl status service -db orcl


Все работает.

понедельник, 20 марта 2017 г.

Добавить / Удалить redo log groups in Oracle RAC

Просмотр ONLINE и STANDBY redo logs

set lines 1000
column MEMBER format a50

select lf.group#,
       l_type.log_type as type,
       lf.member,
       l_type.size_mb
 from v$logfile lf
 join (
   select group#,'ONLINE' as log_type, bytes/1024/1024 as size_mb from v$log
   union
   select group#,'STANDBY' as log_type, bytes/1024/1024 as size_mb from v$standby_log) l_type
on lf.group#=l_type.group#
order by lf.group#;



Добавить / удалить логи

online

alter database add logfile group  1 '+DATA' size 512M;
alter database add logfile group  6 '+DATA' size 512M;

alter database drop logfile group 1;
alter database drop logfile group 6;




standby

alter database add standby logfile group  7 '+DATA' size 512M;
alter database add standby logfile group 13 '+DATA' size 512M;

alter database drop logfile group  7;
alter database drop logfile group 13;
 



Просмотр текущих redo log groups:


set lines 1000
column REDOLOG_FILE_NAME format a50

SELECT a.GROUP#,
       a.THREAD#,
       a.SEQUENCE#,
       a.ARCHIVED,
       a.STATUS,
       b.MEMBER AS REDOLOG_FILE_NAME,
       (a.BYTES/1024/1024) AS SIZE_MB
FROM v$log a
JOIN v$logfile b ON a.Group#=b.Group#
ORDER BY a.GROUP#;



Добавляем:

alter database add logfile thread 1 group 40 ('+REDO_B') size 5120m;
alter database add logfile thread 1 group 42 ('+REDO_B') size 5120m;
alter database add logfile thread 1 group 44 ('+REDO_B') size 5120m;
alter database add logfile thread 1 group 46 ('+REDO_B') size 5120m;
alter database add logfile thread 1 group 48 ('+REDO_B') size 5120m;

alter database add logfile thread 2 group 41 ('+REDO_B') size 5120m;
alter database add logfile thread 2 group 43 ('+REDO_B') size 5120m;
alter database add logfile thread 2 group 45 ('+REDO_B') size 5120m;
alter database add logfile thread 2 group 47 ('+REDO_B') size 5120m;
alter database add logfile thread 2 group 49 ('+REDO_B') size 5120m;

Мультиплексируем:

ALTER DATABASE ADD LOGFILE MEMBER '+REDO_B' TO GROUP 40;
ALTER DATABASE ADD LOGFILE MEMBER '+REDO_B' TO GROUP 41;
ALTER DATABASE ADD LOGFILE MEMBER '+REDO_B' TO GROUP 42;
ALTER DATABASE ADD LOGFILE MEMBER '+REDO_B' TO GROUP 43;
ALTER DATABASE ADD LOGFILE MEMBER '+REDO_B' TO GROUP 44;
ALTER DATABASE ADD LOGFILE MEMBER '+REDO_B' TO GROUP 45;
ALTER DATABASE ADD LOGFILE MEMBER '+REDO_B' TO GROUP 46;
ALTER DATABASE ADD LOGFILE MEMBER '+REDO_B' TO GROUP 47;
ALTER DATABASE ADD LOGFILE MEMBER '+REDO_B' TO GROUP 48;
ALTER DATABASE ADD LOGFILE MEMBER '+REDO_B' TO GROUP 49;

Удаляем:

alter database drop logfile group 30;
alter database drop logfile group 31;
alter database drop logfile group 32;
alter database drop logfile group 33;
alter database drop logfile group 34;
alter database drop logfile group 35;
alter database drop logfile group 36;
alter database drop logfile group 37;
alter database drop logfile group 38;
alter database drop logfile group 39;


Примеры:

SELECT a.GROUP#,
       a.THREAD#,
       a.SEQUENCE#,
       a.ARCHIVED,
       a.STATUS,
       b.MEMBER AS REDOLOG_FILE_NAME,
       (a.BYTES/1024/1024) AS SIZE_MB
FROM v$log a
JOIN v$logfile b ON a.Group#=b.Group#
ORDER BY a.GROUP#;

GROUP#  THREAD# SEQUENCE#  ARCHIVED STATUS      REDOLOG_FILE_NAME                       SIZE_MB

30    1    82494    YES    INACTIVE    +REDO_FLASH/rt2/onlinelog/group_30_1_1    5120
30    1    82494    YES    INACTIVE    +REDO_FLASH/rt2/onlinelog/group_30_1_2    5120

31    2    62915    YES    INACTIVE    +REDO_FLASH/rt2/onlinelog/group_31_2_1    5120
31    2    62915    YES    INACTIVE    +REDO_FLASH/rt2/onlinelog/group_31_2_2    5120

32    1    82495    YES    INACTIVE    +REDO_FLASH/rt2/onlinelog/group_32_1_1    5120
32    1    82495    YES    INACTIVE    +REDO_FLASH/rt2/onlinelog/group_32_1_2    5120

33    2    62916    YES    ACTIVE            +REDO_FLASH/rt2/onlinelog/group_33_2_1    5120
33    2    62916    YES    ACTIVE            +REDO_FLASH/rt2/onlinelog/group_33_2_2    5120

34    1    82496    YES    INACTIVE    +REDO_FLASH/rt2/onlinelog/group_34_1_1    5120
34    1    82496    YES    INACTIVE    +REDO_FLASH/rt2/onlinelog/group_34_1_2    5120

35    2    62917    NO    CURRENT            +REDO_FLASH/rt2/onlinelog/group_35_2_1    5120
35    2    62917    NO    CURRENT            +REDO_FLASH/rt2/onlinelog/group_35_2_2    5120

36    1    82497    YES    INACTIVE    +REDO_FLASH/rt2/onlinelog/group_36_1_1    5120
36    1    82497    YES    INACTIVE    +REDO_FLASH/rt2/onlinelog/group_36_1_2    5120

37    2    62913    YES    INACTIVE    +REDO_FLASH/rt2/onlinelog/group_37_2_1    5120
37    2    62913    YES    INACTIVE    +REDO_FLASH/rt2/onlinelog/group_37_2_2    5120

38    1    82498    NO    CURRENT            +REDO_FLASH/rt2/onlinelog/group_38_1_1    5120
38    1    82498    NO    CURRENT            +REDO_FLASH/rt2/onlinelog/group_38_1_2    5120

39    2    62914    YES    INACTIVE    +REDO_FLASH/rt2/onlinelog/group_39_2_1    5120
39    2    62914    YES    INACTIVE    +REDO_FLASH/rt2/onlinelog/group_39_2_2    5120


Добавление redo log groups:

SQL> ALTER DATABASE ADD LOGFILE THREAD 1
GROUP 40 ('+REDO_FLASH/rt2/onlinelog/group_40_1_1') SIZE 5120m,
GROUP 40 ('+REDO_FLASH/rt2/onlinelog/group_40_1_2') SIZE 5120m;

SQL> ALTER DATABASE ADD LOGFILE THREAD 2
GROUP 41 ('+REDO_FLASH/rt2/onlinelog/group_41_2_1') SIZE 5120m,
GROUP 41 ('+REDO_FLASH/rt2/onlinelog/group_41_2_2') SIZE 5120m;

SQL> ALTER DATABASE ADD LOGFILE THREAD 1
GROUP 42 ('+REDO_FLASH/rt2/onlinelog/group_42_1_1') SIZE 5120m,
GROUP 42 ('+REDO_FLASH/rt2/onlinelog/group_42_1_2') SIZE 5120m;

SQL> ALTER DATABASE ADD LOGFILE THREAD 2
GROUP 43 ('+REDO_FLASH/rt2/onlinelog/group_43_2_1') SIZE 5120m,
GROUP 43 ('+REDO_FLASH/rt2/onlinelog/group_43_2_2') SIZE 5120m;

SQL> ALTER DATABASE ADD LOGFILE THREAD 1
GROUP 44 ('+REDO_FLASH/rt2/onlinelog/group_44_1_1') SIZE 5120m,
GROUP 44 ('+REDO_FLASH/rt2/onlinelog/group_44_1_2') SIZE 5120m;

SQL> ALTER DATABASE ADD LOGFILE THREAD 2
GROUP 45 ('+REDO_FLASH/rt2/onlinelog/group_45_2_1') SIZE 5120m,
GROUP 45 ('+REDO_FLASH/rt2/onlinelog/group_45_2_2') SIZE 5120m;

SQL> ALTER DATABASE ADD LOGFILE THREAD 1
GROUP 46 ('+REDO_FLASH/rt2/onlinelog/group_46_1_1') SIZE 5120m,
GROUP 46 ('+REDO_FLASH/rt2/onlinelog/group_46_1_2') SIZE 5120m;

SQL> ALTER DATABASE ADD LOGFILE THREAD 2
GROUP 47 ('+REDO_FLASH/rt2/onlinelog/group_47_2_1') SIZE 5120m,
GROUP 47 ('+REDO_FLASH/rt2/onlinelog/group_47_2_2') SIZE 5120m;

SQL> ALTER DATABASE ADD LOGFILE THREAD 1
GROUP 48 ('+REDO_FLASH/rt2/onlinelog/group_48_1_1') SIZE 5120m,
GROUP 48 ('+REDO_FLASH/rt2/onlinelog/group_48_1_2') SIZE 5120m;

SQL> ALTER DATABASE ADD LOGFILE THREAD 2
GROUP 49 ('+REDO_FLASH/rt2/onlinelog/group_49_2_1') SIZE 5120m,
GROUP 49 ('+REDO_FLASH/rt2/onlinelog/group_49_2_2') SIZE 5120m;



Или так:

ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 40 '+REDO_FLASH/rt2/onlinelog/group_40_1_1' SIZE 5120m;
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 40 '+REDO_FLASH/rt2/onlinelog/group_40_1_2' SIZE 5120m;

ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 41 '+REDO_FLASH/rt2/onlinelog/group_41_2_1' SIZE 5120m;
ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 41 '+REDO_FLASH/rt2/onlinelog/group_41_2_2' SIZE 5120m;

ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 42 '+REDO_FLASH/rt2/onlinelog/group_42_1_1' SIZE 5120m;
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 42 '+REDO_FLASH/rt2/onlinelog/group_42_1_2' SIZE 5120m;

ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 43 '+REDO_FLASH/rt2/onlinelog/group_43_2_1' SIZE 5120m;
ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 43 '+REDO_FLASH/rt2/onlinelog/group_43_2_2' SIZE 5120m;

ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 44 '+REDO_FLASH/rt2/onlinelog/group_44_1_1' SIZE 5120m;
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 44 '+REDO_FLASH/rt2/onlinelog/group_44_1_2' SIZE 5120m;

ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 45 '+REDO_FLASH/rt2/onlinelog/group_45_2_1' SIZE 5120m;
ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 45 '+REDO_FLASH/rt2/onlinelog/group_45_2_2' SIZE 5120m;

ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 46 '+REDO_FLASH/rt2/onlinelog/group_46_1_1' SIZE 5120m;
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 46 '+REDO_FLASH/rt2/onlinelog/group_46_1_2' SIZE 5120m;

ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 47 '+REDO_FLASH/rt2/onlinelog/group_47_2_1' SIZE 5120m;
ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 47 '+REDO_FLASH/rt2/onlinelog/group_47_2_2' SIZE 5120m;

ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 48 '+REDO_FLASH/rt2/onlinelog/group_48_1_1' SIZE 5120m;
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 48 '+REDO_FLASH/rt2/onlinelog/group_48_1_2' SIZE 5120m;

ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 49 '+REDO_FLASH/rt2/onlinelog/group_49_2_1' SIZE 5120m;
ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 49 '+REDO_FLASH/rt2/onlinelog/group_49_2_2' SIZE 5120m;



Удалять можно  inactive / unused redo log group:

SQL> select group#,thread#,members,status from v$log;

group#  thread# members status

30    1    2    INACTIVE
31    2    2    INACTIVE
32    1    2    CURRENT
33    2    2    INACTIVE
34    1    2    INACTIVE
35    2    2    INACTIVE
36    1    2    INACTIVE
37    2    2    INACTIVE
38    1    2    INACTIVE
39    2    2    CURRENT


SQL> alter database drop logfile group 30;

SQL> select group#,thread#,members,status from v$log;




Ещё пример:

SQL> column REDOLOG_FILE_NAME format a50;

SQL> set lines 1000
SQL>
SELECT a.GROUP#,
       a.THREAD#,
       a.SEQUENCE#,
       a.ARCHIVED,
       a.STATUS,
       b.MEMBER AS REDOLOG_FILE_NAME,
       (a.BYTES/1024/1024) AS SIZE_MB
FROM v$log a
JOIN v$logfile b ON a.Group#=b.Group#
ORDER BY a.GROUP#;


    GROUP#    THREAD#  SEQUENCE# ARC STATUS           REDOLOG_FILE_NE              SIZE_MB
   ------- ---------- ---------- --- ---------------- --------------------------- ----------
         1          1          3 YES ACTIVE           +REDO/proddb/redo01.log      100
         2          1          4 NO  CURRENT          +REDO/proddb/redo02.log      100
         3          2          1 YES INACTIVE         +REDO/proddb/redo03.log      100
         4          2          2 NO  CURRENT          +REDO/proddb/redo04.log      100



SQL> ALTER DATABASE ADD LOGFILE THREAD 1
GROUP 5 ('+REDO/proddb/redo05.log') SIZE 100m,
GROUP 6 ('+REDO/proddb/redo06.log') SIZE 100m;

SQL>
SQL> ALTER DATABASE ADD LOGFILE THREAD 2
GROUP 7 ('+REDO/proddb/redo07.log') SIZE 100m,
GROUP 8 ('+REDO/proddb/redo08.log') SIZE 100m;


или так:

ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 5 '+REDO' SIZE 100m;
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 6 '+REDO' SIZE 100m;

ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 7 '+REDO' SIZE 100m;
ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 8 '+REDO' SIZE 100m;

Проверяем:

SQL> column REDOLOG_FILE_NAME format a50;

SQL> set lines 1000
SQL> SELECT a.GROUP#, a.THREAD#, a.SEQUENCE#,
 a.ARCHIVED, a.STATUS, b.MEMBER AS REDOLOG_FILE_NAME,
 (a.BYTES/1024/1024) AS SIZE_MB FROM v$log a
JOIN v$logfile b ON a.Group#=b.Group#
ORDER BY a.GROUP#;

    GROUP#    THREAD#  SEQUENCE# ARC STATUS           REDOLOG_FILE_NAME                                     SIZE_MB
---------- ---------- ---------- --- ---------------- -------------------------------------------------- ----------
         1          1          3 YES INACTIVE         +REDO/proddb/redo01.log                                 100
         2          1          4 NO  CURRENT          +REDO/proddb/redo02.log                                 100
         3          2          1 YES INACTIVE         +REDO/proddb/redo03.log                                 100
         4          2          2 NO  CURRENT          +REDO/proddb/redo04.log                                 100
         5          1          0 YES UNUSED           +REDO/proddb/redo05.log                                 100
         6          1          0 YES UNUSED           +REDO/proddb/redo06.log                                 100
         7          2          0 YES UNUSED           +REDO/proddb/redo07.log                                 100
         8          2          0 YES UNUSED           +REDO/proddb/redo08.log                                 100



Удаляем только  INACTIVE илиr UNUSED:

SQL>  select group#,thread#,members,status from v$log;

    GROUP#    THREAD#    MEMBERS     STATUS
---------- ---------- ---------- ----------------
         1          1          2    INACTIVE
         2          1          2    INACTIVE
         3          2          2    CURRENT
         4          2          2    INACTIVE
         5          1          2    INACTIVE
         6          1          2    INACTIVE
         7          2          2    INACTIVE
         8          2          2    CURRENT


SQL> аlter database drop logfile group 1;

Проверяем:

SQL>  select group#,thread#,members,status from v$log;






суббота, 18 марта 2017 г.

Параметры инициализации:


Специальные параметры кластера:

instance_number
instance_group
thread
cluster_database
cluster_database_instances
cluster_interconnects
remote_listener
local_listener
parallel_instance
max_commit_propagation_delay

Пример:

TESTDB1.instance_number=1
TESTDB2.instance_number=2
TESTDB1.thread=1
TESTDB2.thread=2
*.cluster_database_instances=2
*.cluster_database=TRUE
*.remote_listener='rac-tdb-scan:1521'


Параметры имеющие одинаковое значение для всех инстансов:

active_instance_count
archive_lag_target
compatible
cluster_database
cluster_database_instances
cluster_interconnects      
control_files
db_block_size
db_domain
db_files
db_name
db_recovery_file_dest
db_recovery_file_dest_size
db_unique_name
dml_locks                     -- when 0
instance_type                -- rdbms or asm
max_commit_propagation_delay
parallel_max_servers
remote_login_password_file
trace_enabled
undo_management

Пример:

*.cluster_database=true
*.cluster_database_instances=2
*.compatible='11.2.0.2'
*.undo_management='AUTO'


Параметры имеющие уникальные значения для всех инстансов:


instance_number
instance_name
thread
undo_tablespace/rollback_segments

Пример:

INST1.instance_number=1
INST1.instance_name=TESTDB1
INST1.thread=1
INST1.undo_tablespace='UNDOTBS1'

INST2.instance_number=2
INST2.instance_name=TESTDB1
INST2.thread=2
INST2.undo_tablespace='UNDOTBS2'



Пример файла параметров инициализации:

TESTDB2.__db_cache_size=111132278784
TESTDB1.__db_cache_size=109521666048
TESTDB1.__oracle_base='/oracle/diag'#ORACLE_BASE set from environment
TESTDB2.__oracle_base='/oracle/diag'#ORACLE_BASE set from environment
TESTDB2.__shared_io_pool_size=0
TESTDB1.__shared_io_pool_size=268435456
TESTDB2.__streams_pool_size=1207959552
TESTDB1.__streams_pool_size=1342177280

TESTDB1.dispatchers='(PROTOCOL=TCP)(SERVICE=TESTDB1XDB)'
TESTDB2.dispatchers='(PROTOCOL=TCP)(SERVICE=TESTDB2XDB)'
TESTDB1.instance_name='TESTDB1'
TESTDB2.instance_name='TESTDB2'
TESTDB1.instance_number=1
TESTDB2.instance_number=2
TESTDB1.thread=1
TESTDB2.thread=2
TESTDB1.undo_tablespace='PSAPUNDO'
TESTDB2.undo_tablespace='PSAPUNDO2'

*._awr_mmon_deep_purge_all_expired=TRUE
*._fix_control='5099019:ON','5705630:ON','6055658:OFF','6120483:OFF','6399597:ON','6430500:ON','6440977:ON','6626018:ON','6972291:ON','7168184:OFF','7658097:ON','8937971:ON','9196440:ON','9495669:ON','13077335:ON','13627489:ON','14255600:ON','14595273:ON','18405517:2','20355502:8','14846352:OFF','22540411:ON','10038517:OFF'#Note 1888485 RECOMMENDED SETTINGS
*._high_priority_processes='LMS*|LM*|LCK0|GCR*|DIAG|CKPT|DBRM|RMS0|LGWR'
*._in_memory_undo=FALSE
*._ktb_debug_flags=8
*._MUTEX_WAIT_SCHEME=1
*._MUTEX_WAIT_TIME=10
*._OPTIM_PEEK_USER_BINDS=false
*._OPTIMIZER_ADAPTIVE_CURSOR_SHARING=false
*._optimizer_aggr_groupby_elim=FALSE
*._optimizer_batch_table_access_by_rowid=FALSE
*._OPTIMIZER_EXTENDED_CURSOR_SHARING_REL='none'
*._optimizer_reduce_groupby_key=FALSE
*._OPTIMIZER_USE_FEEDBACK=false
*._rowsets_enabled=FALSE
*._securefiles_concurrency_estimate=50
*._suppress_identifiers_on_dupkey=TRUE
*._use_single_log_writer='TRUE'

*.audit_file_dest='/oracle/rdbms/12.1.0.2/TESTDB/rdbms/audit'
*.audit_sys_operations=true
*.audit_trail='DB'
*.cluster_database_instances=2
*.cluster_database=TRUE
*.compatible='12.1.0.2.0'
*.control_file_record_keep_time=30
*.control_files='+TST_DATA/TESTDB/controlfile/current.774.882710569'#Set by RMAN
*.db_block_size=8192
*.db_cache_size=111132278784
*.db_create_file_dest='+TST_DATA'
*.db_create_online_log_dest_1='+TS_REDO'
*.db_file_name_convert='+DATA','+TST_DATA'
*.db_files=1024
*.db_name='TESTDB'
*.db_recovery_file_dest_size=30000M
*.db_unique_name='TESTDB'
*.event='10027','10028','10142','10183','10191','10995 level 2','38068 level 100','38085','38087','44951 level 1024'#SAP_121022_201503 RECOMMENDED SETTINGS
*.fal_client='TESTDB'
*.fal_server='TESTDB'
*.fast_start_io_target=0
*.fast_start_mttr_target=0
*.filesystemio_options='SETALL'
*.JAVA_POOL_SIZE=261196308
*.LARGE_POOL_SIZE=261196308
*.log_archive_config='NODG_CONFIG'
*.log_archive_dest_1='LOCATION=+ARCHLOGS/TESTDB'
*.log_archive_dest_2=''
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.dbf'
*.log_checkpoint_interval=3000000
*.log_checkpoint_timeout=0
*.log_checkpoints_to_alert=true
*.log_file_name_convert='/oracle/TESTDB/','+DATA/TESTDB/'
*.max_dump_file_size='20000'
*.open_cursors=2000
*.optimizer_adaptive_features=FALSE
*.optimizer_capture_sql_plan_baselines=FALSE
*.optimizer_index_cost_adj=20
*.parallel_execution_message_size=16384
*.parallel_max_servers=0
*.parallel_min_servers=0
*.parallel_threads_per_cpu=1
*.pga_aggregate_target=36045090422
*.processes=1000
*.query_rewrite_enabled='false'
*.recyclebin='off'
*.remote_listener='rac-tdb-scan:1521'
*.remote_login_passwordfile='exclusive'
*.replication_dependency_tracking=false
*.resource_manager_plan=''
*.service_names='TESTDB'
*.sessions=2000
*.shared_pool_size=11753833833
*.standby_archive_dest='+ARCHLOGS/TESTDB'
*.standby_file_management='AUTO'
*.undo_retention=86400
*.use_large_pages='only'




Добавление нового узла к кластеру:


Check networking connectivty/ASM disk status at OS level

[grid@omega01]$ ssh omega03 date
[grid@omega01]$ nslookup omega03
[root@omega01]# ping omega03.localdomain.ru
[root@omega01]# ping 192.168.2.73

[root@omega03]# /etc/init.d/oracleasm listdisks
DATA1
DATA2
DATA3
OCR1
OCR2
OCR3

[root@omega03]# ls -l  /dev/oracleasm/*
/dev/oracleasm/disks:
total 0
brw-rw---- 1 grid asmadmin 8, 17 Aug 30 09:21 DATA1
brw-rw---- 1 grid asmadmin 8, 33 Aug 29 14:16 DATA2
brw-rw---- 1 grid asmadmin 8, 49 Aug 29 14:16 DATA3
brw-rw---- 1 grid asmadmin 8, 65 Aug 29 14:16 OCR1
brw-rw---- 1 grid asmadmin 8, 81 Aug 29 14:16 OCR2
brw-rw---- 1 grid asmadmin 8, 97 Aug 29 14:16 OCR3


You can also dump the ASM header by running kfed if addnode.sh failed but the file copy operation of addnotes.sh succeeded

[grid@omega03]$ $GRID_HOME/bin/kfed  read /dev/oracleasm/disks/DATA2  | grep name
kfdhdb.dskname:               DATA_0001 ; 0x028: length=9
kfdhdb.grpname:                    DATA ; 0x048: length=4
kfdhdb.fgname:                DATA_0001 ; 0x068: length=9
kfdhdb.capname:                         ; 0x088: length=0

Use kfod to get an idea about the ASM disk status

[grid@omega03]$ kfod asm_diskstring='/dev/oracleasm/disks/*' nohdr=true verbose=true disks=all status=true op=disks
5114 CANDIDATE /dev/oracleasm/disks/DATA1 grid     asmadmin
5114 MEMBER    /dev/oracleasm/disks/DATA2 grid     asmadmin
5114 MEMBER    /dev/oracleasm/disks/DATA3 grid     asmadmin
2047 CANDIDATE /dev/oracleasm/disks/OCR1  grid     asmadmin
2047 CANDIDATE /dev/oracleasm/disks/OCR2  grid     asmadmin
2047 CANDIDATE /dev/oracleasm/disks/OCR3  grid     asmadmin



Verify the current setup with the following cluvfy commands:

[grid@omega01]$ cluvfy stage -post hwos -n omega01, omega03
[grid@omega01]$ cluvfy stage -pre nodeadd -n omega03 | grep PRV
[grid@omega01]$ cluvfy stage -pre crsinst -n omega03
[grid@omega01]cluvfy comp peer -refnode omega01 -n omega03 -orainv oinstall -osdba asmdba -verbose
use IGNORE_PREADDNODE_CHECKS if needed


Run addNode.sh for the Clusterware (GRID_HOME)

Use IGNORE_PREADDNODE_CHECKS Y  when there were exlainable cluvfy errors like  PRVG-1013, PRVF-5636, PRVF-7617
For GNS clusters use CLUSTER_NEW_NODES
For NON-GNS cluster use CLUSTER_NEW_NODES and CLUSTER_NEW_VIRTUAL_HOSTNAMES

Run addnode.sh

[grid@omega01]$ setenv IGNORE_PREADDNODE_CHECKS Y
[grid@omega01]$ cd $GRID_HOME/oui/bin
[grid@omega01]$ ./addNode.sh "CLUSTER_NEW_NODES={omega03}"


Run required root scripts

[root@omega03]# /u01/app/oraInventory/orainstRoot.sh
[root@omega03]# /u01/app/11203/grid/root.sh


Run cluvfy and crsctl stat res -t   to verify cluster node add installation

[root@omega01]# my_crs_stat


Verify post CRS status with cluvfy

[grid@omega01]$ cluvfy stage -post crsinst -n omega01,omega02,omega03
[grid@omega01]$ cluvfy stage -post nodeadd -n omega03

Ignore well known errors like:
PRVF-5217 : An error occurred while trying to look up IP address for "omega01.localdomain.ru"


Install RAC database software on omega03

Install RAC database software on omega03 as oracle owner

[oracle@omega01]$ id
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),501(vboxsf),506(asmdba),54322(dba)

[oracle@omega01]$ cd $ORACLE_HOME/oui/bin
[oracle@omega01]$ ./addNode.sh "CLUSTER_NEW_NODES={omega03}"


[root@omega03]# /u01/app/oracle/product/11203/testdb/root.sh


Invoke dbca and add instance TESTDB3 on node OMEGA03

Run dbca as oracle owner:
[oracle@omega03]$ dbca
  Oracle RAC cluster database
   Instance Management
     Add an Instance
       Select your RAC database (TESTDB)
         Select instance: TESTDB3 - Host: OMEGA03
          Accept the default values   for
          Initialization Parameters
             Instance     Name                          Value
             TESTDB3     instance_number     3
             TESTDB3     thread                      3
             TESTDB3     undo_tablespace     UNDOTBS3   
           Tablespaces
             Name     Type                     Extent Management
             UNDOTBS3     PERMANENT , UNDO     LOCAL 
           Data Files
             Name                     Tablespace     Size(M)
             OMF_UNDOTBS3_DATAFILE_0    UNDOTBS3     100
           Redo Log Groups
             Group  Size(K)     Thread
              5     51200             3
              6     51200


Verify cluster status using dbca, cluvfy

[oracle@omega01]$ srvctl status database -d TESTDB
[grid@omega01]$ cluvfy comp admprv -o db_config -d $ORACLE_HOME -n omega01,omega02,omega03 -verbose


--------------------------------------------------------------------------------------------------

Добавим новый узел rac3 в файл /etc/hosts  на всех узлах:
cat /etc/hosts

127.0.0.1 localhost localhost.localdomain

192.168.1.231  rac1.localdomain      rac1
10.10.10.231   rac1-priv.localdomain rac1-priv
192.168.1.234  rac1-vip.localdomain  rac1-vip

192.168.1.232  rac2.localdomain      rac2
10.10.10.232   rac2-priv.localdomain rac2-priv
192.168.1.235  rac2-vip.localdomain  rac2-vip

192.168.1.233  rac3.localdomain      rac3
10.10.10.233   rac3-priv.localdomain rac3-priv
192.168.1.236  rac3-vip.localdomain  rac3-vip

192.168.1.237 rac-scan.localdomain


Проверим доступность по сети нового узла rac3

root@rac3# ping 192.168.1.231
root@rac3# ping 192.168.1.232
root@rac3# hostname

root@rac1# ping rac3

Проверили сеть
Обновили DNS
Обновили /etc/hosts


Конфигурация ntpd на новом узле


Создаём пользователей


Создаем структуру каталогов на узле rac3 аналогично как на узле rac1.

mkdir -p /u01/app/12.1.0/grid_1
chown -R root:oinstall /u01/app/12.1.0/grid_1
mkdir -p /u01/app/oracle/product/12.1.0/dbhome_1
chown -R oracle:oinstall /u01/app/oracle/product/12.1.0/dbhome_1
chown -R grid:oinstall /u01/app/12.1.0/grid_1

Устанавливаем пакеты

Настраиваем параметры ядра


Проверяем связь по ssh с rac1 и rac2 из под пользователя grid

From oracle_home/oui/bin on existing Node:

/runSSHSetup.sh -user oracle -hosts "Existing_Node New_Node" -advanced -exverify

Configure secure shell for oracle user on all nodes

From oracle_home/oui/bin on rac1

./runSSHSetup.sh -user oracle -hosts "rac2 rac3" -advanced -exverify




Проверяем видимость дисков с узла rac3

root@rac3# cd /etc/udev
root@rac3# ls
root@rac3# cd rules.d/
root@rac3# cat 99-oracle.rules


Проверяем что узел rac3 подготовлен для инсталляции ПО


Verify New Node (HWOS)

From grid_home on rac1
$GRID_HOME/bin/cluvfy stage -post hwos -n rac3


Verify Peer (REFNODE)

From grid_home on rac1
$GRID_HOME/bin/cluvfy comp peer -refnode rac1 -n rac3 -orainv oinstall -osdba dba -verbose


Verify New Node (NEW NODE PRE)

From grid_home on rac1
$GRID_HOME/bin/cluvfy stage -pre nodeadd -n rac3 -fixup -verbose

Будет предложено выполнить под root скрипт на rac3
root@rac3# /tmp/CVU_12.1.0.1.0_grid/runfixup.sh


Инсталляция GRID Software на новый узел rac3:

проверим что узел готов к этому

cluvfy stage -pre nodeadd -n rac3 -verbose

cd /u01/app/12.1.0/grid_1
cd addnode

Если вы используете Grid Naming Service (GNS):

./addNode.sh -silent "CLUSTER_NEW_NODES={rac3}"

Если вы используете Grid Naming Service (GNS):

./addNode.sh -silent "CLUSTER_NEW_NODES={rac3}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={rac3-vip}"

На новом узле rac3 запустим от root скрипт:

root.sh

Если вы не используете службу Oracle Grid Naming Service (GNS),
вы должны добавить имя и адрес для rac3 в DNS.

Теперь вы должны запустить Oracle Clusterware на новом узле.
Чтобы проверить установку Oracle Clusterware на новом узле,
вы можете запустить следующую команду на вновь настроенном узле rac3:

$ cd /u01/app/12.1.0/grid/bin
$ ./cluvfy stage -post nodeadd -n rac3 -verbose

Проверяем стек

crsctl check cluster
crsctl check has
crsctl status res -t
olsnodes -n

srvctl status asm -a
ocrcheck
crsctl query css votedisk


Проверить что новый grid_home появился в файле inventory.xml на всех узлах.

cd /u01/app/oraInventory/ContentsXML/
cat inventory.xml

Избегайте изменять имена хостов после завершения установки Oracle Clusterware,
включая добавление или удаление квалификаций домена.
Узлы с измененными именами хостов должны быть удалены из кластера и добавлены
обратно с новым именем.


Инсталляция RDBMS Software на новый узел rac3:

На первом узле запускаем

$ cd /u01/app/oracle/product/12.1.0/dbhome_1/addnode
$ ./addNode.sh -silent "CLUSTER_NEW_NODES = {rac3}"

На новом узле rac3 запустим от root скрипт:
root.sh


Создание экземпляра ORCL3 на новом узле rac3

Вы можете добавить экземпляр в кластер, используя опцию "Instance Management" в DBCA
или с помощью Enterprise Manager.

Но можно и в silent режиме:

dbca -silent -addInstance -nodelist rac3 -gdbname ORCL -instanceName ORCL3 -sysDBAUserName sys -sysDBAPassword oracle

Проверяем

srvctl status database -d orcl

Проверить что новый oracle_home появился в файле inventory.xml на всех узлах.

cd /u01/app/oraInventory/ContentsXML/
cat inventory.xml

crsctl status res -t

crsctl status res -t | grep -i offline


---------------------------------------------------------------------------------------------------------------------


Добавили новый сервер omega03
Дали доступ по ssh


Проверяем настройки ОС на готовность к установке кластерного ПО:

[grid@omega01 ~]$  cluvfy stage -pre crsinst -n omega03 -verbose
Решаем проблемы:


Проверяем новый узел на готовность установки Oracle Clusterware:

[grid@omega01 ~]$ cd /u01/distrib/grid/
[grid@omega01 grid]$./runcluvfy.sh stage -pre nodeadd -n omega03

[grid@omega01 ~]$crsctl check cluster -all



Устанавливаем кластерное ПО на omega03

[grid@omega-1 u01]$ cd /u01/app/grid/11.2.0/asm_1/oui/bin/
[grid@omega01 u01]$ export IGNORE_PREADDNODE_CHECKS=Y
[grid@omega01 bin]$ ./addNode.sh --silent  "CLUSTER_NEW_NODES={omega03}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={omega03-vip}"

Выполняем скрипты от root:

root@omega03 ~ #  /u01/app/oraInventory/orainstRoot.sh
root@omega03 ~ #  /u01/app/grid/11.2.0/asm_1/root.sh


Проверяем:

[grid@omega03 ~]$ crsctl check cluster -all


Проверяем установку Oracle Clusterware на узле omega03

[grid@omega01 u01]$ cluvfy stage -post crsinst -n all

[grid@omega01 u01]$ crsctl status serverpool



Установка ПО Oracle RAC:

[oracle@omega01 ~]$ cd /u01/app/oracle/11.2.0/db_1/oui/bin/
[oracle@omega01 bin]$ ./addNode.sh -silent "CLUSTER_NEW_NODES={omega03}"


Выполняем скрипт от root:

root@omega03 ~ #  /u01/app/oracle/11.2.0/db_1/root.sh


Проверяем:

[oracle@omega01 bin]$  crsctl status serverpool

[grid@omega03 ~]$ crsctl status res -t



Добавляем экземпляр:

[grid@omega01 ~]$ dbca -silent -addInstance -nodeList omega03 -gdbName TESTDB3_OMEGA03 -instanceName TESTDB3 -sysDBAUserName sys                            
Enter SYS user password:


Проверяем:

[grid@omega01 ~]$ crsctl status serverpool                                                                                                                
                                                                                                                                        
[grid@omega01 ~]$ srvctl add serverpool -g mypool -l 1 -u -1 -i 1 -n "omega01,omega02,omega03"
                                                                                                                                                        



Удаление узла из кластера



Verify that all the instances are up and running.

[oracle@omega03 ~]$ srvctl status database -d TESTDB


Check resources running on note omega03

[grid@omega03 ~]$ crs | egrep 'omega03|STATE|--'



Verify the current ocr backup.

[grid@omega03 ~]$ ocrconfig -showbackup



Ensure that all the instances are registered in the default CRS Listener.
[grid@omega03 ~]$ lsnrctl status LISTENER_SCAN2

Start DCBA from a node other than the one that you are removing and select
  -->"Real Application Clusters"
    --> "Instance Management"
     -->  "Delete Instance".
      --> Accept the alert windows to delete the instance.



Verify that the instance has been deleted and thread is disabled by querying gv$instance and v$thread. 

SQL> select INST_ID, INSTANCE_NUMBER, INSTANCE_NAME, HOST_NAME from gv$instance;
SQL> select THREAD#, STATUS, INSTANCE from v$thread;


Verify that the thread for the deleted instance has been disabled. If it is still enabled, disable it as follows:

SQL>ALTER DATABASE DISABLE THREAD 2;
THREAD# 3 is already disable


Delete the Node from the Cluster

$ srvctl disable listener -l -n < NodeToBeDeleted >
$ srvctl stop listener -l -n < NodeToBeDeleted >


Checking listners:
[grid@omega03 ~]$ ps -elf | grep tns
No need to run the above commands as all listeners run from GRID_HOME



Run the following command from the $ORACLE_HOME/oui/bin directory
on the node that you are deleting to update the inventory on that node:


[oracle@omega03 ~]$ $ORACLE_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME CLUSTER_NODES=omega03 -local



Remove the Oracle RAC software by runing the following command on the node to be deleted from the $ORACLE_HOME/deinstall directory:
[oracle@omega03 ~]$ $ORACLE_HOME/deinstall/deinstall -local



Update the nodes list on the remaining nodes as in the following example:

omega01:
 

[root@omega03 Desktop]# ssh omega01
[root@omega01 ~]# su - oracle
Active ORACLE_SID:   TESTDB1

[oracle@omega01 ~]$ $ORACLE_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME CLUSTER_NODES=omega01,omega02
[oracle@omega01 ~]$ $ORACLE_HOME/OPatch/opatch lsinventory


Verify whether the node to be deleted is active or not by using following command from the $CRS_HOME/bin directory:

[grid@omega01 ~]$ olsnodes -s -t

On omega02:

[root@omega02 ~]# su - oracle
Active ORACLE_SID:   TESTDB2

[oracle@omega02 ~]$ $ORACLE_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME CLUSTER_NODES=omega01,omega02
[oracle@omega02 ~]$ $ORACLE_HOME/OPatch/opatch lsinventory
[root@omega02 ~]# su - grid
[grid@omega02 ~]$ olsnodes -s -t



Disable the Oracle Clusterware applications and daemons running on the node.
Run the rootcrs.pl script as root from the $CRS_HOME/crs/ on the node to be deleted
(if it is last node use the option -lastnode) as follows:

[root@omega03 Desktop]# $GRID_HOME/crs/install/rootcrs.pl -deconfig -force



From any node that you are not deleting, run the following command from the $CRS_HOME/bin directory as root to delete the node from the cluster:

[root@omega01 ~]# $GRID_HOME/bin/crsctl delete node -n omega03



Update the node list on the node to be deleted ( omega03) , run the following command from the CRS_HOME/oui/bin directory:

[grid@omega03 ~]$ $GRID_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$GRID_HOME CLUSTER_NODES=omega03 -local



Update the node list on the remaining nodes by running the following command from $CRS_HOME/oui/bin from each of the remaining nodes the cluster:

on omega01:

[grid@omega01 ~]$ $GRID_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$GRID_HOME CLUSTER_NODES={omega01,omega02} -local
[grid@omega01 ~]$ $GRID_HOME/OPatch/opatch lsinventory 

on omega02:

[grid@omega02 ~]$ $GRID_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$GRID_HOME CLUSTER_NODES={omega01,omega02} -local
[grid@omega02 ~]$ $GRID_HOME/OPatch/opatch lsinventory 



Deinstall the Oracle Clusterware home from the node that you want to delete:

grid@omega03 ~]$ $GRID_HOME/deinstall/deinstall -local



Check cluster and resources status of our 2-Note cluster

grid@omega02 ~]$  olsnodes -s -t
[grid@omega02 ~]$ crs


--------------------------------------------------------------------------------------------------------------------

Удаление ноды из кластера

grid@rac1$ olsnodes
grid@rac1$ crsctl get cluster mode status
grid@rac1$ crsctl config gns
grid@rac1$ oifcfg getif
grid@rac1$ crsctl get node role config
grid@rac1$ asmcmd showclustermode
grid@rac1$ asmcmd showclusterstate
grid@rac1$ srvctl status asm -detail
grid@rac1$ crsctl get node role config -all
grid@rac1$ crsctl get node role status -all
grid@rac1$ crsctl status res -t

Перед удалением ноды удалим её из GC OEM

Backup OCR from rac1

root@rac1# /u01/app/11.2.0/grid/bin/ocrconfig -manualbackup


root@rac1# /u01/app/12.1.0/grid_1/bin/olsnodes -s
root@rac1# /u01/app/12.1.0/grid_1/bin/crsctl query css votedisk
root@rac1# /u01/app/12.1.0/grid_1/bin/ocrcheck
root@rac1# /u01/app/12.1.0/grid_1/bin/srvctl status database -d orcl
root@rac1# /u01/app/12.1.0/grid_1/bin/srvctl config service -d ORCL
root@rac1# /u01/app/12.1.0/grid_1/bin/srvctl status service -d orcl


Удалить инстанс ORCL3

root@rac1# xhost +
access control disabled, clients can connect from any host

root@rac1# su - oracle
oracle@rac1$ which dbca
oracle@rac1$ dbca


Или так:

oracle@rac1$ dbca -silent -deleteInstance -nodeList rac3 -gdbName ORCL -instanceName ORCL3 -sysDBAUserName sys -sysDBAPassword oracle

Проверяем:
srvctl status database -d orcl
увидим два инстанса

oracle@rac1$ srvctl config database -d orcl -v
oracle@rac1$ sqlplus '/as sysdba'
SQL> select * from gv$instance
SQL> select * from v$thread
SQL> select * from v$log where thread#=3
SQL> select * from v$logfile

Удалить online redo и undo, если есть

oracle@rac1$ srvctl config listener -a



Remove RDBMS Software

oracle@rac3$ cd $ORACLE_HOME/oui/bin
$ ./runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={rac3}" -local

# In the above command the "-local" hint is used, So that when we
# deinstall the oracle software, then only the local installation
# in removed otherwise. If this hint is not supplied then
# Oracle binaries from all the instances would be removed.

Your oratab should not contain any database entries except for ASM entries.

Sample oratab file

root@rac3# cat /etc/oratab
+ASM3:/u01/app/11.2.0/grid:N            # line added by Agent


Deinstall Oracle Software.

root@rac3# su - oracle
oracle@rac3$
oracle@rac3$ cd $ORACLE_HOME/deinstall
oracle@rac3$ deinstall]$ ./deinstall -local


On the remaining nodes (rac1,rac2) update the oraInventory.

root@rac1# su - oracle
oracle@rac1$ cd $ORACLE_HOME/oui/bin
oracle@rac1$ ./runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={rac1,rac2}"


Verify that the Inventory.xml file on both nodes should only contain
dbhome entries for rac1 and rac2.


oracle@rac1$ cat /u01/app/oraInventory/ContentsXML/inventory.xml

.....
< HOME NAME="OraDb11g_home1" LOC="/u01/app/oracle/product/11.2.0/dbhome_1" TYPE="O" IDX="2" >
   < NODE_LIST >
      < NODE NAME="rac1"/ >
      < NODE NAME="rac2"/ >
   < /NODE_LIST >
< /HOME >


Remove Clusterware from the rac3.

root@rac1# cd /u01/app/11.2.0/grid/bin/
root@rac1# ./olsnodes -s -t
rac1    Active  Unpinned
rac2    Active  Unpinned
rac3    Active  Unpinned

The third node should be unpinned if it's not then do the following.

root@rac1# ./crsctl unpin css -n rac3


Disable Oracle clusterware by executing the following from rac3.

root@rac3# cd /u01/app/11.2.0/grid/crs/install/
root@rac3# ./rootcrs.pl -deconfig -force


Run the following from rac1 to verify.

root@rac1# cd /u01/app/11.2.0/grid/bin/
root@rac1# ./crsctl delete node -n rac3
CRS-4661: Node rac3 successfully deleted.

root@rac1# ./olsnodes -t -s
rac1    Active  Unpinned
rac2    Active  Unpinned


Update Oracle inventory from rac3


grid@rac3$ cd $GRID_HOME/oui/bin
grid@rac3$ ./runInstaller -updateNodeList ORACLE_HOME=$GRID_HOME "CLUSTER_NODES={rac3}" CRS=TRUE -silent -local


Deinstall Grid Infrastructure Software from rac3.

grid@rac3$ cd $GRID_HOME/deinstall
grid@rac3$ ./deinstall -local


Run the specified commands as root from rac3.

root@rac3# rm -rf /etc/oraInst.loc
root@rac3# rm -rf /opt/ORCLfmap
root@rac3# rm -rf /u01/app/11.2.0/
root@rac3# rm -rf /u01/app/oracle/


After the de-install make sure that oracle clusterware does not start
by checking the following.


root@rac3# diff /etc/inittab /etc/inittab.no_crs


Update Oracle Inventory on all nodes by running the following command from rac1.

root@rac1# su - grid
grid@rac1$ cd $GRID_HOME/oui/bin
grid@rac1$ ./runInstaller -updateNodeList ORACLE_HOME=$GRID_HOME "CLUSTER_NODES={rac1,rac2}" CRS=TRUE -silent



Do post node removal checks from rac1.

grid@rac1$ cluvfy stage -post nodedel -n rac3 -verbose

olsnodes -s -t
crsctl status res -t | grep -i rac3


Удалить ORACLE ASM на узле rac3.

root@rac3# /usr/sbin/oracleasm exit
root@rac3# rpm -qa | grep asm
root@rac3# rpm -ev oracleasmlib-2.0.4-1.el5 oracleasm-2.6.18-164.el5-2.0.5-1.el5 oracleasm-support-2.1.7-1.el5

Удалить директории

root@rac3# rm -f /etc/sysconfig/oracleasm.rpmsave
root@rac3# rm -f /etc/sysconfig/oracleasm-_dev_oracleasm
root@rac3# rm -f /etc/rc.d/rc2.d/S29oracleasm
root@rac3# rm -f /etc/rc.d/rc0.d/K20oracleasm
root@rac3# rm -f /etc/rc.d/rc5.d/S29oracleasm
root@rac3# rm -f /etc/rc.d/rc4.d/S29oracleasm
root@rac3# rm -f /etc/rc.d/rc1.d/K20oracleasm
root@rac3# rm -f /etc/rc.d/rc3.d/S29oracleasm
root@rac3# rm -f /etc/rc.d/rc6.d/K20oracleasm


Удалить пользователей и группы

root@rac3# userdel -r grid
root@rac3# userdel -r oracle
root@rac3# groupdel oinstall
root@rac3# groupdel asmadmin
root@rac3# groupdel asmdba
root@rac3# groupdel asmoper
root@rac3# groupdel dba
root@rac3# groupdel oper