Auditer les bases Oracle du Cloud via le repository du Cloud Control - Audit databases via the Cloud Control repository
Introduction
Savez-vous qu'il existe pour chaque produit majeur Oracle un repository? Par repository j'entends un ensemble de vues et de tables du dictionnaire de données Oracle qui permettent d'interroger soit un produit spécifique soit une fonctionnalité. Pour AWR, ces vues commencent par DBA_HIST_*** et il y en a près de 400, si vous décidez d'utiliser un catalogue RMAN, vous aurez là encore un repository avec des centaines de vue, commençant par RC_***.
Le Cloud Control a aussi un repository de centaines de vues, commençant par MGMT_***. A ma grande surprise il y a très peu de sites ou de blogs qui en parlent; j'ai tellement galéré pour trouver ces infos et construire les bons SELECTs qu'un article s'imposait pour partager les infos.
Par exemple voici deux recherches effectuées le 19/10/2020 sur Google : 83 résultats pour une vue très utile du repository Cloud Control et 258 000 pour la même vue mais concernant les users d'une base... incroyable! Bon, il est vrai que cette vue MGMT$DB_USERS n'est même pas documentée par Oracle mais quand même...
- recherche sur "MGMT$DB_USERS" : environ 83 résultats
- recherche sur "DBA_USERS" : environ 258 000 résultats
Si je prends une vue documentée, comme MGMT$TARGET, il n'y a que 3940 résultats (si j'utilise les guillemets).
L'intérêt de ce repository est multiple :
- centraliser en un endroit, des infos de N entités différentes : par exemple, je peux en un seul SELECT connaître le nombre de users qui sont répartis sur 100 bases; sans le repository, je dois me connecter à ces 100 bases pour avoir la même info
- interroger des entités qui ne sont pas des bases de données mais qui sont quand même monitorées par le Cloud Control : serveur Unix, Listener etc etc
- ...
L'objet de ce post est donc de voir comment utiliser ce repository pour avoir un état des lieux voir auditer les hosts et bases gérées par le Cloud Control.
ATTENTION : dans ces vues ne sont remontées qu'une partie des informations des bases Oracle, celles utiles pour les monitorer à partir du Cloud; par exemple, il n'y a aucune vue équivalente à DBA_OBJECTS ou à V$SQLAREA car ces infos n'ont, selon Oracle, de sens que depuis la base proprement dite et n'ont pas d'utilité quand on parle de gérer un Cloud.
Dernier point, ces vues appartiennent au schéma SYSMAN, pas à SYS.
Un lien très utile ici, à savoir une liste (qui je pense est incomplète) de ces vues : https://docs.oracle.com/cd/cloud-control-13.3/EMVWS/EMVWS.pdf
Points d'attention
N/A.
Base de tests
Un Cloud Control 12c, une base Oracle 11g hébergeant le repository et N bases de données, de la V9 à la V12.
Exemples
============================================================================================
Les vues du repository Cloud Control
============================================================================================
ATTENTION : je masque les noms des vraies bases pour des raisons de discrétion donc ne soyez pas surpris si les noms sont incohérents d'un SELECT à l'autre.
La base de données hébergeant le repository du Cloud Control est une 11g.
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
Il y a 405 vues commençant par MGMT (pour Management certainement) : ce sont celles-là qui nous intéressent.
SQL> select count(*) from dba_objects where object_name like 'MGMT$%' and object_type = 'VIEW';
COUNT(*)
----------
405
Répartition des vues par catégories
Je regroupe par chaîne de caractères avant le premier underscore. Le repository Cloud Control peut se diviser en 69 catégories de vues : je vous laisse imaginer ce que cela recouvre.
SQL> select substr(object_name, 1, instr(object_name, '_') -1) AS "Catégorie de vues", count(*) from dba_objects where object_name like 'MGMT$%' and object_type = 'VIEW' group by (substr(object_name, 1, instr(object_name, '_') -1)) order by 1;
Catégorie de vues COUNT(*)
-------------------- ----------
MGMT$ADR 1
MGMT$ALERT 4
MGMT$APPL 1
MGMT$APPLIED 2
MGMT$ARU 9
MGMT$AUDIT 1
MGMT$AVAIL 1
MGMT$AVAILABILITY 2
MGMT$BLACKOUT 1
MGMT$CCC 4
MGMT$CCS 4
MGMT$CLUSTER 1
MGMT$CM 3
MGMT$COMPLIANCE 3
MGMT$COMPOSITE 1
MGMT$CONFIG 1
MGMT$CONNECTOR 1
MGMT$CPF 4
MGMT$CS 22
MGMT$CSA 14
MGMT$DB 33
MGMT$DELTA 15
MGMT$DIAGNOSTIC 2
MGMT$ECM 3
MGMT$EM 1
MGMT$ESA 23
MGMT$ESM 5
MGMT$GROUP 3
MGMT$GRP 3
MGMT$HA 11
MGMT$HOMES 1
MGMT$HOSTPATCH 4
MGMT$HW 4
MGMT$IAS 12
MGMT$INTERFACE 1
MGMT$JOB 5
MGMT$J2EE 1
MGMT$J2EEAPP 8
MGMT$METRIC 12
MGMT$MISSING 2
MGMT$MS 2
MGMT$OC4J 16
MGMT$OH 16
MGMT$OHS 6
MGMT$ORACLE 4
MGMT$OS 11
MGMT$OSB 1
MGMT$PA 6
MGMT$PATCH 1
MGMT$POLICY 7
MGMT$PR 4
MGMT$RAC 2
MGMT$RACDB 1
MGMT$RECOM 1
MGMT$SERVICETAG 2
MGMT$SOFTWARE 12
MGMT$STATSPACK 1
MGMT$STEP 4
MGMT$STORAGE 8
MGMT$SWLIB 1
MGMT$TARGET 16
MGMT$TEMPLATE 3
MGMT$TXN 3
MGMT$UNPATCHABLE 1
MGMT$VIEW 1
MGMT$WEBCACHE 11
MGMT$WEBLOGIC 25
MGMT$WEBSPHERE 2
8
69 ligne(s) s▒lectionn▒e(s).
Vues ayant des infos sur les bases targets
Ces vues ont DB_ dans leur nom.
SQL> select object_name from dba_objects where object_name like 'MGMT$DB%' and object_type = 'VIEW' order by 1;
OBJECT_NAME
---------------------------------------------------------------
MGMT$DB_ASSOC_DATA
MGMT$DB_AUTOTASK_CLIENT
MGMT$DB_CONTROLFILES
MGMT$DB_CONTROLFILES_ALL
MGMT$DB_CPU_USAGE
MGMT$DB_DATAFILES
MGMT$DB_DATAFILES_ALL
MGMT$DB_DBNINSTANCEINFO
MGMT$DB_DBNINSTANCEINFO_ALL
MGMT$DB_FEATURE_USAGE
MGMT$DB_FEATUREUSAGE
MGMT$DB_HA_BACKUP_REPORT
MGMT$DB_HA_CONFIG
MGMT$DB_HIGHWATERMARK
MGMT$DB_INIT_PARAMS
MGMT$DB_INIT_PARAMS_ALL
MGMT$DB_INST_ONLY_INFO
MGMT$DB_INVOBJ_CNT
MGMT$DB_LICENSE
MGMT$DB_LICENSE_ALL
MGMT$DB_OPTIONS
MGMT$DB_OPTIONS_ALL
MGMT$DB_REDOLOGS
MGMT$DB_REDOLOGS_ALL
MGMT$DB_ROLLBACK_SEGS
MGMT$DB_ROLLBACK_SEGS_ALL
MGMT$DB_SCHEDULER_JOBS
MGMT$DB_SERVICES_ECM
MGMT$DB_SGA
MGMT$DB_SGA_ALL
MGMT$DB_TABLESPACES
MGMT$DB_TABLESPACES_ALL
MGMT$DB_USERS
33 ligne(s) s▒lectionn▒e(s).
============================================================================================
Auditer les bases Oracle répertoriées dans le Cloud Control
============================================================================================
Pour auditer les bases Oracle, nous utiliserons les vues suivantes en filtrant par TARGET_TYPE = 'oracle_database' :
- MGMT$TARGET
- MGMT$AVAILABILITY_CURRENT
Répartition des bases Oracle par leur version
Quelques bases Oracle 9 mais il y a peu d’options dans le Cloud Control pour administrer cette version d’Oracle.
SQL> select type_qualifier1, count(*) from mgmt$target where TARGET_TYPE = 'oracle_database' group by type_qualifier1 order by 2 DESC;
TYPE_QUALIFIER1 COUNT(*)
---------------------------------------------------------------- ----------
11gR202 63
10gR204 27
9iR2 14
5
Répartition des bases Oracle par leur statut
SQL> select AVAILABILITY_STATUS, count(*) from MGMT$AVAILABILITY_CURRENT where target_type = 'oracle_database' group by AVAILABILITY_STATUS order by 2 DESC;
AVAILABILITY_STATUS COUNT(*)
-------------------- ----------
Unreachable 77
Target Up 21
Target Down 5
Pending/Unknown 4
Metric Error 2
Répartition des bases Oracle par statut et nom
SQL> select AVAILABILITY_STATUS, target_name from MGMT$AVAILABILITY_CURRENT where target_type = 'oracle_database' and AVAILABILITY_STATUS <> 'Target Up' order by 1, 2;
AVAILABILITY_ST TARGET_NAME
--------------- ------------------------------
Metric Error BASEINFO
…
Pending/Unknown BASERH
Target Down DATADEV
…
Unreachable DWDWSP
…
89 ligne(s) s▒lectionn▒e(s).
Répartition des bases Oracle par le statut ‘Metric Error’
SQL> select T.target_name, T.type_qualifier1, T.host_name, A.AVAILABILITY_STATUS from SYSMAN.MGMT$TARGET T, SYSMAN.MGMT$AVAILABILITY_CURRENT A where A.target_name = T.target_name and A.AVAILABILITY_STATUS = 'Metric Error' order by 1;
TARGET_NAME TYPE_QUALI HOST_NAME AVAILABILITY_STATUS
------------------------------ ---------- ------------------------------ --------------------
BASEINFO 10gR204 li11grde.test01.com Metric Error
BASESOC 10gR204 Metric Error
Répartition des bases Oracle par serveur
SQL> SELECT HOST_NAME, count(*) from SYSMAN.MGMT$TARGET where target_type = 'oracle_database' group by rollup(host_name) order by 2 DESC;
HOST_NAME COUNT(*)
------------------------------ ----------
109
oraoem_az.test01.com 31
li10ora11t.test01.com 12
li12rht.test01.com 10
li11ora11p.test01.com 9
li12fit.test01.com 9
li11ora10p.test01.com 5
li11edop.test01.com 4
li10ora12t.test01.com 4
li10dwht.test01.com 4
li13rhp.test01.com 4
li13fip.test01.com 4
li11dwhp.test01.com 3
li11ora12p.test01.com 3
li11infp.test01.com 3
li11clmp.test01.com 2
li12rhi.test01.com 1
li13fii.test01.com 1
18 ligne(s) s▒lectionn▒e(s).
Répartition des bases Oracle par serveur et par version de la base Oracle
SQL> break on HOST_NAME skip 1
SQL> SELECT HOST_NAME, type_qualifier1, count(*) from SYSMAN.MGMT$TARGET where target_type = 'oracle_database' group by host_name, type_qualifier1 order by HOST_NAME, 3 DESC ;
HOST_NAME TYPE_QUALI COUNT(*)
------------------------------ ---------- ----------
oraoem_az.test01.com 10gR204 16
9iR2 14
11gR202 1
li10dwht.test01.com 11gR202 4
li10ora11t.test01.com 11gR202 12
li10ora12t.test01.com 11gR202 4
li11clmp.test01.com 11gR202 2
li11dwhp.test01.com 11gR202 3
li11edop.test01.com 10gR204 4
li13fii.test01.com 11gR202 1
li13fip.test01.com 11gR202 4
li13rhp.test01.com 11gR202 4
...
21 ligne(s) s▒lectionn▒e(s).
============================================================================================
Auditer les agents répertoriés dans le Cloud Control
============================================================================================
Pour auditer les agents Cloud Control, nous utiliserons les vues suivantes en filtrant par : TARGET_TYPE = 'oracle_emd'
- MGMT$AGENTS_MONITORING_TARGETS (inconnue en 11g)
- MGMT$TARGET_PROPERTIES
- MGMT$AVAILABILITY_CURRENT
- MGMT$TARGET
Liste des agents
La vue MGMT$AGENTS_MONITORING_TARGETS n’existe pas en Oracle 11… il faut utiliser mgmt$target_properties.
SQL> select agent_name, AGENT_TYPE from MGMT$AGENTS_MONITORING_TARGETS order by 1;
En Oracle 11.
SQL> select distinct TARGET_NAME from mgmt$target_properties where TARGET_TYPE = 'oracle_emd' order by 1 ;
TARGET_NAME
----------------------------
oraoem_az.test01.com:3872
ux08hrt:3872
li10clmb.test01.com:3872
li10dwht.test01.com:3872
...
li11ora12p.test01.com:3872
li12fit.test01.com:3872
li12rhi.test01.com:3872
li12rht.test01.com:3872
li13fii.test01.com:3872
li13fip.test01.com:3872
li13rhp.test01.com:3872
21 ligne(s) s▒lectionn▒e(s).
Liste des Agents avec un statut différent de ‘Target Up’
SQL> select AVAILABILITY_STATUS, target_name from MGMT$AVAILABILITY_CURRENT where target_type = 'oracle_emd' and AVAILABILITY_STATUS <> 'Target Up' order by 1, 2;
AVAILABILITY_ST TARGET_NAME
--------------- ------------------------------
Unreachable oraoem_az.test01.com:3872
Unreachable ux08hrt:3872
Unreachable li10clmb.test01.com:3872
Unreachable li10edot.test01.com:3872
Unreachable li10ora11t.test01.com:3872
Unreachable li11clmp.test01.com:3872
Unreachable li11dwhp.test01.com:3872
Unreachable li11edop.test01.com:3872
Unreachable li11ora10p.test01.com:3872
Unreachable li11ora11p.test01.com:3872
Unreachable li12rhi.test01.com:3872
Unreachable li12rht.test01.com:3872
Unreachable li13fip.test01.com:3872
13 ligne(s) s▒lectionn▒e(s).
Liste des bases Oracle en erreur avec leur agent
ATTENTION : on avait 89 bases en erreur sur 109 ; ici on a 119 lignes mais plusieurs bases sont présentes deux fois donc on a bien 89 bases dont 30 présentes deux fois.
SQL> select distinct T.target_name AS "Base", A.AVAILABILITY_STATUS AS "Statut base", nvl(substr(T.EMD_URL, 9, length(T.EMD_URL) -10), '***** Agent inconnu *****') AS "Agent"
from MGMT$TARGET T,
(
select target_name, AVAILABILITY_STATUS from MGMT$AVAILABILITY_CURRENT where target_type = 'oracle_database' and AVAILABILITY_STATUS <> 'Target Up'
) A
where T.target_name = A.target_name
order by T.target_name;
Base Statut base Agent
------------------------------ --------------- -----------------------------------
DWAIRSP Unreachable oraoem_az.test01.com:3872/emd/mai
DWAIRSP Unreachable ***** Agent inconnu *****
DWAIRST Unreachable oraoem_az.test01.com:3872/emd/mai
DWAIRST Unreachable ***** Agent inconnu *****
DWSHERPAP Unreachable li11ora11p.test01.com:3872/emd/mai
DWSHERPAT Unreachable li10ora11t.test01.com:3872/emd/mai
...
119 ligne(s) s▒lectionn▒e(s).
============================================================================================
Auditer les users répertoriés dans le Cloud Control
============================================================================================
Pour auditer les users des bases répertoriées dans le Cloud Control, nous utiliserons la vue suivante :
- MGMT$DB_USERS
Attention, ce qui nous intéresse ce ne sont pas les users de la base gérant le Cloud Control mais bien les users des N bases Oracles qui sont répertoriées dans le Cloud Control : ce n'est pas la même chose!
Nombre total de users
SQL> select 'Users actifs : ' AS "Statut", count(*) AS "Nb users"
from MGMT$DB_USERS
where EXPIRY_DATE is null
UNION
select 'Users expirés : ' AS "Statut", count(*) AS "Nb users"
from mgmt$db_users
where EXPIRY_DATE is not null
UNION
SELECT 'Nb Users : ' AS "Statut", count(*) AS "Nb users"
from mgmt$db_users
order by "Nb users" DESC;
Statut Nb users
------------------- ----------
Nb Users : 3070
Users actifs : 2283
Users expirés : 787
Répartition des users par année de création
SQL> select extract(year from CREATED), count(*) from mgmt$db_users group by extract(year from CREATED) order by 1;
EXTRACT(YEARFROMCREATED) COUNT(*)
------------------------ ----------
2006 35
2007 4
2008 71
2009 103
2010 117
2011 228
2012 18
2013 316
2014 491
2015 734
2016 131
2017 613
2018 133
2019 22
2020 54
15 ligne(s) s▒lectionn▒e(s).
Répartition des users par host et par base
SQL> break on HOST_NAME skip 1
SQL> select HOST_NAME, TARGET_NAME, count(*) from mgmt$db_users group by rollup(HOST_NAME, TARGET_NAME) order by HOST_NAME, TARGET_NAME;
HOST_NAME TARGET_NAME COUNT(*)
------------------------------ ------------ ----------
li10dwht.test01.com PRTEST 30
PRHDEV 23
PRHQLIF 23
PRHTEST 23
99
li11clmp.test01.com CTM9TDEV 20
EM9TDEV 20
40
...
3070
108 ligne(s) s▒lectionn▒e(s).
Répartition des users par host et par statut
SQL> break on host_name skip 2
SQL> compute SUM label TOTAL of "Nb users" on host_name
SQL> select HOST_NAME, 'Nb users actifs : ', count(*) AS "Nb users"
from mgmt$db_users
where EXPIRY_DATE is not null
group by HOST_NAME
UNION
select HOST_NAME, 'Nb users expirés : ', count(*) AS "Nb users"
from mgmt$db_users
where EXPIRY_DATE is null
group by HOST_NAME
order by host_name;
HOST_NAME 'NBUSERSACTIFS:' Nb users
------------------------------ ---------------------- ----------
oraoem_az.test01.com Nb users actifs : 7
Nb users expirés : 441
****************************** ----------
TOTAL 448
li10dwht.test01.com Nb users actifs : 20
Nb users expirés : 79
****************************** ----------
TOTAL 99
...
32 ligne(s) s▒lectionn▒e(s).
Répartition des users par host, base, date de création et date d’expiration
SQL> select HOST_NAME, TARGET_NAME, USERNAME, CREATED, EXPIRY_DATE from mgmt$db_users order by HOST_NAME, TARGET_NAME, USERNAME;
HOST_NAME TARGET_NAME USERNAME CREATED EXPIRY_D
-------------------------------- -------- ---------------------------------------------
li13fip.test01.com FADWT INT_CG57 23/11/15
li13fip.test01.com FADWT INTERFACE 23/11/15
li13fip.test01.com FADWT INTDEV 23/11/15
li13fip.test01.com FADWT LO 23/11/15
li13fip.test01.com FADWT MAJ_CONFIG 23/11/15
li13fip.test01.com FADWT NAGIOS 23/11/15
li13fip.test01.com FADWT OG 23/11/15
li13fip.test01.com FADWT OP 23/11/15
li13fip.test01.com FADWT ORACLE_OCM 23/11/15 23/11/15
li13fip.test01.com FADWT OUTLN 23/11/15
li13fip.test01.com FADWT PA 23/11/15
...
============================================================================================
Auditer les features, options et packages utilisés dans les bases répertoriés dans le Cloud Control
============================================================================================
Pour identifier quelles options payantes et non sont utilisées, nous interrogerons les vues suivantes :
- MGMT$DB_OPTIONS
- MGMT$DB_FEATUREUSAGE
Répartition des options utilisées par bases
"The MGMT$DB_OPTIONS view displays whether or not the option is currently LOADED and ACTIVE, or either the option does not exist or is NOT LOADED orINACTIVE. Options settings are collected by checking user name and status in thesys.dba_users and dba_registry tables."
SQL> select HOST_NAME, TARGET_NAME, NAME from MGMT$DB_OPTIONS where SELECTED = 'TRUE' order by 1, 2 ;
HOST_NAME TARGET_NAME NAME
----------------------------------------------------------------------
…
li13rhp.test01.com FADWTA Advanced Analytics
li13rhp.test01.com FADWTA Advanced Compression
li13rhp.test01.com FADWTA Advanced Index Compression
li13rhp.test01.com FADWTA Advanced replication
li13rhp.test01.com FADWTA Application Role
li13rhp.test01.com FADWTA Automatic Data Optimization
li13rhp.test01.com FADWTA Backup Encryption
li13rhp.test01.com FADWTA Basic Compression
li13rhp.test01.com FADWTA Bit-mapped indexes
li13rhp.test01.com FADWTA Block Change Tracking
…
Liste des options utilisées par total
SQL> break on NAME
SQL> col NAME for A50
SQL> select NAME, SELECTED, count(*) from MGMT$DB_OPTIONS group by NAME, SELECTED order by 1, 2 ;
NAME SELEC COUNT(*)
-------------------------------------------------- ----- ----------
Active Data Guard FALSE 51
TRUE 12
Adaptive Execution Plans FALSE 9
TRUE 11
Advanced Analytics FALSE 9
TRUE 11
Advanced Compression FALSE 51
TRUE 12
...
184 ligne(s) s▒lectionn▒e(s).
Répartition des options utilisées par bases
SQL> select database_name, DETECTED_USAGES from MGMT$DB_FEATUREUSAGE where name = 'Advanced Index Compression' order by 1;
DATABASE_NAME DETECTED_USAGES
------------------------------ ---------------
CTJJDEV 0
JJ9PROD 0
MAELDDD 0
...
30 ligne(s) s▒lectionn▒e(s).
Répartition des options par utilisation
SQL> select name, min(DETECTED_USAGES), max(DETECTED_USAGES) from MGMT$DB_FEATUREUSAGE group by name order by name;
NAME MIN(DETECTED_USAGES) MAX(DETECTED_USAGES)
------------------------------------------------------- -------------------- --------------------
Active Data Guard - Real-Time Query on Physical Standby 0 0
Adaptive Plans 0 143
ADDM 0 1
Advanced Index Compression 0 0
Advanced Replication 0 0
Advanced Security 0 0
...
248 ligne(s) s▒lectionn▒e(s).
Répartition des options utilisées par base
SQL> select database_name, name, DETECTED_USAGES from MGMT$DB_FEATUREUSAGE where DETECTED_USAGES > 0 order by database_name, name;
DATABASE_NAME NAME DETECTED_USAGES
-------------------------------------------------------------------------------------------
…
SHERPII Automatic SGA Tuning 244
SHERPII Automatic SQL Execution Memory 244
SHERPII Automatic Undo Management 244
SHERPII Character Set 244
…
============================================================================================
Autres audits
============================================================================================
Pour ces autres audits, nous utiliserons les vues suivantes :
- MGMT$TARGET
- MGMT$AVAILABILITY_HISTORY
Répartition des targets par type
SQL> select TARGET_TYPE, count(*) from mgmt$target group by TARGET_TYPE order by 1;
TARGET_TYPE COUNT(*)
---------------------------------------------------------------- ----------
composite 4
host 21
j2ee_application 3
metadata_repository 2
oracle_apache 1
oracle_apm 1
oracle_beacon 1
oracle_database 109
oracle_dbsys 109
oracle_emd 21
oracle_emrep 1
oracle_em_service 2
oracle_home 38
oracle_ias_farm 1
oracle_listener 10
oracle_oms 1
oracle_oms_console 1
oracle_oms_pbs 1
weblogic_domain 1
weblogic_j2eeserver 2
20 ligne(s) selectionnee(s).
Identifier les metrics les plus anciennes et voir si une purge est nécessaire
SQL> select to_char(START_TIMESTAMP, 'DD/MM/YYYY HH24 :MI :SS'), AVAILABILITY_STATUS from MGMT$AVAILABILITY_HISTORY where target_type = 'oracle_database' and target_name = 'GFFSXX' order by START_TIMESTAMP;
TO_CHAR(START_TIMESTA AVAILABILITY_STATUS
--------------------- --------------------
08/09/2014 00 :00 :00 Pending/Unknown
10/10/2014 10 :49 :23 Target Up
10/10/2014 19 :05 :53 Target Down
11/10/2014 06 :12 :31 Target Up
11/10/2014 19 :05 :50 Target Down
12/10/2014 06 :12 :03 Target Up
13/10/2014 19 :05 :58 Target Down