четверг, 14 марта 2013 г.

AUTO TASK

Oracle 11g включает три задачи автоматического обслуживания базы данных:

Автоматическая сборка статистики оптимизатора - собирает устаревшие или отсутствующие статистические данные для всех объектов схемы.
Имя задачи - это 'auto optimizer stats collection'

Автоматический советник по сегментам - определяет сегменты, которые могут быть реорганизованы для экономии места.
Имя задачи - 'auto space advisor'.

Автоматический советник по настройке SQL - определяет и пытается настроить SQL с высокой нагрузкой.
Имя задачи - 'sql tuning advisor'

Эти задачи выполняются во время окон обслуживания, которые планируется открыть за ночь.

auto optimizer stats collection
auto space advisor
sql tuning advisor



select operation_name, status from dba_autotask_operation;

OPERATION_NAME              STATUS  
------------------------------------------------
auto optimizer stats job        ENABLED   
auto space advisor job          ENABLED  
automatic sql tuning task      ENABLED   

 

select window_name,
       window_active,
       autotask_status,
       to_char(window_next_time,'dd/mm/yyyy hh24:mi:ss') next_time
  from DBA_AUTOTASK_WINDOW_CLIENTS
 order by window_next_time;


WINDOW_NAME        WINDOW_ACTIVE   AUTOTASK_STATUS   NEXT_TIME 
---------------------------------------------------------------------------------------------------------        
MONDAY_WINDOW          FALSE           DISABLED          01/10/2018 22:00:00  
TUESDAY_WINDOW         FALSE           DISABLED          02/10/2018 22:00:00  
WEDNESDAY_WINDOW   FALSE           DISABLED          03/10/2018 22:00:00  
THURSDAY_WINDOW      FALSE           DISABLED          04/10/2018 22:00:00  
FRIDAY_WINDOW             FALSE           DISABLED          05/10/2018 22:00:00  
SATURDAY_WINDOW       FALSE           DISABLED          06/10/2018 06:00:00  
SUNDAY_WINDOW            FALSE           DISABLED          07/10/2018 06:00:00  

 
                                 
Отключить или включить отдельные автоматические задачи из всех окон обслуживания:

BEGIN
  DBMS_AUTO_TASK_ADMIN.disable(
    client_name => 'auto space advisor',
    operation   => NULL,
    window_name => NULL);
END;
/

select operation_name, status from dba_autotask_operation;

BEGIN
  DBMS_AUTO_TASK_ADMIN.enable(
    client_name => 'auto space advisor',
    operation   => NULL,
    window_name => NULL);
END;
/

select operation_name, status from dba_autotask_operation;


Изменение приоритетов.

BEGIN
  DBMS_AUTO_TASK_ADMIN.override_priority(
    client_name => 'auto optimizer stats collection',
    priority => dbms_auto_task_admin.priority_high);
END;
/


select client_name, priority_override from dba_autotask_client;

begin
   dbms_auto_task_admin.override_priority(
      client_name => 'auto space advisor',
      priority => dbms_auto_task_admin.priority_urgent);
end;
/


begin
   dbms_auto_task_admin.override_priority(
      client_name => 'auto space advisor',
      priority => dbms_auto_task_admin.priority_medium);
end;
/

select client_name, priority_override from dba_autotask_client;



Настроим так:


BEGIN
  DBMS_AUTO_TASK_ADMIN.disable(
    client_name => 'sql tuning advisor',
    operation   => NULL,
    window_name => NULL);
END;
/

BEGIN
  DBMS_AUTO_TASK_ADMIN.disable(
    client_name => 'auto space advisor',
    operation   => NULL,
    window_name => NULL);
END;
/

BEGIN
  DBMS_AUTO_TASK_ADMIN.enable(
    client_name => 'auto optimizer stats collection',
    operation   => 'auto optimizer stats job',
    window_name => NULL);
END;
/


Просмотр журнала сбора статистики:

select client_name,
       job_status,
       job_start_time,
       job_duration,
       job_info
  from dba_autotask_job_history
where client_name like '%stats%'
order by job_start_time;



Удалять или добавлять задачи в отдельные окна обслуживания:

BEGIN
  DBMS_AUTO_TASK_ADMIN.disable(
    client_name => 'auto optimizer stats collection',
    operation   => NULL,
    window_name => 'MONDAY_WINDOW');

  DBMS_AUTO_TASK_ADMIN.disable(
    client_name => 'auto space advisor',
    operation   => NULL,
    window_name => 'MONDAY_WINDOW');

  DBMS_AUTO_TASK_ADMIN.disable(
    client_name => 'sql tuning advisor',
    operation => NULL,
    window_name => 'MONDAY_WINDOW');
END;
/




Глобальные параметры сбора статистики могут быть изменены с помощью процедуры
SET_GLOBAL_PREFS в пакете DBMS_STATS:



EXEC DBMS_STATS.alter_stats_history_retention(90);
EXEC DBMS_STATS.set_global_prefs('estimate_percent', '5');


Включить инкрементальный сбор статистики:

BEGIN
 DBMS_STATS.SET_GLOBAL_PREFS('INCREMENTAL', 'TRUE');
END;
/

Включить сбор статистики только по системному словарю:

BEGIN
 DBMS_STATS.SET_GLOBAL_PREFS('AUTOSTATS_TARGET','ORACLE');
END;
/

Автоматический режим сбора статистики:

BEGIN
 DBMS_STATS.SET_GLOBAL_PREFS('AUTOSTATS_TARGET','AUTO');
END;
/


Проверить в каком режиме идет сбор статистики:

select DBMS_STATS.GET_PREFS ('AUTOSTATS_TARGET') as AUTOSTATS_TARGET from dual;


Глобальные настройки режима сбора статистики:



select 'CASCADE = '||dbms_stats.GET_PREFS('CASCADE') as global_stats from dual
union all
select 'DEGREE = '||dbms_stats.GET_PREFS('DEGREE') from dual
union all
select 'ESTIMATE_PERCENT = '||dbms_stats.GET_PREFS('ESTIMATE_PERCENT') from dual
union all
select 'METHOD_OPT = '||dbms_stats.GET_PREFS('METHOD_OPT') from dual
union all
select 'NO_INVALIDATE = '||dbms_stats.GET_PREFS('NO_INVALIDATE') from dual
union all
select 'GRANULARITY = '||dbms_stats.GET_PREFS('GRANULARITY') from dual
union all
select 'PUBLISH = '||dbms_stats.GET_PREFS('PUBLISH') from dual
union all
select 'INCREMENTAL = '||dbms_stats.GET_PREFS('INCREMENTAL') from dual
union all
select 'STALE_PERCENT = '||dbms_stats.GET_PREFS('STALE_PERCENT') from dual
union all
select 'AUTOSTATS_TARGET = '||DBMS_STATS.GET_PREFS ('AUTOSTATS_TARGET') as AUTOSTATS_TARGET from dual;

GLOBAL_STATS                                    
-----------------------------------------------
CASCADE = DBMS_STATS.AUTO_CASCADE               
DEGREE = NULL                                   
ESTIMATE_PERCENT = DBMS_STATS.AUTO_SAMPLE_SIZE  
METHOD_OPT = FOR ALL COLUMNS SIZE AUTO          
NO_INVALIDATE = DBMS_STATS.AUTO_INVALIDATE      
GRANULARITY = AUTO                              
PUBLISH = TRUE                                  
INCREMENTAL = FALSE                             
STALE_PERCENT = 10                              
AUTOSTATS_TARGET = AUTO                         




Параметры sql tuning advisor могут быть изменены с помощью процедуры SET_TUNING_TASK_PARAMETER в пакете DBMS_SQLTUNE.

BEGIN
  DBMS_SQLTUNE.set_tuning_task_parameter('SYS_AUTO_SQL_TUNING_TASK', 'LOCAL_TIME_LIMIT', 1200);
  DBMS_SQLTUNE.set_tuning_task_parameter('SYS_AUTO_SQL_TUNING_TASK', 'ACCEPT_SQL_PROFILES', 'FALSE');
  DBMS_SQLTUNE.set_tuning_task_parameter('SYS_AUTO_SQL_TUNING_TASK', 'MAX_SQL_PROFILES_PER_EXEC', 20);
  DBMS_SQLTUNE.set_tuning_task_parameter('SYS_AUTO_SQL_TUNING_TASK', 'MAX_AUTO_SQL_PROFILES', 10000);
END;
/


Вся группа окон MAINTENANCE_WINDOW_GROUP может быть включена или отключена с помощью процедур ENABLE и DISABLE в пакете DBMS_SCHEDULER.

MAINTENANCE_WINDOW_GROUP

BEGIN
  DBMS_SCHEDULER.disable(
    name  => 'SYS.MAINTENANCE_WINDOW_GROUP',
    force => TRUE);

  DBMS_SCHEDULER.enable(
    name  => 'SYS.MAINTENANCE_WINDOW_GROUP');
END;
/


Изменить атрибуты окна можно с использованием процедуры SET_ATTRIBUTE пакета DBMS_SCHEDULER.

BEGIN
  DBMS_SCHEDULER.disable(name => 'SYS.MONDAY_WINDOW', force => TRUE);

  DBMS_SCHEDULER.set_attribute(
    name      => 'SYS.MONDAY_WINDOW',
    attribute => 'DURATION',
    value     => numtodsinterval(180, 'minute'));

  DBMS_SCHEDULER.enable(name=>'SYS.MONDAY_WINDOW');
END;
/


Если создали дополнительные окна обслуживания, назначьте их группе MAINTENANCE_WINDOW_GROUP,
и по умолчанию они будут назначены плану ресурсов DEFAULT_MAINTENANCE_PLAN.
При необходимости вы можете отредактировать этот план или создать новый план.



Если вы создаете новый план ресурсов, вы можете назначить его соответствующим окнам обслуживания с помощью пакета DBMS_SCHEDULER.

BEGIN
  DBMS_SCHEDULER.disable(name => 'SYS.MONDAY_WINDOW', force => TRUE);

  DBMS_SCHEDULER.set_attribute(
    name      => 'SYS.MONDAY_WINDOW',
    attribute => 'RESOURCE_PLAN',
    value     => 'MY_NEW_PLAN');

  DBMS_SCHEDULER.enable(name=>'SYS.MONDAY_WINDOW');
END;
/


Чтобы очистить план ресурса, выполните следующую команду. 

BEGIN
  DBMS_SCHEDULER.set_attribute(
    name      => 'SYS.MONDAY_WINDOW',
    attribute => 'RESOURCE_PLAN',
    value     => '');
END;
/


Следующие представления отображают информацию,
связанную с задачами автоматического обслуживания базы данных:



select * from dba_scheduler_wingroup_members;
select * from dba_scheduler_windows;
select * from dba_scheduler_window_groups;
select * from DBA_AUTOTASK_CLIENT;
select * from DBA_AUTOTASK_CLIENT_HISTORY;
select * from DBA_AUTOTASK_JOB_HISTORY;
select * from DBA_AUTOTASK_CLIENT_JOB;
select * from DBA_AUTOTASK_OPERATION;
select * from DBA_AUTOTASK_TASK;
select * from DBA_AUTOTASK_WINDOW_CLIENTS;
select * from DBA_AUTOTASK_WINDOW_HISTORY;
select * from DBA_AUTOTASK_SCHEDULE;


select * from dba_rsrc_plans;
select * from dba_rsrc_plan_directives;
select * from dba_rsrc_consumer_groups;
select * from dba_rsrc_consumer_group_privs;
select * from dba_rsrc_mapping_priority;
select * from dba_rsrc_group_mappings;
select * from dba_rsrc_manager_system_privs;
select initial_rsrc_consumer_group from dba_users;
select resource_consumer_group, current_queue_duration from v$session;
select * from v$rsrc_plan;
select * from v$rsrc_consumer_group;







среда, 27 февраля 2013 г.

Делегирование административных полномочий в Solaris

 Для того, чтобы обычный пользователь имел привилегии монтировать и размонтировать файловые системы,  ему необходимо назначить соответствующий профиль.

Посмотреть, какой профиль содержит команду  mount  можно так:

# grep "mount" /etc/security/exec_attr


Смотрим что еще позволяет делать этот профиль:

# grep "File System Management" /etc/security/exec_attr


Назначим этот профиль пользователю oragrid:

# usermod -P 'File System Management' oragrid

После этого пользователь oragrid может монтировать файловые системы используя  pfexec:

$ pfexec umount /u09/acfs

$ pfexec mount -F acfs /dev/asm/acfs_v1-27  /u09/acfs

ACFS

1. Создаем точки монтирования:

# mkdir  /u09/acfs
# cd /u09
# chown oradb:oinstall acfs
# chmod g+w acfs


2. Создаем тома на дисковой группе:

(sqlplus)

alter diskgroup acfsdg add  volume acfs_v1 size 100g;
select volume_name, volume_device from v$asm_volume;

(asmcmd)

ASMCMD [+] > volcreate -G acfsdg -s 100G acfs_v1
ASMCMD [+] > volinfo -a


3. Информация о томах:

ASMCMD> volinfo -a
Diskgroup Name: ACFSDG

         Volume Name: ACFS_V1
         Volume Device: /dev/asm/acfs_v1-27
         State: ENABLED
         Size (MB): 3813376
         Resize Unit (MB): 32
         Redundancy: UNPROT
         Stripe Columns: 4
         Stripe Width (K): 128
         Usage: ACFS
         Mountpath:

ASMCMD> exit


4. How to automatically mount the filesystem, after reboots

$ /usr/lib/fs/acfs/acfsutil registry -a  /dev/asm/acfs_v1-27  /u09/acfs
acfsutil registry: ACFS-05062: cannot query CRS resource


This command will add this filesystem in the Grid registry & will mount it after reboot or grid restart.
To unregister a file system from the Oracle Automatic Storage Management volume registry

/usr/lib/fs/acfs/acfsutil registry -d  /u09/acfs
acfsutil registry: ACFS-03143: The specified mount point does not exist and therefore cannot be deleted.



5. Создаем файловые системы на томах:

# mkfs -F acfs /dev/asm/acfs_v1-27 (Solaris)
# mkfs -t acfs /dev/asm/acfs_v1-27 (Linux)
# mkfs -V acfs /dev/asm/acfs_v1-27 (AIX)


# ls -lLh /dev/asm
total 0
brwxrwx---   1 root     asmadmin 308, 13825 Dec  6 14:15 acfs_v1-27
crwxrwx---   1 root     asmadmin 308, 13825 Dec  6 15:26 racfs_v1-27
#

# ls -l /dev/asm
total 2
lrwxrwxrwx   1 oragrid  oinstall      41 Dec  6 14:15 acfs_v1-27 -> /devices/pseudo/oracleadvm@0:acfs_v1-0-27
lrwxrwxrwx   1 oragrid  oinstall      45 Dec  6 14:15 racfs_v1-27 -> /devices/pseudo/oracleadvm@0:acfs_v1-0-27,raw
#


$ mkfs -F acfs /dev/asm/acfs_v1-27

mkfs: version                   = 11.2.0.3.0
mkfs: on-disk version           = 39.0
mkfs: volume                    = /dev/asm/acfs_v1-27
mkfs: ACFS-01010: Volume already contains an ACFS file system.  To reformat the volume, reissue mkfs with the -o f option.
mkfs: ACFS-01004: /dev/asm/racfs_v1-27 was not formatted.


$ mkfs -o f -F acfs /dev/asm/acfs_v1-27
mkfs: version                   = 11.2.0.3.0
mkfs: on-disk version           = 39.0
mkfs: volume                    = /dev/asm/acfs_v1-27
mkfs: volume size               = 3998614552576
mkfs: Format complete.

$

6. Монтируем созданные файловые системы

# mount -F acfs /dev/asm/acfs_v1-27  /u09/acfs (Solaris)
# mount -t acfs /dev/asm/acfs_v1-27  /u09/acfs (linux)
# mount -V acfs /dev/asm/acfs_v1-27  /u09/acfs (AIX)


# mount -F acfs /dev/asm/acfs_v1-27  /u09/acfs


# su - oradb
Oracle Corporation      SunOS 5.10      Generic Patch   January 2005
You have new mail.


7. Check and repair an Oracle ACFS file system.

# fsck -a -v -y -F acfs /dev/asm/acfs_v1-27 (Solaris)
# fsck -a -v -y -t acfs /dev/asm/acfs_v1-27 (Linux)
# fsck -a -v -y -V acfs /dev/asm/acfs_v1-27 (AIX)


8. Check

$ cd /u09/acfs

$ touch aaa

$ ls -l
total 128
-rw-r--r--   1 oradb    oinstall       0 Dec  6 16:01 aaa
drwx------   2 root     root       65536 Dec  6 15:40 lost+found


9. Изменять размер тома можно так:

/usr/lib/fs/acfs/acfsutil size -100G  /u09/acfs

$


1. Unmount the file system

# mount  /u09/acfs

# umount -a -t acfs (Linux Only)
# unmountall -F acfs (Solaris, AIX)



2. De-register the file system

# acfsutil registry -d /u09/acfs
acfsutil registry: successfully removed ACFS mount point /u09/acfs from Oracle Registry


3. Remove the file system

# /usr/lib/fs/acfs/acfsutil rmfs /dev/asm/acfs_v1-27


4. Disable the volume

ASMCMD> voldisable -G acfsdg acfs_v1

5. Delete the volume

ASMCMD> voldelete  -G acfsdg acfs_v1


6. Drop the volumne from the diskgroup

SQL> alter diskgroup acfsdg drop volume acfs_v1;

Diskgroup altered.


SQL> select volume_name,volume_device from v$asm_volume;

no rows selected


Solaris autostart script


# cp xyz /etc/init.d
# chmod 0744 /etc/init.d/xyz
# chown root:sys /etc/init.d/xyz
# cd /etc/init.d
# ln xyz /etc/rc2.d/S99xyz
# ln xyz /etc/rc0.d/K99xyz
# ls /etc/init.d/*xyz /etc/rc2.d/*xyz /etc/rc0.d/*xyz


cd  /etc/init.d



-rwxr--r--   1 root     root         345 Dec 13 17:54 oraagent
-rwxr--r--   1 root     root         386 Dec 14 12:32 oratgw



# more oraagent
#!/bin/sh

user=oraagent
SU=/bin/su
AGENT_HOME=/u01/app/oraagent/product/11.1.0/agent11g
export AGENT_HOME

case "$1" in
start)
$SU - $user $AGENT_HOME/bin/emctl start agent
;;
status)
$SU - $user $AGENT_HOME/bin/emctl status agent
;;
stop)
$SU - $user $AGENT_HOME/bin/emctl stop agent
;;
*)
echo "Usage : oraagent (start|status|stop)"
;;
esac


ln -s /etc/init.d/oraagent /etc/rc0.d/K01oraagent

ln -s /etc/init.d/oraagent /etc/rc2.d/K01oraagent
ln -s /etc/init.d/oraagent /etc/rc2.d/S99oraagent

ln -s /etc/init.d/oraagent /etc/rc3.d/K01oraagent
ln -s /etc/init.d/oraagent /etc/rc3.d/S99oraagent


# more oratgw
#!/bin/sh

user=oratgw
SU=/bin/su
ORACLE_HOME=/u01/app/oratgw/product/11.2.0.3/tg_1
export ORACLE_HOME

case "$1" in
start)
$SU - $user -c "$ORACLE_HOME/bin/lsnrctl start listener1522"
;;
status)
$SU - $user -c "$ORACLE_HOME/bin/lsnrctl status listener1522"
;;
stop)
$SU - $user -c "$ORACLE_HOME/bin/lsnrctl stop listener1522"
;;
*)
echo "Usage : oraagent (start|status|stop)"
;;
esac


ln -s /etc/init.d/oratgw /etc/rc0.d/K01oratgw

ln -s /etc/init.d/oratgw /etc/rc2.d/K01oratgw
ln -s /etc/init.d/oratgw /etc/rc2.d/S99oratgw

ln -s /etc/init.d/oratgw /etc/rc3.d/K01oratgw
ln -s /etc/init.d/oratgw /etc/rc3.d/S99oratgw

пятница, 22 февраля 2013 г.

Сервисы в Oracle Restart

Создаем сервисы в БД testdb:

exec dbms_service.create_service(service_name => 'testdb_app', network_name=> 'testdb_app');
exec dbms_service.start_service('testdb_app');

удалять так:
exec dbms_service.stop_service('testdb_app');
exec dbms_service.delete_service('testdb_app');


Добавляем базу testdb в конфигурацию oracle restart:

srvctl add database -d testdb_p -n testdb -i testdb -o /u01/app/oradb/product/11.2.0.3/dbhome_1 -p /u01/app/oradb/product/11.2.0.3/dbhome_1/dbs/spfiletestdb.ora  -s OPEN  -r PRIMARY  -t IMMEDIATE -y AUTOMATIC -a "DATA,RECO,REDO";

srvctl add database -d testdb_s -n testdb -i testdb -o /u01/app/oradb/product/11.2.0.3/dbhome_1 -p /u01/app/oradb/product/11.2.0.3/dbhome_1/dbs/spfiletestdb.ora  -s MOUNT -r PHYSICAL_STANDBY -t IMMEDIATE -y AUTOMATIC -a "DATA,RECO,REDO";


Тестовую базу можно добавить в режиме (manual)
после перезагрузки сервера базу нужно будет запускать руками

srvctl add database -d testdb -n testdb -i testdb -o /u01/app/oradb/product/11.2.0.3/dbhome_1 -p /u01/app/oradb/product/11.2.0.3/dbhome_1/dbs/spfiletestdb.ora  -s OPEN -r PRIMARY -t IMMEDIATE -y MANUAL -a "DATA,RECO,REDO,TEST";

Добавляем сервисы в конфигурацию oracle restart:

$ srvctl add service -d testdb_p -s testdb_app -l primary -e SELECT -m BASIC
$ srvctl modify service -d testdb_p -s testdb_app -z 180 -w 1
$ srvctl config service -d testdb_p


standby:

$ srvctl add service -d testdb_s -s testdb_app -l primary -e SELECT -m BASIC
$ srvctl modify service -d testdb_s -s testdb_app -z 180 -w 1
$ srvctl config service -d testdb_s




Регистрация сервисов БД в случае БЕЗ использования GI


Названия сервисов: SIDAPP для Primary и  SIDREP для Standby

Без поддержки TAF    
  
-- Для БД с ролью PRIMARY

begin
  DBMS_SERVICE.CREATE_SERVICE (
            service_name => 'TESTAPP',
            network_name => 'TESTAPP');
end;
/


-- Для БД с ролью STANDBY + READ ONLY

begin
  DBMS_SERVICE.CREATE_SERVICE (
            service_name => 'TESTREP',
            network_name => 'TESTREP');
end;
/

С поддержкой TAF

-- Для БД с ролью PRIMARY

begin
  DBMS_SERVICE.CREATE_SERVICE (
            service_name => 'TESTAPP',
            network_name => 'TESTAPP',
            failover_method  => 'BASIC',
            failover_type    => 'SELECT',
            failover_retries => 20,
            failover_delay   => 5);
end;
/

-- Для БД с ролью STANDBY + READ ONLY

begin
  DBMS_SERVICE.CREATE_SERVICE (
            service_name => 'TESTREP',
            network_name => 'TESTREP',
            failover_method  => 'BASIC',
            failover_type    => 'SELECT',
            failover_retries => 20,
            failover_delay   => 5);
end;
/


Процедура автозапуска сервисов в БД в зависимости от её РОЛИ

CREATE OR REPLACE TRIGGER SYS.startDGservices after startup on database
DECLARE
  db_role VARCHAR(30);
  db_open_mode VARCHAR(30);
BEGIN
  SELECT DATABASE_ROLE, OPEN_MODE INTO db_role, db_open_mode FROM V$DATABASE;
  IF db_role = 'PRIMARY' THEN DBMS_SERVICE.START_SERVICE('TESTAPP'); END IF;
  IF db_role = 'PHYSICAL STANDBY' AND db_open_mode LIKE 'READ ONLY%' THEN DBMS_SERVICE.START_SERVICE('TESTREP'); END IF;
END;
/


Процедуры ручного запуска сервисов в БД в зависимости от её РОЛИ

CREATE OR REPLACE procedure SYS.startAPPservice as
DECLARE
  db_role VARCHAR(30);
  db_open_mode VARCHAR(30);
BEGIN
  SELECT DATABASE_ROLE, OPEN_MODE INTO db_role, db_open_mode FROM V$DATABASE;
  IF db_role = 'PRIMARY' THEN DBMS_SERVICE.START_SERVICE('TESTAPP'); END IF;
END;
/

CREATE OR REPLACE procedure SYS.startREPservice as
DECLARE
  db_role VARCHAR(30);
  db_open_mode VARCHAR(30);
BEGIN
  SELECT DATABASE_ROLE, OPEN_MODE INTO db_role, db_open_mode FROM V$DATABASE;
  IF db_role = 'PHYSICAL STANDBY' AND db_open_mode LIKE 'READ ONLY%' THEN DBMS_SERVICE.START_SERVICE('TESTREP'); END IF;
END;
/


Процедуры ручной остановки сервисов в БД

create or replace procedure SYS.stopAPPservice as
begin
  DBMS_SERVICE.STOP_SERVICE('TESTAPP');
end;
/


create or replace procedure SYS.stopREPservice as
begin
  DBMS_SERVICE.STOP_SERVICE('TESTREP');
end;
/



Регистрация сервисов БД в случае использованияGI


Регистрация сервисов в Grid Infrastructure (GI)

Без поддержки TAF

-- Для БД с ролью PRIMARY

. oraenv
$ srvctl add service -d TEST_OMEGA01 \
                     -s TESTAPP         \
                     -l PRIMARY   \
                     -y AUTOMATIC \
                     -P NONE      \
                     -e NONE      \
                     -m NONE      \
                     -w 5         \
                     -z 20         

-- Для БД с ролью STANDBY + READ ONLY

. oraenv
$ srvctl add service -d TEST_OMEGA02 \
                     -s TESTREP         \
                     -l PHYSICAL_STANDBY \
                     -y AUTOMATIC \
                     -P NONE      \
                     -e NONE      \
                     -m NONE      \
                     -w 5         \
                     -z 20         

С поддержкой TAF

-- Для БД с ролью PRIMARY

. oraenv
$ srvctl add service -d TEST_OMEGA01 \
                     -s TESTAPP         \
                     -l PRIMARY   \
                     -y AUTOMATIC \
                     -P BASIC     \
                     -e SELECT    \
                     -m BASIC     \
                     -w 5         \
                     -z 20   

-- Для БД с ролью STANDBY + READ ONLY

. oraenv
$ srvctl add service -d TEST_OMEGA02 \
                     -s TESTREP         \
                     -l PHYSICAL_STANDBY \
                     -y AUTOMATIC \
                     -P BASIC     \
                     -e SELECT    \
                     -m BASIC     \
                     -w 5         \
                     -z 20


Процедура автозапуска сервисов в БД в зависимости от её РОЛИ

Работа сервисов контролируется ПО Grid Infrastructure в АВТО-режиме

Процедуры ручного запуска сервисов в БД в зависимости от её РОЛИ

$ srvctl start  service -d TEST_OMEGA01 -s TESTAPP –o OPEN
$ srvctl start  service -d TEST_OMEGA02 -s TESTREP


Процедуры ручной остановки сервисов в БД

$ srvctl stop  service -d TEST_OMEGA01 -s TESTAPP
$ srvctl stop  service -d TEST_OMEGA02 -s TESTREP


Процедура проверки характеристик зарегистрированного сервиса

$ srvctl config service -d TEST_OMEGA01 -s TESTAPP
$ srvctl config service -d TEST_OMEGA02 -s TESTREP


Проверка клиентский соединения на предмет использования сервисов с поддержкой технологии TAF :

col username format a25
col machine format a30
col module format a15
col service_name format a15
col server format a12
col failover_type format a15
col failover_method format a15
col failed_over format a15

select inst_id,sid,username, machine, substr(module,1,15) as module, service_name,server,
       case when failover_type='NONE'   then NULL else failover_type   end as failover_type,
       case when failover_method='NONE' then NULL else failover_method end as failover_method,
       case when failed_over='NO'       then NULL else failed_over     end as failed_over
from gv$session
order by 1,2;


Проверка работы сервисов

col host_name    format a22
col service_name format a22
col network_name format a22

select (select host_name from v$instance) host_name,
       name service_name,
       network_name
from v$services;


Настройка дескрипторов соединений на клиентской стороне


01 - Primary - должен быть поднят сервис APP
02 - Standby- доджен быть поднят сервис REP в режиме RO

Подключение к базам в БЕЗ Standby конфигурации:


Non-RAC конфигурация

TEST_APP =
  (DESCRIPTION =
    (ENABLE=BROKEN)
    (ADDRESS_LIST=
        (ADDRESS = (PROTOCOL = TCP)(HOST = omega01.localdomain)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = TESTAPP)
    )
  )


RAC конфигурация

TEST_APP =
  (DESCRIPTION =
     (ENABLE=BROKEN)
     (CONNECT_TIMEOUT=30)
     (TRANSPORT_CONNECT_TIMEOUT=10)
     (RETRY_COUNT=3)
     (ADDRESS_LIST=
       (LOAD_BALANCE=on)
       (ADDRESS = (PROTOCOL = TCP)(HOST = scan_omega01)(PORT = 1521))
     )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = TESTAPP)
    )
  )


Подключение к базам в  Standby конфигурации:


Non-RAC конфигурация

TEST_APP =
  (DESCRIPTION =
    (ENABLE=BROKEN)
    (TRANSPORT_CONNECT_TIMEOUT=10)
    (ADDRESS_LIST=
      (LOAD_BALANCE=OFF)
      (FAILOVER=ON)
        (ADDRESS = (PROTOCOL = TCP)(HOST = omega01.localdomain)(PORT = 1521))
        (ADDRESS = (PROTOCOL = TCP)(HOST = omega02.localdomain)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = TESTAPP)
    )
  )

TEST_REP =
  (DESCRIPTION =
    (ENABLE=BROKEN)
    (TRANSPORT_CONNECT_TIMEOUT=10)
    (ADDRESS_LIST=
      (LOAD_BALANCE=OFF)
      (FAILOVER=ON)
        (ADDRESS = (PROTOCOL = TCP)(HOST = omega01.localdomain)(PORT = 1521))
        (ADDRESS = (PROTOCOL = TCP)(HOST = omega02.localdomain)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = TESTREP)
    )
  )


RAC конфигурация

TEST_APP =
  (DESCRIPTION_LIST=
     (LOAD_BALANCE=OFF)
     (FAILOVER=ON)
       (DESCRIPTION=
          (ENABLE=BROKEN)
          (CONNECT_TIMEOUT=30)
          (TRANSPORT_CONNECT_TIMEOUT=10)
          (RETRY_COUNT=3)
          (ADDRESS_LIST=
            (LOAD_BALANCE=ON)
            (ADDRESS=(PROTOCOL=TCP)(HOST=scan_omega01)(PORT=1521))
          )
            (CONNECT_DATA=
              (SERVER = DEDICATED)
              (SERVICE_NAME=TESTAPP)
            )
       )
       (DESCRIPTION=
          (ENABLE=BROKEN)
          (CONNECT_TIMEOUT=30)
          (TRANSPORT_CONNECT_TIMEOUT=10)
          (RETRY_COUNT=3)
          (ADDRESS_LIST=
            (LOAD_BALANCE=ON)
            (ADDRESS=(PROTOCOL=TCP)(HOST=scan_omega02)(PORT=1521))
          )
            (CONNECT_DATA=
              (SERVER = DEDICATED)
              (SERVICE_NAME=TESTAPP)
            )
       )
  )


TEST_REP =
  (DESCRIPTION_LIST=
     (LOAD_BALANCE=OFF)
     (FAILOVER=ON)
       (DESCRIPTION=
          (ENABLE=BROKEN)
          (CONNECT_TIMEOUT=30)
          (TRANSPORT_CONNECT_TIMEOUT=10)
          (RETRY_COUNT=3)
          (ADDRESS_LIST=
            (LOAD_BALANCE=ON)
            (ADDRESS=(PROTOCOL=TCP)(HOST=scan_omega01)(PORT=1521))
          )
            (CONNECT_DATA=
              (SERVER = DEDICATED)
              (SERVICE_NAME=TESTREP)
            )
       )
       (DESCRIPTION=
          (ENABLE=BROKEN)
          (CONNECT_TIMEOUT=30)
          (TRANSPORT_CONNECT_TIMEOUT=10)
          (RETRY_COUNT=3)
          (ADDRESS_LIST=
            (LOAD_BALANCE=ON)
            (ADDRESS=(PROTOCOL=TCP)(HOST=scan_omega02)(PORT=1521))
          )
            (CONNECT_DATA=
              (SERVER = DEDICATED)
              (SERVICE_NAME=TESTREP)
            )
       )
  )




Configure Oracle Grid Infrastructure for a Standalone Server

# /u01/app/11.2.0.3/grid/perl/bin/perl -I /u01/app/11.2.0.3/grid/perl/lib -I /u01/app/11.2.0.3/grid/crs/install /u01/app/11.2.0.3/grid/crs/install/roothas.pl -deconfig -force
Using configuration parameter file: /u01/app/11.2.0.3/grid/crs/install/crsconfig_params
CRS resources for listeners are still configured
PRKO-2573 : ONS daemon is already stopped.
CRS-2673: Attempting to stop 'ora.cssd' on 'omega.sun.com'
CRS-2677: Stop of 'ora.cssd' on 'omega.sun.com' succeeded
CRS-2791: Starting shutdown of Oracle High Availability Services-managed resources on 'omega.sun.com'
CRS-2673: Attempting to stop 'ora.evmd' on 'omega.sun.com'
CRS-2677: Stop of 'ora.evmd' on 'omega.sun.com' succeeded
CRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'omega.sun.com' has completed
CRS-4133: Oracle High Availability Services has been stopped.
Successfully deconfigured Oracle Restart stack

# /u01/app/11.2.0.3/grid/perl/bin/perl -I /u01/app/11.2.0.3/grid/perl/lib -I /u01/app/11.2.0.3/grid/crs/install /u01/app/11.2.0.3/grid/crs/install/roothas.pl
Using configuration parameter file: /u01/app/11.2.0.3/grid/crs/install/crsconfig_params
LOCAL ADD MODE
Creating OCR keys for user 'oragrid', privgrp 'oinstall'..
Operation successful.
LOCAL ONLY MODE
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
CRS-4664: Node omega.sun.com successfully pinned.
Adding Clusterware entries to inittab
omega.sun.com     2013/02/12 14:12:01     /u01/app/11.2.0.3/grid/cdata/omega.sun.com/backup_20130212_141201.olr
Successfully configured Oracle Grid Infrastructure for a Standalone Server


# ls -l /etc/inittab
-rw-r--r--   1 root     root        1130 Feb 12 14:11 /etc/inittab
root@omega.sun.ru # more /etc/inittab
# Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# The /etc/inittab file controls the configuration of init(1M); for more
# information refer to init(1M) and inittab(4).  It is no longer
# necessary to edit inittab(4) directly; administrators should use the
# Solaris Service Management Facility (SMF) to define services instead.
# Refer to smf(5) and the System Administration Guide for more
# information on SMF.
#
# For modifying parameters passed to ttymon, use svccfg(1m) to modify
# the SMF repository. For example:
#
#       # svccfg
#       svc:> select system/console-login
#       svc:/system/console-login> setprop ttymon/terminal_type = "xterm"
#       svc:/system/console-login> exit
#
#ident  "@(#)inittab    1.41    04/12/14 SMI"
ap::sysinit:/sbin/autopush -f /etc/iu.ap
sp::sysinit:/sbin/soconfig -f /etc/sock2path
smf::sysinit:/lib/svc/bin/svc.startd    >/dev/msglog 2<>/dev/msglog
p3:s1234:powerfail:/usr/sbin/shutdown -y -i5 -g0 >/dev/msglog 2<>/dev/msglog
pt:s1234:powerfail:/lib/svc/method/installupdates lock

h1:3:respawn:/etc/init.d/init.ohasd run >/dev/null 2>&1

#


# ps -ef|grep ohas
 oragrid 17353     1   0 14:11:35 ?           0:02 /u01/app/11.2.0.3/grid/bin/ohasd.bin reboot
    root 17766  6506   0 14:19:46 pts/3       0:00 grep ohas
    root 17322     1   0 14:11:35 ?           0:00 /bin/sh /etc/init.d/init.ohasd run
#


# /u01/app/11.2.0.3/grid/bin/crsctl status resource -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ons
               OFFLINE OFFLINE      omega.sun.com
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        OFFLINE OFFLINE
ora.diskmon
      1        OFFLINE OFFLINE
ora.evmd
      1        ONLINE  ONLINE       omega.sun.com


# /u01/app/11.2.0.3/grid/bin/crsctl check has
CRS-4638: Oracle High Availability Services is online

# /u01/app/11.2.0.3/grid/bin/crsctl check css
CRS-4530: Communications failure contacting Cluster Synchronization Services daemon
#

# /u01/app/11.2.0.3/grid/bin/crsctl start resource ora.cssd -init
CRS-2672: Attempting to start 'ora.cssd' on 'omega.sun.com'
CRS-2672: Attempting to start 'ora.diskmon' on 'omega.sun.com'
CRS-2676: Start of 'ora.diskmon' on 'omega.sun.com' succeeded
CRS-2676: Start of 'ora.cssd' on 'omega.sun.com' succeeded
#

# /u01/app/11.2.0.3/grid/bin/crsctl status resource -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ons
               OFFLINE OFFLINE      omega.sun.com
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       omega.sun.com
ora.diskmon
      1        OFFLINE OFFLINE
ora.evmd
      1        ONLINE  ONLINE       omega.sun.com
#



В 11.2.0.3 diskmon.bin  не offline только для Exadate.

Если нет процессов то переконфигурировать  Grid Infrastructure.

А так делать не нужно:

crsctl delete resource ora.cssd
.....

crsctl add resource ora.cssd
.....


# /u01/app/11.2.0.3/grid/bin/crsctl modify resource "ora.cssd" -attr "AUTO_START=1"
# /u01/app/11.2.0.3/grid/bin/crsctl modify resource "ora.diskmon" -attr "AUTO_START=1"

#
# /u01/app/11.2.0.3/grid/bin/crsctl stop has
CRS-2791: Starting shutdown of Oracle High Availability Services-managed resources on 'omega.sun.com'
CRS-2673: Attempting to stop 'ora.cssd' on 'omega.sun.com'
CRS-2677: Stop of 'ora.cssd' on 'omega.sun.com' succeeded
CRS-2673: Attempting to stop 'ora.evmd' on 'omega.sun.com'
CRS-2677: Stop of 'ora.evmd' on 'omega.sun.com' succeeded
CRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'omega.sun.com' has completed
CRS-4133: Oracle High Availability Services has been stopped.

#
# /u01/app/11.2.0.3/grid/bin/crsctl start has
CRS-4123: Oracle High Availability Services has been started.
#


# /u01/app/11.2.0.3/grid/bin/crsctl status resource -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ons
               OFFLINE OFFLINE      omega.sun.com
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       omega.sun.com
ora.diskmon
      1        OFFLINE OFFLINE
ora.evmd
      1        ONLINE  ONLINE       omega.sun.com
root@omega.sun.ru #


Конфигурация листенера:

$netca &


$srvctl config listener
Name: LISTENER
Home: /u01/app/11.2.0.3/grid
End points: TCP:1521
$

/u01/app/11.2.0.3/grid/bin/srvctl add listener -l LISTENER -s -p TCP:1521 -o /u01/app/11.2.0.3/grid

Конфигурация ASM:

$asmca &

$srvctl config asm
ASM home: /u01/app/11.2.0.3/grid
ASM listener: LISTENER
Spfile: +DATA/asm/asmparameterfile/registry.253.807812965
ASM diskgroup discovery string: /dev/rdsk/c*s4
$

$srvctl stop asm -f

$srvctl start asm

$srvctl modify resource "ora.asm" -attr "AUTO_START=1"

$srvctl add asm -l LISTENER -p +DATA/asm/asmparameterfile/registry.253.807812965 -d /dev/rdsk/c*s4


Recreate ASM parameterfile (spfile):

vi /tmp/init+ASM.ora

*.asm_diskstring='/dev/rdsk/c*s4'
*.asm_power_limit=1
*.diagnostic_dest='/u01/app/oragrid'
*.instance_type='asm'
*.large_pool_size=12M
*.remote_login_passwordfile='EXCLUSIVE'


$sqlplus "/as sysasm"

alter diskgroup DATA mount;

create spfile='+DATA' from pfile='/tmp/init+ASM.ora';

show parameter spfile;




# /u01/app/11.2.0.3/grid/bin/crsctl start has
# /u01/app/11.2.0.3/grid/bin/crsctl stop has
# /u01/app/11.2.0.3/grid/bin/crsctl status resource -t


Перенос дисковой группы с одного диска на другой:


alter diskgroup DATA add disk new_disk;
alter diskgroup DATA drop disk old_disk;


подождать

select * from v$asm_operation;


ADD ASM

$srvctl add asm -l LISTENER -p /u01/app/11.2.0.3/grid/dbs/init+ASM.ora  -d /dev/rdsk/c*s4

$srvctl start asm



export ORACLE_SID=+ASM
export ORACLE_HOME=/u01/app/11.2.0.3/grid

sqlplus "/as sysasm"


create diskgroup DATA external redundancy
disk '/dev/rdsk/c6t.....d0s4',
disk '/dev/rdsk/c6t.....d0s4'
attribute 'compatible.asm'='11.2.0.0.0';


create pfile='/tmp/pfile' from memory;

Правим файл в другой сессии:

vi /tmp/pfile
*.asm_diskstring='/dev/rdsk/c*s4'
*.asm_power_limit=1
*.diagnostic_dest='/u01/app/oragrid'
*.instance_type='asm'
*.large_pool_size=12M
*.remote_login_passwordfile='EXCLUSIVE'


create spfile='+DATA' from pfile='/tmp/pfile';
shutdown immediate;
startup;
show parameter spfile;

orapwd file=/u01/app/11.2.0.3/grid/dbs/orapw+ASM password=oracle




When setting ASM Monitoring Configuration with SYSASM or SYSDBA In Grid Control 11g [ID 977472.1]


For 11gR2 follow the procedure below to create the ASM password file:
1. Create the password file for ASM on all nodes (if RAC) as follows:
orapwd file=$GRID_INFRASTRUCTURE_HOME/dbs/orapw+ASM password= entries=5

2. Update the password file with the following users/roles:
sqlplus / as sysasm
SQL> create user asmsnmp identified by
SQL> grant sysasm to sys;
SQL> grant sysdba to asmsnmp;


3. Review changes to the password file by querying v$pwfile_users:

SQL> select * from v$pwfile_users;
USERNAME    SYSDB SYSOP SYSAS
---------   ----- ----- -----
SYS         TRUE  TRUE  TRUE
ASMSNMP     TRUE  FALSE FALSE



For 11gR1 follow the procedure below to create the ASM password file:
1. Create the password file for ASM on all nodes (if RAC) as follows:
orapwd file=$ORA_ASM_HOME/dbs/orapw password= entries=5

2. Update the password file with the following users/roles:
sqlplus / as sysdba
SQL> grant sysasm to sys;


3. Review changes to the password file by querying v$pwfile_users:

SQL> select * from v$pwfile_users;
USERNAME  SYSDB SYSOP SYSAS
--------- ----- ----- -----
SYS       TRUE  FALSE TRUE


Initialize the devices using dd

Clean the device before we will reformat.
$ dd if=/dev/zero of=/dev/sda8 bs=1M count=100

dd if=/dev/zero of=/dev/rdsk/c3t60080E500017CAA8000006954EEA57CDd0s0 bs=8192 count=12800

Linux:

OCR disk device
dd if=/dev/zero of=/dev/sdc1 bs=125829120 count=1

Voting disk
dd if=/dev/zero of=/dev/sde1 bs=20971520 count=1


Solaris:

OCR disk device
dd if=/dev/zero of=/dev/rdsk/c1t2d3s4 bs=1M count=256

Voting disk
dd if=/dev/zero of=/dev/rdsk/c1t2d3s4 bs=1M count=256