Information Model
Database Schema
SCADA_POINTS Database Table
The SCADA_POINTS table is an optional table that can either be populated via the model build process or via a project specific mechanism. It can be used to populate the scada_measurements_st and/or scada_controls_st tables via the scadapop executable.
Column
Data Type
Description
H_CLS
NUMBER
Handle instance class.
H_IDX
INTEGER
Handle instance index.
SCADA_NAME
VARCHAR(32)
SCADA system name.
RTU_ALIAS
VARCHAR(64)
SCADA Remote Terminal Unit for measurements.
RTI_ALIAS
VARCHAR2(128)
SCADA point (base) name - unique
TEMPLET
VARCHAR2(32)
Template name used for scadapop exception processing
PARTITION
INTEGER
Model partition for this object.
BIRTH
DATE
Date object activated into the model.
BIRTH_PATCH
INTEGER
Model patch which activated with this object.
DEATH
DATE
Date object de-activated from the model.
DEATH_PATCH
INTEGER
Model patch which de-activated this object.
ACTIVE
VARCHAR2(1)
Active flag (Y/N).
SUBSTATION
VARCHAR2(100)
Nominal substation for this device.
FEEDER
VARCHAR2(100)
Nominal feeder for this device.
The schema for this table is defined in the file nms_retain_scada.sql.
SCADA_IDS Database Table
The SCADA_IDS table identifies a specific SCADA name with a numeric ID that is used for RTAdapter (and other) SCADA adapter configuration.
Column
Data Type
Description
ID
NUMBER
Numeric identifier for each "scada source" that we want RTI to process.
SCADA_NAME
VARCHAR(32)
Name for the scada source
ADAPTER_TYPE
VARCHAR(32)
Adapter type associated with this SCADA. Valid values are ICCP, MULTISPEAK, and RTADAPTER.
ACTIVE
VARCHAR(1)
'Y'/'N' - adapter is active or not.
The script, OPAL_scada.sql, populates generic SCADA sources for the OPAL model. A source is any SCADA system that can provide information to the adapter. There could be one SCADA source defined for each of multiple SCADA vendors, or a utility may choose to divide their territory into multiple regions, with each region acting as a separate SCADA source. Each SCADA source must have a name as well as a unique integer ID. There can only be one instance of the database polling RTAdapter (RTDBAdapter) running for a given instance of NMS.
SCADA_SYNONYMS Database Table
The SCADA_SYNONYMS table contains all the synonyms for attribute name or values (for example, KV_3, AMP_A, and CLOSE) used by RTAdapter in processing SCADA data input.
Column
Data Type
Description
Id
INTEGER
Unique integer - primary key.
scada_id
INTEGER
NOT NULL
Matches scada_ids.id
keyword
VARCHAR2(32)
NOT NULL
SCADA unique attribute keyword string from SCADA system. Generally maps to an NMS attribute name but this is not required unless the scada_synonyms.attribute_alias field is left blank.
If the scada_synonyms.attribute_alias field is left blank than the scada_synonyms.keyword field must map to a valid NMS attribute name - from attributes.name (table.column).
For conditions this is unique name used by external SCADA to identify the condition class and condition status (NOTE, TAG_RED, TAG_BLUE, etc). NMS condition class must be defined in scada_synonyms.attribute_alias.
value
VARCHAR2(32)
For digitals: Customer value associated with keyword that indicates digital state (OPEN, CLOSED, 0, 1).
For analogs: This field can be null.
For conditions: Must be "add", "rem", "syn" or "end". The "syn" and "end" values are used for synchronization requests.
process_type
VARCHAR2(5)
For digitals: 'D'
For analogs: 'A' - If the corresponding scada_synonyms.int_value is >0, then that value will be used as an absolute value to filter incoming analogs.
For analogs: 'A_PCT' indicates the corresponding scada_synoynms.int_value should be interpreted as a "percentage change" filter for incoming analogs. For a 1% filter int_value=0.01, for a 0.5% filter int_value=0.005, etc.
For conditions: 'C'
attribute_alias
VARCHAR2(20)
Attribute name from NMS attributes table.
For digitals: The only way to get a model object to change status is to set this value to 'Status'. All other values are for digital attributes.
For analogs: This field is optional and can be set to '' (empty string). If this value is '' (blank), the scada_synonyms.keyword is used as the NMS attribute name.
For conditions: This field is the condition class name (tag, note, and so on).
status_value
VARCHAR2(20)
Numeric or string from scada_states.alias table.
For digital status: This field is generally set to DEVICE_CLOSE, DEVICE_OPEN (defined in scada_states table), 0 (open), 1 (close).
For analogs: This field is NULL.
For conditions: This field is either a numeric condition status or a string that maps to a numeric condition status via the scada_states table. If it is a string it MUST start with an alpha (non-numeric) character.
int_value
NUMBER
For digitals: not used.
For analogs: If process_type is 'A', then int_value is used as an absolute value to filter incoming analogs. If process_type is 'A_PCT', then int_value is used as a "percentage" filter value. An int_value=0.01 would filter incoming A_PCT analog measurements by 1%.
For conditions: not used.
stale
CLOB
For digitals: not used.
For analogs: stale is a JSON value that specifies optional stale processing values on a per attribute and, optionally, per device class basis.
Example JSON stale configuration:
'{"default" : "30",
"breaker" : "45"}'
The example configuration (for a given attribute) sets default stale processing at 30 seconds. If a corresponding analog measurement comes in on a "breaker" class device, it will use 45 seconds for a stale processing threshold; otherwise (for any other class of device), it will default to 30 seconds. As many classes as desired can be added in this manner.
 
Example stale configuration can be found in the $NMS_SQL_FILES/OPAL_scada.sql file and/or the $NMS_BASE/templates/rtadapter.dat.template file.
For each implementation, define the customer specific <project>_scada.sql file to specify the required synonyms.
SCADA_STATES Database Table
This table exists to allow for entering a character string in place of a more obscure integer. For example, 'DEVICE_CLOSE' instead of 2, ABC instead of 7 for phases, and so forth.
 
Column
Data Type
Description
SCADA_NAME
VARCHAR2(32)
Name of scada from scada_ids.scada_name
ALIAS
VARCHAR2(32)
Alias to map to integer
VALUE
INTEGER
Integer value to map to
nms_scada.sql includes examples of commonly-used entries.
SCADA_DIGITAL_IN Database Table
The SCADA_DIGITAL_IN table can be used by RTAdapter to queue incoming digital SCADA updates. RTAdapter, if configured to do so, will periodically poll this table and check for unprocessed rows (status='N'). If unprocessed rows are found, RTAdapter will attempt to update the model according to data provided. Note that the database sequence scada_digital_in_sequence must be set up properly to create the primary key (SCADA_DIGITAL_IN.ID) value on insert.
If the -retain option is not used, records are always deleted after they are processed and the only record of any failure is in the RTAdapter log itself. It is generally recommended that production systems run this way (without the -retain option).
If the ‑retain option is used all rows are retained in the SCADA_DIGITAL_IN table. Processed records have SCADA_DIGITAL_IN.STATUS column set to "S" after they are processed. If an error occurs the SCADA_DIGITAL_IN.STATUS column will be set to "E," and the SCADA_DIGITAL_IN.ERROR_CODE and SCADA_DIGITAL_IN.ERROR_DESCRIPTION columns should be populated with some indication of the problem.
Note that use of the ‑retain option is not generally intended as a production option; rather it is a temporary mechanism to help validate and test the interface. With the ‑retain option, a busy (noisy) SCADA system can cause the SCADA_DIGITAL_IN table to grow without bound. In this case, the size of the SCADA_DIGITAL_IN table must in turn be managed by the customer, which creates a maintenance issue.
If SCADA_DIGITAL_IN.ATTRIBUTE is a numeric, it must match a valid NMS attribute number (for example, 0 is topology status). If non-numeric, both the SCADA_DIGITAL_IN.ATTRIBUTE and SCADA_DIGITAL_IN.OPERATION values must be properly defined in the SCADA_SYNONYMS and SCADA_STATES tables.
One of two methods can be used to identify a specific NMS attribute measurement.
1. The rti_alias values in the DIGITAL_MEASUREMENTS table must uniquely identify each measurement, you do not need to specify an attribute on input. This is the preferred way to operate.
2. A valid NMS handle AND attribute number - in this case the alias can be left blank. This is not often used as it requires the external system to know NMS handles and attribute numbers. This mechanism is for backward compatibility only and is not recommended for new projects.
Column
Data Type
Description
ID
VARCHAR2(32)
scada_digital_in sequence generated pk
H_CLS
NUMBER(38,0)
NMS class of device – can be null if alias is not null.
H_IDX
NUMBER(38,0)
NMS index of device – can be null if alias is not null.
ALIAS
VARCHAR2(128)
SCADA point alias - can be null if h_cls and h_idx are NOT null. If not null it is suggested this value (alone) uniquely identify a measurement.
ATTRIBUTE
VARCHAR(32)
SCADA attribute. If numeric, it must match a valid NMS attribute number. If it is a string, it must map to a valid NMS attribute number via the scada_synonyms table.
If the ALIAS above is unique it is NOT necessary to include an attribute value on input.
PHASES
VARCHAR(4)
Intended phases for operation. If numeric, must be between 1 and 7 (where 1 is A and 7 is ABC). If a string must map to a valid numeric via the scada_states table.
OPERATION
VARCHAR(32)
Operation. If numeric and used for attribute 0 (topology status), it must be 0 (open) or 1 (close) and the phase attribute must be set to indicate which phases are intended to operate. If a string it must map to a valid code for the attribute involved via a combination of the scada_synonyms table and/or the scada_states table.
OPERATION_DATE
TIMESTAMP
Time the operation occurred in the field (in the UTC time zone), which can include milliseconds. If left blank, will default to SYSDATE.
OPERATION_COUNT
NUMBER(10)
How many operations have occurred since the last scan – for momentaries.
CAPTURE_DATE
DATE
When operation captured by NMS (in the UTC time zone) - generally set to SYSDATE.
QUALITY
VARCHAR2(32)
Quality code for attribute – can be numeric or a string. Either way it must be properly configured in NMS and must ultimately translate to be greater than 0xFFFF (65535) and less than or equal to 0xFFFF. All quality codes below 0xFFFF are reserved for NMS.
SOURCE
VARCHAR(32)
Data source/user name
STATUS
VARCHAR2(1)
Status of request:
N = New
E = Error
S = Success
ERROR_CODE
NUMBER(38,0)
Error code
ERROR_DESCRIPTION
VARCHAR(256)
Error code description.
SCADA_ANALOG_IN Database Table
The SCADA_ANALOG_IN table can be used by RTAdapter to queue incoming SCADA updates. RTAdapter, if configured to do so, should periodically poll this table and check for data that has changed since the last update of the SCADA_ANALOG_IN.CAPTURE_DATE column. If potential updates are found, RTAdapter will attempt to update the model according to the data provided. If an error occurs an error is written to the RTAdapter log file. If the update is successful no changes are made to the SCADA_ANALOG_IN table. This is to support the idea of continuous update of the SCADA_ANALOG_IN table from an external entity. The SCADA_ANALOG_IN table can be updated many times between RTAdapter scans. RTAdapter will "harvest" whatever appears to have changed since the last scan. It is expected that some form of merge statement would be used to update the SCADA_ANALOG_IN table – inserting if a record does not exist and updating otherwise – which triggers an update on the capture_date column.
One of two methods can be used to identify a specific NMS attribute measurement.
1. The rti_alias values in the ANALOG_MEASUREMENTS table must uniquely identify each measurement, you do not need to specify an attribute on input. This is the preferred way to operate.
2. A valid NMS handle AND attribute number - in this case the alias can be left blank. This is not often used as it requires the external system to know NMS handles and attributes. This is for backward compatibility only and is not recommended for new projects.
Column
Data Type
Description
H_CLS
NUMBER(38,0)
NMS class of device
H_IDX
NUMBER(38,0)
NMS index of device
ALIAS
VARCHAR2(128)
SCADA point alias - can be null if h_cls and h_idx are NOT 0.
ATTRIBUTE
VARCHAR(16)
SCADA attribute. If it is numeric it must match a valid NMS attribute. If it is a string it must be defined in scada_synonyms and map to a valid NMS attribute. If it is NOT provided the provided ALIAS must be provided and MUST uniquely identify a measurement.
MEASUREMENT
NUMBER
Analog update value.
MEASUREMENT_DATE
TIMESTAMP
When operation occurred in the field (in the UTC time zone); not currently used.
CAPTURE_DATE
DATE
When measurement captured (in the UTC time zone) – could be updated by trigger on table update. This is the how RTAdapter determines what to examine during periodic polls.
QUALITY
VARCHAR2(32)
Quality code for attribute; can be numeric or a string. Either way it must be properly configured in NMS and must ultimately translate to be greater than 0xFFFF (65535) and less than or equal to 0xFFFF. All quality codes below 0xFFFF are reserved for NMS.
SOURCE
VARCHAR(32)
source/user name
SCADA_CONDITION_IN Database Table
The SCADA_CONDITION_IN table can be used by RTAdapter to queue incoming analog SCADA condition updates. Records with 'add' actions add conditions to the NMS model, and 'rem' records remove the condition.
Records with 'syn' actions indicate the start of a full synchronization. All subsequent 'syn' records will be added to the NMS if not already active. The 'end' action indicates the end of the synchronization sequence. Any NMS conditions of that condition class without corresponding 'syn' records are then removed from the NMS (via 'end' processing).
Column
Data Type
Description
ID
NUMBER(38,0)
Unique identifier for the row. Generated by the scada_in_sequence.
H_CLS
NUMBER(38,0)
NMS class of device
H_IDX
NUMBER(38,0)
NMS index of device
ALIAS
VARCHAR2(128)
Alias of the NMS device
COND_KEY
VARCHAR2(32)
SCADA_SYNONYM.KEYWORD for the condition type.
EXTERNAL_ID
VARCHAR(64)
External identifier for this condition.
STATUS
VARCHAR2(1)
Process status ('N'=New, 'E'=Error, 'S'=Success)
ACTION_DATE
DATE
When operation occurred in field (in the UTC time zone).
CAPTURE_DATE
DATE
When the condition was captured (in the UTC time zone). This is the how RTAdapter determines what to examine during periodic polls.
ACTION
VARCHAR2(3)
Action ('add' - Add, 'rem' - Remove, 'syn' – Synchronize, 'end' – End the synchronization)
SOURCE
VARCHAR(32)
source/user name
PHASES
NUMBER(38,0)
The bitwise integer phases for the condition.
TEXT
VARCHAR(128)
The text for the condition.
SCADA_RESPONSE_IN Database Table
The SCADA_RESPONSE_IN table is an optional RTAdapter input table. It is used with "‑dir RDBMS" command line option and must also be enabled via the RT_RESPONSE_IN SRS_RULE. The SCADA_RESPONSE_IN table allows an external adapter that communicates to RTAdapter to update NMS with response codes for asynchronous requests that RTAdapter sends to an external system. Response codes can be returned (captured) for both NMS outbound control and outbound tag operations. RTAdapter generally only processes negative (failed) response codes.
Control Responses
When NMS initiates an outbound control request, a unique NMS internal expected_action_id is generated. This id is sent by RTAdapter with each control to help track specific NMS outbound control requests. It is expected that the external system will keep track of this expected_action_id as it attempts to process the NMS requested action.
If/when the external system detects a problem delivering or processing a specific NMS outbound control request, it can notify NMS of the problem via the SCADA_RESPONSE_IN table.
The existing NMS RDBMS sequence (scada_in_sequence) for generically handling scada input is used to generate a unique id for every response recorded in the scada_response_in table.
Column
Data Type
Description
Id
INTEGER
Id (primary key) sequence generated on insert
exp_act_id
INTEGER
NMS expected action id key for original control
cond_id
VARCHAR(64)
NMS (unique) condition id
status
VARCHAR2(1)
Process status (N=New, E=Error, S=Success)
response
SMALLINT
Response from SCADA - >0 is ok <=0 is error
external_id
VARCHAR2(64)
SCADA id for control/condition point - optional
h_cls
SMALLINT
Device handle class number - optional
h_idx
INTEGER
Device handle index number - optional
attribute
SMALLINT
Device attribute - optional
action
VARCHAR2(32)
Original action - optional
phases
VARCHAR2(4)
Phases for action - optional
action_date
DATE
Time of original request (in the UTC time zone) - optional
capture_date
DATE
Time response was captured (in the UTC time zone) - trigger.
source
VARCHAR2(32)
Who responsible for action - optional
text
VARCHAR2(128)
Text associated with response - optional
 
For control responses fields that must be filled out (other than id which is auto-populated) include:
status ('N' for a new response)
response (>0 is ok, <=0 is failure)
exp_act_id (expected_action_id sent with the original NMS control request)
For control responses the cond_id field should be left blank (it will be ignored). The action field can be left blank but if provided can provide better context to help track issues
All other fields are optional but it is generally expected that the "text" field will be filled in with some form of useful information (an error code for example) to give an NMS operator some idea why a given control request failed. It is this text that will be included in the resulting "fail-to-operate" NMS alarm. If no text is provided it will simply generate a generic fail-to-operate alarm for the control.
Condition Responses
Somewhat similar to controls, NMS will generate a unique id for all outbound NMS conditions (for example, "NMS:tag-1234"). To generate an NMS system alarm if/when an NMS condition fails to propagate to an external system, the following fields should normally be provided:
status ('N' for a new response).
response (>0 is okay, <=0 is failure).
exp_act_id MUST be blank to prevent control feedback processing.
cond_id must be set to the unique NMS id for the condition (for example, NMS:tag‑1001).
external_id should be set and will be considered the NMS device alias.
action_date should be set to time propagation was attempted.
source should be set to reflect the origin of the feedback.
text can be set if a project specific message is desired.
If text is not set, RTAdapter will generate default system alarm text based on the cond_id, external_id, and response fields.
SCADA_MEASUREMENTS_ST Database Table
SCADA_MEASUREMENTS_ST is a staging table used to capture relevant information for each measurement attribute. It can be populated via the scadapop executable or via project-specific means. It can be completely rebuilt at will as it is NOT a run-time table. The "updateDDS -recacheMeasures" utility sends a message to DDService to merge measurements defined in this table with the run-time analog_measurements and digital_measurements tables.
Column
Data Type
Description
H_CLS
NUMBER
Object handle
H_IDX
NUMBER
Object index
PARTITION
NUMBER
Object partition handle
ATTRIBUTE
NUMBER
Data attribute index (from ATTRIBUTES table)
TTL
NUMBER
Time-To-Live Value. If set to 0 value will not be broadcast dynamically. If set to 2, the value will be considered a pseudo measurement.
LIMIT_GROUP_ID
INTEGER
Object limit group
RTI_ALIAS
VARCHAR2(128)
RTI device measurement name
RTI_ALIAS_A
VARCHAR2(128)
RTI device measurement name for phase A - MultiSpeak status updates.
RTI_ALIAS_B
VARCHAR2(128)
RTI device measurement name for phase B - MultiSpeak status updates.
RTI_ALIAS_C
VARCHAR2(128)
RTI device measurement name for phase C - MultiSpeak status updates.
SCADA_ID
INTEGER
SCADA source identifier - matches scada_ids.id
RTU_ID
VARCHAR2(32)
RTU ID - unique name within SCADA system. Not generally used.
QUALITY
INTEGER
Quality code
VALUE
FLOAT
Current value – from Manual Replace or from SCADA if configured for persistence.
UPDATE_FLAG
INTEGER
Update flag
ICCP_OBJECT
VARCHAR2(32)
ICCP mms object name
DISPLAY_ID
VARCHAR2(64)
ID for display call up – if different than rti_alias.
CONTROLLABLE
VARCHAR2(1)
Is this row controllable
ACTIVE
VARCHAR2(1)
Is this row active
SOURCE
VARCHAR2(33)
Source of measurements
COMMENTS
VARCHAR2(512)
Comment
NORMAL_STATE
INTEGER
Nominal state – only used for Digital measurements.
OFF_NOMINAL_TIME
DATE
Time quality went off-nominal (in the UTC time zone).
MEASUREMENT_TYPE
VARCHAR2(1)
'A' for Analog or 'D' for Digital.
FEEDER
VARCHAR2(100)
Nominal feeder
SUBSTATION
VARCHAR2(100)
Nominal substation
GANG
VARCHAR2(1)
Y/N is this a gang measurement or not - for topology status.
ICCP_DATA_SET
VARCHAR2(64)
ICCP Data Set
DEVICE
VARCHAR2(64)
Device the measurement is on.
NCG
INTEGER
The NCG of the device.
ANALOG_MEASUREMENTS Database Table
The ANALOG_MEASUREMENTS table is a run-time table generally maintained by DDService.
Column
Data Type
Description
H_CLS
SMALLINT
Object handle
H_IDX
INTEGER
Object index
PARTITION
INTEGER
Object partition handle
ATTRIBUTE
SMALLINT
Data attribute index (from ATTRIBUTES table)
TTL
SMALLINT
Time-To-Live Value
LIMIT_GROUP_ID
INTEGER
Object limit group
RTI_ALIAS
VARCHAR2(128)
RTI device measurement name
SCADA_ID
INTEGER
SCADA source identifier - matches scada_ids.id
RTU_ID
VARCHAR2(32)
RTU IDID - unique name within SCADA system.
QUALITY
INTEGER
Quality code
VALUE
FLOAT
Manual Replace Value
UPDATE_FLAG
INTEGER
Manual Replace Flag
ICCP_OBJECT
VARCHAR2(32)
ICCP mms object name
DISPLAY_ID
VARCHAR2(64)
ID for display call up
CONTROLLABLE
VARCHAR2(1)
Is this row controllable
ACTIVE
VARCHAR2(1)
Is this row active
SOURCE
VARCHAR2(33)
Source of measurements
COMMENTS
VARCHAR2(512)
Comment associated with
OFF_NOMINAL_TIME
DATE
Time quality went off-nominal (in the UTC time zone).
SCADA_TIME
TIMESTAMP
Time the operation captured by SCADA (in the UTC time zone).
SYSTEM_TIME
DATE
Time operation captured by RTAdapter (in the UTC time zone).
SUBSTATION
VARCHAR2(100)
Nominal Substation
FEEDER
VARCHAR2(100)
Nominal Feeder
GANG
VARCHAR2(1)
Whether the device is gang operable.
QUAL_COMMENT
VARCHAR2(256)
Comment for quality code
QUAL_COMMENT_USER
VARCHAR2(32)
NMS user who placed the comment
QUAL_COMMENT_DATE
DATE
When quality comment entered (in the UTC time zone).
DEVICE
VARCHAR2(64)
Device the measurement is on.
NCG
INTEGER
The NCG of the device.
DIGITAL_MEASUREMENTS Database Table
The DIGITAL_MEASUREMENTS table is a run-time table generally maintained by DDService.
Column
Data Type
Description
H_CLS
SMALLINT
Object handle
H_IDX
INTEGER
Object index
PARTITION
INTEGER
Object partition handle
ATTRIBUTE
SMALLINT
Data attribute index (from ATTRIBUTES table)
TTL
SMALLINT
Time-To-Live Value
LIMIT_GROUP_ID
INTEGER
Object limit group
RTI_ALIAS
VARCHAR2(128)
RTI device measurement name
SCADA_ID
INTEGER
SCADA source identifier
RTU_ID
VARCHAR2(32)
RTU ID
QUALITY
INTEGER
Quality code
VALUE
FLOAT
Manual Replace Value
UPDATE_FLAG
INTEGER
Manual Replace Flag
ICCP_OBJECT
VARCHAR2(32)
ICCP mms object name
DISPLAY_ID
VARCHAR2(64)
ID for display call up
NORMAL_STATE
INTEGER
Normal state for measure
CONTROLLABLE
VARCHAR2(1)
Is this row controllable
ACTIVE
VARCHAR2(1)
Is this row active
SOURCE
VARCHAR2(33)
Source of measurements
COMMENTS
VARCHAR2(512)
Comment associated with
OFF_NOMINAL_TIME
DATE
Time quality went off-nominal (in the UTC time zone).
SCADA_TIME
TIMESTAMP
Time operation captured by SCADA (in the UTC time zone).
SYSTEM_TIME
DATE
Time operation captured by RTAdapter (in the UTC time zone).
SUBSTATION
VARCHAR2(100)
Nominal Substation
FEEDER
VARCHAR2(100)
Nominal Feeder
GANG
VARCHAR2(1)
Whether the device is gang operable
QUAL_COMMENT
VARCHAR2(256)
Comment for quality code
QUAL_COMMENT_USER
VARCHAR2(32)
NMS user who placed the comment.
QUAL_COMMENT_DATE
DATE
When quality comment entered (in the UTC time zone).
DEVICE
VARCHAR2(64)
Device the measurement is on.
NCG
INTEGER
The NCG of the device.
SCADA_ANALOG_HISTORY Database Table
SCADA_ANALOG_HISTORY is a run-time table that can be used to capture analog updates sent to NMS from an external (SCADA or similar) system.
Column
Data Type
Description
H_CLS
NUMBER(38)
Device class associated measurement
H_IDX
NUMBER(38)
Device index associated measurement
ATTRIBUTE
NUMBER(38)
Attribute number of measurement
VALUE
NUMBER
Captured value of measurement
SCADA_TIME
TIMESTAMP
Time value was captured (in the UTC time zone).
To capture analog updates into the SCADA_ANALOG_HISTORY table, the NMS "trending" option must be active (not commented out) in the <project>_licensed_products.dat file.
The SCADA_ANALOG_HISTORY table is typically populated via Oracle RDBMS trigger after every update to the ANALOG_MEASUREMENTS.SCADA_TIME column. By default, an insert into the SCADA_ANALOG_HISTORY table is triggered after any ANALOG_MEASUREMENTS.SCADA_TIME update. The $NMS_SQL_FILES/nms_retain_scada.sql file contains the default trigger for the ANALOG_MEASUREMENTS table that can be used to populate the SCADA_ANALOG_HISTORY table.
If a project wishes to capture a subset of analog updates (for example, you want to capture updates for a subset of measurement attributes), the scada_analog_update trigger would need to be modified or replaced with a more restrictive trigger that reflects which analog updates you would like to capture. You can use Oracle SQL Developer (or similar) tool to ensure an appropriate trigger is active for the ANALOG_MEASUREMENTS table.
Note: If this SCADA analog trend capture feature is used aggressively (for more than a million entries in the SCADA_ANALOG_HISTORY table, for example), it is strongly recommended that Oracle RDBMS partitioning also be used. Oracle partitioning is a separately licensed Oracle RDBMS Enterprise Edition option. If you are licensed for Oracle RDBMS partitioning, then you must also indicate you want to use partitioning in Oracle NMS by ensuring the "partitioning" option is active in the Oracle NMS <project>_licensed_products.dat file (not commented out).
The default NMS partitioning scheme stores data in the SCADA_ANALOG_HISTORY table in 7 day partitions. With adequate partitioning, performance should not be significantly impacted unless you attempt to load data across many partitions. The assumption is that it would be most common for operators to request analog trend data for the last one to four weeks; thus pulling data from one to five partitions (allowing for boundary conditions across partitions). If your needs are different, the partitioning scheme can be changed by the project. In the end, using Oracle RDBMS partitioning reduces the need to aggressively prune the SCADA_ANALOG_HISTORY table and makes pruning more of an "available data space" issue and less of a "necessity to maintain for performance" issue.
If you do not use partitioning, you will likely need to implement a more aggressive pruning process to prevent the SCADA_ANALOG_HISTORY table from growing without bound, becoming difficult to manage, and (potentially) impacting performance. A project that implements SCADA_ANALOG_HISTORY trending and does not use partitioning will be vulnerable to performance degradation over time - especially when they eventually do decide to purge. Oracle RDBMS partitions (in particular) greatly simplify and optimize the process of capturing, using, and maintaining a limited window of historical data (purging a partition has minimal impact on RDBMS). Without partitioning, the most practical options for improved performance are more aggressive pruning of the SCADA_ANALOG_HISTORY table and/or Oracle RDBMS hardware upgrades.
Any time a change is made to <project>_licensed_products.dat, the nms‑setup script must be executed to capture the desired licensed product changes and build the desired configuration. For NMS tables to be built as partitioned tables by the nms‑setup script, the NMS partitioning option must be active on a clean (initial) NMS model setup (nms‑setup ‑clean). The nms‑setup script will not convert existing non-partitioned tables to partitioned tables.
Note: If you have an existing (non-partitioned) NMS data model, are licensed to use partitioning, and you want to partition the SCADA_ANALOG_HISTORY table (without destroying your current data model), it is possible, but requires project specific effort beyond the scope of this document.
To help manage the pruning process for RDBMS history tables, NMS includes a pruning procedure called PURGE_HISTORY_TABLES, which is defined in the $NMS_SQL_FILES/ nms_schema_flm.sql file. The procedure can be configured to retain a defined number of weeks of history via the CES_PARAMETERS table (as specified in the attrib='RETAIN_HISTORY_RECORDS' record).
Note: See $NMS_SQL_FILES/nms_parameters.sql for example configuration of the RETAIN_HISTORY_RECORDS parameter.
Once captured, the NMS client has configuration options to visualize trends for selected time slices of analog values in the SCADA_ANALOG_HISTORY table.
External Access Schema
To support external SCADA or 'SCADA-like' integration, NMS includes an optional limited NMS access RDBMS schema. This alternate schema is a set of RDBMS views, synonyms, and grants to access specific primary NMS RDBMS user tables (for the purpose of restricting access to only tables/views that an external SCADA type system needs to interact with NMS). This optional schema uses the NMS primary NMS RDBMS access username to help create the external SCADA access schema name. For example, if the primary NMS RDBMS user name is "nms," then the external SCADA access schema would be "nms_scada." The "nms_scada" schema name allows access to a subset of NMS RDBMS tables/views. The default tables/views/synonyms are defined by the SCADA_GRANTS_AND_SYNONYMS procedure in the $NMS_SQL_FILES/nms_schema_readonly.sql file.
The following tables are granted access by the SCADA_GRANTS_AND_SYNONYMS procedure:
SCADA_VIEW: View of NMS measurements and current status.
SCADA_TAG_VIEW: View of active project specific tags to export to SCADA.
SCADA_IDS: Valid SCADA systems NMS can interact with.
SCADA_EMULATOR_ANALOG_OUT: Output from PFEmulator (for use with the Oracle Utilities Network Management System Training Simulator).
SCADA_EMULATOR_DIGITAL_OUT: Output from PFEmulator (for use with the Oracle Utilities Network Management System Training Simulator).
SCADA_ANALOG_IN: Access to SCADA_ANALOG_IN – for incoming analogs.
SCADA_DIGITAL_IN: Access to SCADA_DIGITAL_IN – for incoming digitals.
SCADA_CONDITION_IN: Access to SCADA_CONDITION_IN – for incoming tags.
SCADA_RESPONSE_IN: Access to SCADA_RESPONSE_IN - for outbound control/tag command response feedback.
In particular, SCADA_VIEW is an RDBMS view that can be used by an external SCADA system to see what measurements NMS is currently configured for as well as the last known qualities and values NMS has recorded for those measurements. The intent of this view is that it can be used by the external SCADA system to not only know what measurements NMS is configured for, but also to use the corresponding last reported qualities and values to optimize re-sync (integrity check) processing. Presumably, an external SCADA could access this view and only send NMS updates for measures and qualities that do not sufficiently match what NMS has already recorded.