Перевод секунд в формат Дни.Часы:Минуты:Секунды

Если в MySQL нужно перевести количество секунд в дни часы минуты и секунды, то для этого идеально подойдет функция sec_to_time:

select sec_to_time(18400000) dt from dual;

dt
--
212.23:06:40

Но иногда бывают случаи, когда функцию нельзя использовать из-за ограничения самой функции (Returns the seconds argument, converted to hours, minutes, and seconds, as a TIME value. The range of the result is constrained to that of the TIME data type. A warning occurs if the argument corresponds to a value outside that range). В этом случае, можно получить подобный результат другим способом:

select concat(
cast(floor(18400000/60/60/24) as char(3)),'.',
cast(floor(mod(18400000/60/60/24,1)*24) as char(2)),':',
cast(floor(mod(mod(18400000/60/60/24,1)*24,1)*60) as char(2)),':',
cast(round(mod(mod(mod(18400000/60/60/24,1)*24,1)*60,1)*60) as char(2)))
from dual;

dt
--
212.23:6:40

Конечно запрос довольно громоздкий, но если его представить в виде функции, тогда это упростить задачу:

CREATE FUNCTION sectotime(val INT)
RETURNS char(15)
DETERMINISTIC
begin
declare DD char(3);
declare HH, MI, SS char(2);
declare res char(15);
set DD = cast(floor(val/60/60/24) as char(3));
set HH = cast(floor(mod(val/60/60/24,1)*24) as char(2));
set MI = cast(floor(mod(mod(val/60/60/24,1)*24,1)*60) as char(2));
set SS = cast(round(mod(mod(mod(val/60/60/24,1)*24,1)*60,1)*60) as char(2));
set res = concat(DD,'.',HH,':',MI,':',SS);
return res;
end;

select sectotime(18400000) dt from dual;

dt
--
212.23:6:40

 

Реклама

Публикация приложений Oracle Application Express (APEX) через Apache http server (Apache) в режиме прокси

В моем случае, стала необходимость публиковать приложения разработанные в Oracle APEX в Интернет через DMZ (демилитаризованную зону), при этом не изменяя настроек соединения для пользователей локальной сети, которые подключаются через APEX Listener. Реализовать это все, было принято, с помощью Apache Http Server (Apache), который можно настроить как прокси-сервера, и он имеет свои средства защиты в дополнение к DMZ.

APEX DMZ


Какие версии дистрибутивов использовал:

Установка Oracle APEX и Oracle APEX Listener в этой статье не рассматриваются.


Инсталляция Apache Http Server

Сразу перейдем к установке и настройке Apache на машине (ОС Windows Server 2008 R2), входящей в DMZ.

1. Разархивируем скачанный архив дистрибутива Apache в корень диска C. Должен появиться каталог C:\Apache24.

Note: Если используете другой диск, тогда в имеющемся файле конфигурации Apache24/conf/httpd.conf поменяйте пути на свой диск. В этой статье я использовал имеющийся конфиг, который потом отредактировал под свои нужды.

2. Для инсталляции Apache, как сервис Windows требуется, чтобы на компьютере был установлен компонент Visual C++ Redistributable for Visual Studio 2012 Update 4, который можно взять отсюда http://www.microsoft.com/en-us/download/details.aspx?id=30679.

4. Инсталлируем Apache как сервис, для этого запускаем исполняемый файл httpd.exe с опциями: C:\Apache24\bin\httpd.exe -k install -n “AppWeb”

5. В файле «c:\Apache24\conf\httpd.conf» изменим порт слушателя с 80 (это по умолчанию) на 8090 (порт моего Apex Listener):
Listen 8090

6. Запустим Apache через httpd.exe (но можно запустить и через созданный сервис AppWeb в службах Windows):
C:\Apache24\bin\httpd.exe –k start

7. Проверим работу Apache. Для этого запустим интернет-браузер и введем адрес: http://localhost:8090

Если отобразилась страница с текстом: It works! => Apache работает.


Конфигурация Apache Htpp Server как прокси сервер и доступ к APEX-приложениям

Чтобы Apache работал как проски-сервер и имелся доступ только к определенным приложениям APEX, понадобятся модули mod_proxy и mod_rewrite, которые имеются в данном дистрибутиве.

mod_proxy – модуль позволяющий использовать Apache как прокси сервер (http://httpd.apache.org/docs/current/mod/mod_proxy.html#proxyvia).
mod_rewrite – модуль позволяющий динамически изменять URL, выполнять функции редиректа и проксирования (http://httpd.apache.org/docs/2.4/ru/mod/mod_rewrite.html#rewriterule).

Для осуществления задуманного, отредактируем файл конфигурации httpd.conf, добавив или раскомментировав некоторые строки. Ниже приведен конфигурация Apache с защитой от некоторых веб-атак (в этой статье не расписан полный ракурс осуществления защиты моих веб-приложений).

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_http_module modules/mod_proxy_html.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so

Listen 8090
Timeout 30

ServerTokens Prod
ServerSignature Off 

AcceptFilter https none
AcceptFilter http none
EnableSendfile Off
EnableMMAP Off

RewriteEngine On
RewriteCond %{THE_REQUEST} !HTTP/1\.1$
RewriteRule .* - [F]

FileETag None
Header always append X-Frame-Options SAMEORIGIN
Header set X-XSS-Protection "1; mode=block"

ErrorDocument 404 "Sorry, but this page not found!"
ErrorDocument 502 "Sorry, but this resource is not available!"

# формат записей в логах
LogFormat "%h %l %u %t \"%{sessionID}C\" \"%r\" %>s %b %T" common

# задание виртуальной среды
NameVirtualHost dmzserv01:8090
<VirtualHost dmzserv01:8090>
 LogLevel Debug
 ProxyRequests Off
 ProxyPreserveHost On

Options -Indexes
 Options -FollowSymLinks
 Options -Includes -ExecCGI

<Proxy /apex>
 Order deny,allow
 Allow from all
 </Proxy>

# Проксирование на сайт apex
ProxyPass / http://apex.test.int:8090/
ProxyPassReverse / http://apex.test.int:8090/

# По умолчанию перебрасывает на приложение 135
#RewriteCond %{REQUEST_URI} /
#RewriteRule ^/$ /apex/f?p=135 [R]

# Доступ только к приложению 138 и 135
RewriteCond %{REQUEST_URI} /apex/f
RewriteCond %{QUERY_STRING} ^p=
RewriteCond %{QUERY_STRING} !^p=138
RewriteCond %{QUERY_STRING} !^p=135
RewriteRule ^.*$ - [F]

# логи действий и ошибок сайта apex
ErrorLog c:\Apache24\logs\apex_error.log
CustomLog c:\Apache24\logs\apex_access.log combined
</VirtualHost>

Теперь, если указать в браузере (Internet Explorer) http://dmzserv01:8090/apex/f?p=138, то сработаем проксирование на наш сайт apex через apex listener и получим доступ к приложению 138.

Если не работает, попробуйте в браузере добавить хост или ip машины Apache и Apex Listener в исключения прокси, или же в браузере в Безопасности — локальная сеть — добавьте адрес машины Apache и адрес машины Apex listener. Иногда требуется внесения некоторых изменений в файл c:\Windows\System32\drivers\etc\hosts.

Репликация данных из MySQL в Oracle используя Oracle GoldenGate

Использовал дистрибутивы СУБД MySQL и Oracle:

  • MySQL Community Server 5.6.16 (Windows x86)
  • Oracle DB 11g Release 2 v11.2.0.1 (Windows x64)

Использовал дистрибутивы Oracle GoldenGate:

A. Установка и настройка OGG для сервера-источника MySQL (SOURCE)

A1. Подготовка сервера MySQL для развертывания OGG

•    Движок хранения данных (storage engine) только InnoDB
•    В файле конфигурации сервера MySQL (my.cnf) должны быть указаны параметры бинарных логов:
log-bin – этот параметр определяет место размещения бинарных журналов и необходим для OGG.
log-bin-index – этот параметр определяет место размещения индексов бинарных журналов. По умолчанию та же директории, где и бинарные журналы.
max_binlog_size – задается максимальный размер журнального файла в байтах, при достижения предела, все записи будут писаться в новый журнальный файл.
binlog_format – формат бинарных журналов (ROW, STATEMENT, MIXED). Extractor будет работать только с журналами в формате ROW, остальные форматы приведут к аварийному завершению.

Пример:
binlog_format=row
log-bin=»d:/MySQL DB/mybinlogs/uapbin»
log-bin-index=»d:/MySQL DB/mybinlogs/uapbin.index»
log-error=»d:/MySQL DB/mybinlogs/uapbin.err»
max_binlog_size=20971520

•    Остальные параметры MySQL сервера настраиваются индивидуально.

A2. Установка OGG для MySQL

1.    На одном из дисков, который выделяем под файлы базы данных и для хранения trail-файлов, создаем директорию OGG11MGR. Например, D:\OGG11MGR.
2.    Разархивируем файлы дистрибутива из архива дистрибутива в созданный каталог.
3.    В директории запускаем консоль ggsci.exe и в ней выполняем команду:
ggsci> CREATE SUBDIRS

После чего в директории C:OGG11MGR появятся рабочие каталоги: dirpcs, dirout, dirtmp, dirchk, dirdat, dirdef, dirrpt, dirsql.
4.    Из директории C:OGG11MGR копируем файлы category.dll, ggsmsg.dll в c:WindowsSystem32.
5.    Теперь зададим собственное имя для менеджера процессов OGG. Для этого запустим ggsci и выполним команду:
ggsci> EDIT PARAMS ./GLOBALS

После чего откроется текстовый редактор, где будет предложено создать новый файл, следует согласиться и прописать в файле параметр:
MGRSERVNAME OGGMGR1

OGGMGR1 – уникальное имя менеджера процессов.
Сохранить изменения в файле и закрыть его.
6.    Далее создаем экземпляр OGG (управляющий процесс, который создает OGG процессы, выделяет номера портов и выполняет обслуживание файлов). Для этого вызовем консоль и выполним:
ggsci> EDIT PARAMS MGR

откроется текстовый редактор, где будет предложено создать новый файл, следует согласиться и прописать в файле следующие параметры:
PORT 7809
DYNAMICPORTLIST 7810-7820, 7830
AUTOSTART EXTRACT *
AUTORESTART EXTRACT *, RETRIES 4, WAITMINUTES 4
STARTUPVALIDATIONDELAY 5
PURGEOLDEXTRACTS *

,где PORT – TCPIP порт для менеджера процессов OGG, по которому он взаимодействует с удаленными процессами. Используйте порт по умолчанию, если это возможно.
DYNAMICPORTLIST – список доступных портов, по которым локальные процессы OGG могут связываться с удаленными процессами OGG на других машинах.
AUTOSTART – параметр, который позволяет автоматически запускать процессы OGG после запуска менеджера процессов.
AUTORESTART – параметр, для автоматического перезапуска процессов OGG при сбоях по сети, что может вызвать прерывание чтения транзакционных журналов. RETRIES – максимальное количество перезапусков, WAITMINUTES – время ожидания в минутах, от аварии до перезапуска.
STARTUPVALIDATIONDELAY – сколько секунд ожидать, до проверки состояния процесса OGG. И если после этого времени процесс не ответил, то регистрировать ошибку.
PURGEOLDEXTRACTS – позволяет очищать обработанные файлы для того, чтобы они не потребляли много дискового места.
7.    Сохранить изменения в файле и закрыть его.
8.    Настроим менеджер процессов как службу Windows. Для этого в директории C:OGG11MGR вызовем утилиту install c опцией addservice (добавляет менеджер в качестве сервиса с именем указанным в MGRSERVNAME параметре в файле GLOBALS, если таковой существует, или по умолчанию GGSMGR):
cmd> install addservice

После чего проверяем созданную нами (OGGMGR1) службу в списке служб Windows и настраиваем для нее автоматический запуск.
9.    Запускаем менеджер процессов (службу OGGMGR1) в списке служб или же в консоли ggsci:
ggsci> start manager

10.    Инсталлируем менеджер событий (addevents — добавляет OGG события в диспетчере событий Windows):
cmd> install addevents

11.    На этом установка и настройка OGG на источнике (MySQL) завершена. Далее рассмотрим установку и настройку на целевой базе Oracle.

B. Установка и настройка OGG для целевого сервера Oracle (TARGET)

1.     На одном из дисков, который выделяем под файлы базы данных и для хранения trail-файлов, создаем директорию OGG11MGR. Например, D:\OGG11MGR.
2.     Разархивируем файлы дистрибутива из архива в созданный каталог.
3.     В директории запускаем консоль ggsci.exe и в ней выполняем команду:
ggsci> CREATE SUBDIRS

После чего в директории D:\OGG11MGR появятся следующие каталоги: dirpcs, dirout, dirtmp, dirchk, dirdat, dirdef, dirrpt, dirsql.
4.     Из директории D:\OGG11MGR копируем файлы category.dll, ggsmsg.dll в c:\Windows\System32.
5.     Теперь зададим собственное имя для менеджера процессов OGG. Для этого запустим ggsci и выполним команду:
ggsci> EDIT PARAMS ./GLOBALS

После чего откроется текстовый редактор, где будет предложено создать новый файл, следует согласиться и прописать в файле параметр:
MGRSERVNAME OGGMGR2

OGGMGR2 – уникальное имя менеджера процессов.
Сохранить изменения в файле и закрыть его.
6.     Далее конфигурируем диспетчер процессов OGG (управляющий процесс, который создает OGG процессы, выделяет номера портов и выполняет обслуживание). Для этого вызовем консоль и выполним:
ggsci> EDIT PARAMS MGR

откроется текстовый редактор, где будет предложено создать новый файл, следует согласиться и прописать в файле параметр:
PORT 7809
DYNAMICPORTLIST 7810-7820, 7830
AUTOSTART REPLICAT *
AUTORESTART REPLICAT *, RETRIES 4, WAITMINUTES 4
STARTUPVALIDATIONDELAY 5
PURGEOLDEXTRACTS *

,где PORT – TCP\IP порт для менеджера процессов OGG, по которому он взаимодействует с удаленными процессами. Используйте порт по умолчанию, если это возможно.
DYNAMICPORTLIST – список доступных портов, по которым локальные процессы OGG могут связываться с удаленными процессами OGG на других машинах.
AUTOSTART – параметр, который позволяет автоматически запускать процессы OGG после запуска менеджера процессов.
AUTORESTART – параметр, для автоматического перезапуска процессов OGG при сбоях по сети, что может вызвать прерывание чтения транзакционных журналов. RETRIES – максимальное количество перезапусков, WAITMINUTES – время ожидания в минут, от аварии до перезапуска.
STARTUPVALIDATIONDELAY – сколько секунд ожидать, до проверки состояния процесса OGG. И если после этого времени процесс не ответил, то регистрировать ошибку.
PURGEOLDEXTRACTS – позволяет очищать обработанные файлы для того, чтобы они не потребляли много дискового места.
7.     Сохранить изменения в файле и закрыть его.
8.     Настроим менеджер процессов как служба Windows. Для этого в директории C:\OGG11MGR вызовем утилиту install c опцией addservice (добавляет менеджер в качестве сервиса с именем указанным в MGRSERVNAME параметре в файле GLOBALS, если таковой существует, или по умолчанию GGSMGR):
cmd> install addservice

После чего проверяем созданную нами (OGGMGR2) службу в списке служб Windows и настраиваем для нее автоматический запуск.
9.     Запускаем менеджер процессов (службу OGGMGR2) в списке служб или же в консоли ggsci:
ggsci> start manager

10. Инсталлируем менеджер событий (addevents — добавляет OGG события в диспетчере событий Windows):
cmd> install addevents

На этом установка и настройка OGG на целевом сервере (Oracle) завершена. Далее приступим к созданию самой схемы репликации.

C. Создание OGG-схемы репликации MySQL-to-Oracle

* все настройки выполняются из консоли ggsci.

C1. На сервере источнике (SOURCE — MySQL) заходим в консоль ggsci:
1.    Создаем группу захватчика (extract), например, с именем EXT01:
ggsci> ADD EXTRACT EXT01, TRANLOG, BEGIN NOW

TRANLOG – указывает, что в качестве источника данных будут выступать транзакционные логи.
BEGIN NOW – начать захват данных сразу после запуска extract.
2.    Создаем канал для передачи данных в файлы с названием ua:
ggsci> ADD EXTTRAIL D:\OGG11MGR\dirdat\ua, EXTRACT EXT01, MEGABYTES 10

MEGABYTES — допустимый размер файлов.
3.    Редактируем файл конфигурации извлечения данных:
ggsci> EDIT PARAM EXT01

В отрывшийся файл добавляем параметры подключения к источнику и извлечения данных, указывая нужные для репликации таблицы:
extract EXT01
cachemgr cachesize 128M
dboptions host localhost, connectionport 3306
sourcedb 2ceh_2otd_fms2_realtime_db, userid ggdirector, password **********
TRANLOGOPTIONS  ALTLOGDEST «d:\MySQL DB\mybinlogs\uapbin.index»
discardfile D:\OGG11MGR\dirrpt\EXT01.dsc, purge
exttrail D:\OGG11MGR\dirdat\ua
table 2ceh_2otd_fms2_realtime_db.CONNECTION_PLCS;
table 2ceh_2otd_fms2_realtime_db.PLC11_ALL_DATA_REALTIME;
table 2ceh_2otd_fms2_realtime_db.PLC11_FAILS_REALTIME;
table 2ceh_2otd_fms2_realtime_db.PLC12_ALL_DATA_REALTIME;
table 2ceh_2otd_fms2_realtime_db.PLC12_FAILS_REALTIME;
table 2ceh_2otd_fms2_sortirovka.data;

cachemgr cachesize – задаем размер кэша памяти,к оторый может использовать extract\pump\replicat. По умолчанию на Win XP OGG определяет его 1Гб, на Win 7 x64 = 64Гб.
dboptions host, connectionport, sourcedb, userid, password – это опции соединения с базой данных соотвественно – имя хоста, порт (на котором база работает), имя базы, логин и пароль пользователя (под которым будут читаться данные).
TRANLOGOPTIONS  ALTLOGDEST – параметр для указания расположения файла индексов бинарных логов MySQL.
Discardfile – параметр, указывающий путь к отчет ошибок при сбоях.
Table – указывает на таблицу, которая будет включена в репликацию.

Затем сохраняем изменения.
3.    Конфигурируем группу DATA PUMP EXTRACT
ggsci> ADD EXTRACT PUMP01, EXTTRAILSOURCE D:\OGG11MGR\dirdat\ua, BEGIN NOW

BEGIN NOW – начать захват данных сразу после запуска pump
4.    Создаем канал для передачи данных удаленно (на target)
ggsci> ADD RMTTRAIL D:\OGG11MGR\dirdat\ua, EXTRACT PUMP01, MEGABYTES 10

RMTTRAIL – задает полный путь трэйл-файлам, с которых осуществляется накат данных на целевую базу.
MEGABYTES — допустимый размер файлов.
5.    Редактируем файл конфигурации передачи/хранения данных:
ggsci> EDIT PARAM PUMP01

В файл добавляем параметры извлечения:
extract PUMP01
cachemgr cachesize 128M
dboptions host localhost, connectionport 3306
sourcedb 2ceh_2otd_fms2_realtime_db, userid ggdirector, password *******
discardfile D:\OGG11MGR\dirrpt\PUMP01.dsc, purge
rmthost serv01.test.int, mgrport 7809
rmttrail D:\OGG11MGR\dirdat\ua
table 2ceh_2otd_fms2_realtime_db.CONNECTION_PLCS;
table 2ceh_2otd_fms2_realtime_db.PLC11_ALL_DATA_REALTIME;
table 2ceh_2otd_fms2_realtime_db.PLC11_FAILS_REALTIME;
table 2ceh_2otd_fms2_realtime_db.PLC12_ALL_DATA_REALTIME;
table 2ceh_2otd_fms2_realtime_db.PLC12_FAILS_REALTIME;
table 2ceh_2otd_fms2_sortirovka.data;

cachemgr cachesize – задаем размер кэша памяти,к оторый может использовать extract\pump\replicat. По умолчанию на Win XP OGG определяет его 1Гб, на Win 7 x64 = 64Гб.
dboptions host, connectionport, sourcedb, userid, password – это опции соединения с базой данных соотвественно – имя хоста, порт (на котором база работает), имя базы, логин и пароль пользователя (под которым будут читаться данные).
TRANLOGOPTIONS  ALTLOGDEST – параметр для указания расположения файла индексов бинарных логов MySQL.
Discardfile – параметр, указывающий путь к отчет ошибок при сбоях.
Rmthost – имя или ip удаленного хоста.
Mgrport – порт, на котором работает удаленный агент OGG.
Table – указывает на таблицу, которая будет включена в репликацию.

Затем сохраняем изменения.

C2. Далее на целевом сервере (TARGET — Oracle) запускаем консоль ggsci:

1. Создаем группу репликации, например, REP01:
ggsci> ADD REPLICAT REP01, EXTTRAIL D:\OGG11MGR\dirdat\ua, BEGIN NOW, NODBCHECKPOINT

EXTTRAIL – для replicat значение этого параметра соответствует значению RMTTRAIL (для pump).
BEGIN NOW — начать захват данных сразу после запуска rep01.
NODBCHECKPOINT – не будет хранить контрольную точку в целевой базе данных.

2. Редактируем файл конфигурации репликации
ggsci> EDIT PARAM REP01

В файл добавляем параметры подключения к базе Oracle и применения полученных данных:
replicat REP01
cachemgr cachesize 128M
SETENV (NLS_LANG=»AMERICAN_AMERICA.CL8MSWIN1251″)
discardfile D:\OGG11MGR\dirrpt\REP01.dsc, purge
assumetargetdefs
userid ggDirector@ORCL, password ********
map 2ceh_2otd_fms2_realtime_db.CONNECTION_PLCS, target UAPOGG.connection_plcs, ignoredeletes, ignoretruncates;
map 2ceh_2otd_fms2_realtime_db.PLC11_ALL_DATA_REALTIME, target UAPOGG.plc11_all_data_realtime, ignoredeletes, ignoretruncates;
map 2ceh_2otd_fms2_realtime_db.PLC11_FAILS_REALTIME, target UAPOGG.plc11_fails_realtime, ignoredeletes, ignoretruncates;
map 2ceh_2otd_fms2_realtime_db.PLC12_ALL_DATA_REALTIME, target UAPOGG.plc12_all_data_realtime, ignoredeletes, ignoretruncates;
map 2ceh_2otd_fms2_realtime_db.PLC12_FAILS_REALTIME, target UAPOGG.plc12_fails_realtime, ignoredeletes, ignoretruncates;
map 2ceh_2otd_fms2_sortirovka.data, target UAPOGG.sortirovka_data, ignoredeletes, ignoretruncates;

cachemgr cachesize – задаем размер кэша памяти, который может использовать extract\pump\replicat. По умолчанию на Win XP OGG определяет его 1Гб, на Win 7 x64 = 64Гб.
dboptions host, connectionport, sourcedb, userid, password – это опции соединения с базой данных соотвественно – имя хоста, порт (на котором база работает), имя базы, логин и пароль пользователя (под которым будут читаться данные).
Discardfile – параметр, указывающий путь к отчет ошибок при сбоях.
Assumetargetdefs – указывает на то, что структура таблиц источника и целевой базы схожи.
SETENV  — задаем переменную окружения Windows, например для кодировки NLS_LANG.
Map, target – указывает какой таблице источника соответствует таблицу целевой базы.

Сохраняем изменения.

C3. После того, как элементы репликации созданы, запустим их в следующем порядке:
На сервере источнике:
ggsci> start EXT01
ggsci> start PUMP01

На целевом сервере:
ggsci> start REP01

Проверим с помощью команды состояние элементов репликации:
ggsci> info <>

<> — имя элемента репликации, например info EXT01

Если все в порядке (все элементы в состоянии Running), тогда ждем изменений в реплицируемой таблице, и смотрим на целевой базе, как туда записались данные. Иначе смотрим ошибки в файле ggserr.log (корневая папка) или файлах .rpt в каталоге D:\OGG11MGR\dirrpt.

MS PowerPoint — как подсветить объект при наведении курсора мыши

В MS PowerPoint нет стандартной подсветки объекта-фигуры (SHAPE) при наведении на него курсором мыши. Но это возможно реализовать при помощи макроса (macros). Для этого необходимо в MS PowerPoint перейти в раздел Вид, выбрать пункт Макросы, задать имя новому макросу и нажать Создать. Откроется Module1, куда размещаем следующий код:

Sub FLASHLIGHT(oShp As Shape)
Dim oSlide As Slide
' Здесь я задал первый слайд, поскольку мои объекты расположены на нем
Set oSlide = Application.ActivePresentation.Slides(1)
vName = oShp.Name

' Проверяем видимость линий объекта
vis = oSlide.Shapes.Item(vName).Line.Visible
' Условие, по которому включаем или выключаем подветку объекта
If vis = 0 Then
' Включаем видимость линий, изменяем толщину их, изменяем цвет
With oSlide.Shapes.Item(vName)
.Line.Visible = msoTrue
.Line.Weight = 5
.Line.ForeColor.RGB = RGB(255, 255, 50)
End With

Else
' В качестве отключения подсветки, я просто делаю линии невидимыми 
' (но можно также менять их толщину и цвет, если это надо)
With oSlide.Shapes.Item(vName)
.Line.Visible = msoFalse
End With
End If

End Sub

После того, как макрос создан, его нужно назначить объекту на слайде (у меня первый слайд) указанном в скрипте. Для этого выделяем объект-фигуру на слайде, переходим в раздел Вставка и нажимаем пункт Действие. В открывшемся окне «Настройка действия» переходим на закладку «По наведению указателя мыши», ставим галочку Запуск макроса и со списка выбираем наш макрос (FLASHLIGHT).
Теперь проверяем как работает подсветка в режиме презентации, жмем F5 и наводим на наш объект-фигуру. Убрать подстветку возможно только при повторном наведении на объект.