refs #730: add ADB PostgreSQL federation recording scripts
This commit is contained in:
32
sql/adb/73_hmm_rds_pg_00_precheck.sql
Normal file
32
sql/adb/73_hmm_rds_pg_00_precheck.sql
Normal file
@@ -0,0 +1,32 @@
|
||||
-- ============================================================
|
||||
-- HMM ADB -> AWS RDS PostgreSQL federation demo
|
||||
-- Step 0: precheck
|
||||
-- Run in Database Actions SQL Worksheet as ADMIN.
|
||||
-- Redmine: #730
|
||||
-- ============================================================
|
||||
|
||||
SELECT
|
||||
USER AS session_user,
|
||||
SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') AS current_schema,
|
||||
SYS_CONTEXT('USERENV', 'DB_NAME') AS database_name
|
||||
FROM dual;
|
||||
|
||||
SELECT credential_name, username
|
||||
FROM all_credentials
|
||||
WHERE credential_name = 'HMM_RDS_PG_CRED';
|
||||
|
||||
SELECT db_link, username, host, created
|
||||
FROM user_db_links
|
||||
WHERE db_link = 'HMM_RDS_PG_LINK';
|
||||
|
||||
SELECT object_name, object_type, status
|
||||
FROM user_objects
|
||||
WHERE object_name IN (
|
||||
'HMM_RDS_CARRIERS_V',
|
||||
'HMM_RDS_CARRIER_PERF_V',
|
||||
'HMM_RDS_CARRIER_LATEST_V'
|
||||
)
|
||||
ORDER BY object_name;
|
||||
|
||||
-- First recording: the last three queries should return no rows.
|
||||
-- If objects already exist, run 80_hmm_rds_pg_99_cleanup.sql first.
|
||||
20
sql/adb/74_hmm_rds_pg_01_credential.sql
Normal file
20
sql/adb/74_hmm_rds_pg_01_credential.sql
Normal file
@@ -0,0 +1,20 @@
|
||||
-- ============================================================
|
||||
-- Step 1: create the PostgreSQL credential.
|
||||
-- Run only this statement after replacing <RDS_PASSWORD> in the
|
||||
-- Worksheet. Never save the actual password in this file.
|
||||
-- Redmine: #730
|
||||
-- ============================================================
|
||||
|
||||
BEGIN
|
||||
DBMS_CLOUD.CREATE_CREDENTIAL(
|
||||
credential_name => 'HMM_RDS_PG_CRED',
|
||||
username => 'postgres',
|
||||
password => '<RDS_PASSWORD>'
|
||||
);
|
||||
END;
|
||||
/
|
||||
|
||||
-- Passwords are never returned by ALL_CREDENTIALS.
|
||||
SELECT credential_name, username
|
||||
FROM all_credentials
|
||||
WHERE credential_name = 'HMM_RDS_PG_CRED';
|
||||
61
sql/adb/75_hmm_rds_pg_02_acl.sql
Normal file
61
sql/adb/75_hmm_rds_pg_02_acl.sql
Normal file
@@ -0,0 +1,61 @@
|
||||
-- ============================================================
|
||||
-- Step 2: register and verify the host-specific ACL.
|
||||
-- Run as ADMIN.
|
||||
--
|
||||
-- Important:
|
||||
-- Oracle-managed heterogeneous Database Link traffic uses the
|
||||
-- managed gateway. This ACL records SQL-user host permissions;
|
||||
-- it does not replace the AWS RDS Security Group rule.
|
||||
-- Redmine: #730
|
||||
-- ============================================================
|
||||
|
||||
-- DNS resolution privilege must not have a port range.
|
||||
BEGIN
|
||||
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
|
||||
host => 'database-1.czaaygccsncp.ap-northeast-2.rds.amazonaws.com',
|
||||
ace => XS$ACE_TYPE(
|
||||
privilege_list => XS$NAME_LIST('resolve'),
|
||||
principal_name => SYS_CONTEXT('USERENV', 'SESSION_USER'),
|
||||
principal_type => XS_ACL.PTYPE_DB
|
||||
)
|
||||
);
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
IF SQLCODE != -24243 THEN
|
||||
RAISE;
|
||||
END IF;
|
||||
END;
|
||||
/
|
||||
|
||||
-- Permit only the PostgreSQL service port.
|
||||
BEGIN
|
||||
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
|
||||
host => 'database-1.czaaygccsncp.ap-northeast-2.rds.amazonaws.com',
|
||||
lower_port => 5432,
|
||||
upper_port => 5432,
|
||||
ace => XS$ACE_TYPE(
|
||||
privilege_list => XS$NAME_LIST('connect'),
|
||||
principal_name => SYS_CONTEXT('USERENV', 'SESSION_USER'),
|
||||
principal_type => XS_ACL.PTYPE_DB
|
||||
)
|
||||
);
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
IF SQLCODE != -24243 THEN
|
||||
RAISE;
|
||||
END IF;
|
||||
END;
|
||||
/
|
||||
|
||||
SELECT
|
||||
host,
|
||||
lower_port,
|
||||
upper_port,
|
||||
principal,
|
||||
privilege,
|
||||
grant_type
|
||||
FROM dba_host_aces
|
||||
WHERE host = 'database-1.czaaygccsncp.ap-northeast-2.rds.amazonaws.com'
|
||||
AND principal = USER
|
||||
AND privilege IN ('resolve', 'connect')
|
||||
ORDER BY privilege, lower_port;
|
||||
24
sql/adb/76_hmm_rds_pg_03_dblink.sql
Normal file
24
sql/adb/76_hmm_rds_pg_03_dblink.sql
Normal file
@@ -0,0 +1,24 @@
|
||||
-- ============================================================
|
||||
-- Step 3: create an Oracle-managed PostgreSQL Database Link.
|
||||
-- Based on FY26 internal training, section 3.2.3.
|
||||
-- Run as ADMIN.
|
||||
-- Redmine: #730
|
||||
-- ============================================================
|
||||
|
||||
BEGIN
|
||||
DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
|
||||
db_link_name => 'HMM_RDS_PG_LINK',
|
||||
hostname => 'database-1.czaaygccsncp.ap-northeast-2.rds.amazonaws.com',
|
||||
port => 5432,
|
||||
service_name => 'postgres',
|
||||
credential_name => 'HMM_RDS_PG_CRED',
|
||||
ssl_server_cert_dn => NULL,
|
||||
private_target => FALSE,
|
||||
gateway_params => JSON_OBJECT('db_type' VALUE 'postgres')
|
||||
);
|
||||
END;
|
||||
/
|
||||
|
||||
SELECT db_link, username, host, created
|
||||
FROM user_db_links
|
||||
WHERE db_link = 'HMM_RDS_PG_LINK';
|
||||
34
sql/adb/77_hmm_rds_pg_04_remote_query.sql
Normal file
34
sql/adb/77_hmm_rds_pg_04_remote_query.sql
Normal file
@@ -0,0 +1,34 @@
|
||||
-- ============================================================
|
||||
-- Step 4: query PostgreSQL directly through the Database Link.
|
||||
-- PostgreSQL schema, table, view, and column identifiers are
|
||||
-- lower-case and must be double quoted.
|
||||
-- Redmine: #730
|
||||
-- ============================================================
|
||||
|
||||
SELECT COUNT(*) AS carrier_count
|
||||
FROM "hmm_demo"."carriers"@HMM_RDS_PG_LINK;
|
||||
|
||||
SELECT
|
||||
COUNT(*) AS performance_count,
|
||||
MIN("performance_month") AS first_month,
|
||||
MAX("performance_month") AS latest_month
|
||||
FROM "hmm_demo"."carrier_monthly_performance"@HMM_RDS_PG_LINK;
|
||||
|
||||
SELECT
|
||||
"carrier_code",
|
||||
"carrier_name",
|
||||
"service_region",
|
||||
"performance_tier"
|
||||
FROM "hmm_demo"."carriers"@HMM_RDS_PG_LINK
|
||||
ORDER BY "carrier_code";
|
||||
|
||||
SELECT
|
||||
"carrier_code",
|
||||
"carrier_name",
|
||||
"performance_month",
|
||||
"shipped_teu",
|
||||
"revenue_usd",
|
||||
"schedule_reliability_pct",
|
||||
"risk_level"
|
||||
FROM "hmm_demo"."carrier_performance_latest_v"@HMM_RDS_PG_LINK
|
||||
ORDER BY "carrier_code";
|
||||
109
sql/adb/78_hmm_rds_pg_05_views.sql
Normal file
109
sql/adb/78_hmm_rds_pg_05_views.sql
Normal file
@@ -0,0 +1,109 @@
|
||||
-- ============================================================
|
||||
-- Step 5: create local Oracle Views and Select AI metadata.
|
||||
-- Explicit aliases normalize PostgreSQL lower-case identifiers
|
||||
-- into ordinary Oracle identifiers.
|
||||
-- Redmine: #730
|
||||
-- ============================================================
|
||||
|
||||
CREATE OR REPLACE VIEW HMM_RDS_CARRIERS_V AS
|
||||
SELECT
|
||||
"carrier_code" AS carrier_code,
|
||||
"carrier_name" AS carrier_name,
|
||||
"country_code" AS country_code,
|
||||
"alliance_name" AS alliance_name,
|
||||
"service_region" AS service_region,
|
||||
"performance_tier" AS performance_tier
|
||||
FROM "hmm_demo"."carriers"@HMM_RDS_PG_LINK;
|
||||
|
||||
COMMENT ON TABLE HMM_RDS_CARRIERS_V IS
|
||||
'HMM federation demo fictional carrier master. Primary Key: CARRIER_CODE. Referenced by HMM_RDS_CARRIER_PERF_V(CARRIER_CODE).';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIERS_V.CARRIER_CODE IS
|
||||
'Primary Key. Fictional carrier identifier such as C001.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIERS_V.CARRIER_NAME IS
|
||||
'Fictional carrier display name; not an actual carrier.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIERS_V.COUNTRY_CODE IS
|
||||
'Two-letter demo country code.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIERS_V.ALLIANCE_NAME IS
|
||||
'Fictional carrier cooperation network.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIERS_V.SERVICE_REGION IS
|
||||
'Primary service region for the demo carrier.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIERS_V.PERFORMANCE_TIER IS
|
||||
'Demo portfolio tier: CORE, GROWTH, or WATCH.';
|
||||
|
||||
CREATE OR REPLACE VIEW HMM_RDS_CARRIER_PERF_V AS
|
||||
SELECT
|
||||
"carrier_code" AS carrier_code,
|
||||
"performance_month" AS performance_month,
|
||||
"contracted_teu" AS contracted_teu,
|
||||
"shipped_teu" AS shipped_teu,
|
||||
"revenue_usd" AS revenue_usd,
|
||||
"gross_margin_usd" AS gross_margin_usd,
|
||||
"schedule_reliability_pct" AS schedule_reliability_pct,
|
||||
"vessel_utilization_pct" AS vessel_utilization_pct,
|
||||
"claim_rate_pct" AS claim_rate_pct,
|
||||
"yoy_growth_pct" AS yoy_growth_pct,
|
||||
"risk_level" AS risk_level
|
||||
FROM "hmm_demo"."carrier_monthly_performance"@HMM_RDS_PG_LINK;
|
||||
|
||||
COMMENT ON TABLE HMM_RDS_CARRIER_PERF_V IS
|
||||
'HMM federation demo monthly carrier KPI. Composite Primary Key: CARRIER_CODE and PERFORMANCE_MONTH. Foreign Key: CARRIER_CODE references HMM_RDS_CARRIERS_V(CARRIER_CODE). All values are fictional.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIER_PERF_V.CARRIER_CODE IS
|
||||
'Foreign Key referencing HMM_RDS_CARRIERS_V(CARRIER_CODE).';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIER_PERF_V.PERFORMANCE_MONTH IS
|
||||
'First calendar day of the KPI month; part of the composite Primary Key.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIER_PERF_V.CONTRACTED_TEU IS
|
||||
'Contracted container volume in TEU.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIER_PERF_V.SHIPPED_TEU IS
|
||||
'Actually shipped container volume in TEU.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIER_PERF_V.REVENUE_USD IS
|
||||
'Fictional monthly revenue in USD.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIER_PERF_V.GROSS_MARGIN_USD IS
|
||||
'Fictional monthly gross margin in USD; negative values indicate a loss.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIER_PERF_V.SCHEDULE_RELIABILITY_PCT IS
|
||||
'Schedule reliability percentage from 0 through 100.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIER_PERF_V.VESSEL_UTILIZATION_PCT IS
|
||||
'Vessel capacity utilization percentage from 0 through 100.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIER_PERF_V.CLAIM_RATE_PCT IS
|
||||
'Cargo claim rate percentage from 0 through 100.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIER_PERF_V.YOY_GROWTH_PCT IS
|
||||
'Year-over-year performance growth percentage.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIER_PERF_V.RISK_LEVEL IS
|
||||
'Derived demo risk category: GREEN, AMBER, or RED.';
|
||||
|
||||
CREATE OR REPLACE VIEW HMM_RDS_CARRIER_LATEST_V AS
|
||||
SELECT
|
||||
"carrier_code" AS carrier_code,
|
||||
"carrier_name" AS carrier_name,
|
||||
"country_code" AS country_code,
|
||||
"alliance_name" AS alliance_name,
|
||||
"service_region" AS service_region,
|
||||
"performance_tier" AS performance_tier,
|
||||
"performance_month" AS performance_month,
|
||||
"contracted_teu" AS contracted_teu,
|
||||
"shipped_teu" AS shipped_teu,
|
||||
"revenue_usd" AS revenue_usd,
|
||||
"gross_margin_usd" AS gross_margin_usd,
|
||||
"schedule_reliability_pct" AS schedule_reliability_pct,
|
||||
"vessel_utilization_pct" AS vessel_utilization_pct,
|
||||
"claim_rate_pct" AS claim_rate_pct,
|
||||
"yoy_growth_pct" AS yoy_growth_pct,
|
||||
"risk_level" AS risk_level
|
||||
FROM "hmm_demo"."carrier_performance_latest_v"@HMM_RDS_PG_LINK;
|
||||
|
||||
COMMENT ON TABLE HMM_RDS_CARRIER_LATEST_V IS
|
||||
'Latest fictional monthly KPI for each HMM federation demo carrier. Primary Key: CARRIER_CODE.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIER_LATEST_V.CARRIER_CODE IS
|
||||
'Primary Key for the latest carrier KPI row.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIER_LATEST_V.PERFORMANCE_MONTH IS
|
||||
'Latest KPI month available in the PostgreSQL source.';
|
||||
COMMENT ON COLUMN HMM_RDS_CARRIER_LATEST_V.RISK_LEVEL IS
|
||||
'Latest derived risk category: GREEN, AMBER, or RED.';
|
||||
|
||||
SELECT object_name, object_type, status
|
||||
FROM user_objects
|
||||
WHERE object_name IN (
|
||||
'HMM_RDS_CARRIERS_V',
|
||||
'HMM_RDS_CARRIER_PERF_V',
|
||||
'HMM_RDS_CARRIER_LATEST_V'
|
||||
)
|
||||
ORDER BY object_name;
|
||||
86
sql/adb/79_hmm_rds_pg_06_verify.sql
Normal file
86
sql/adb/79_hmm_rds_pg_06_verify.sql
Normal file
@@ -0,0 +1,86 @@
|
||||
-- ============================================================
|
||||
-- Step 6: verify the local federation Views.
|
||||
-- Expected: carrier/performance/latest = 8/144/8.
|
||||
-- Redmine: #730
|
||||
-- ============================================================
|
||||
|
||||
DECLARE
|
||||
v_carrier_count PLS_INTEGER;
|
||||
v_performance_count PLS_INTEGER;
|
||||
v_latest_count PLS_INTEGER;
|
||||
v_risk_count PLS_INTEGER;
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO v_carrier_count
|
||||
FROM HMM_RDS_CARRIERS_V;
|
||||
|
||||
SELECT COUNT(*) INTO v_performance_count
|
||||
FROM HMM_RDS_CARRIER_PERF_V;
|
||||
|
||||
SELECT COUNT(*), COUNT(DISTINCT risk_level)
|
||||
INTO v_latest_count, v_risk_count
|
||||
FROM HMM_RDS_CARRIER_LATEST_V;
|
||||
|
||||
IF v_carrier_count != 8 THEN
|
||||
RAISE_APPLICATION_ERROR(
|
||||
-20001,
|
||||
'Expected 8 carriers, found ' || v_carrier_count
|
||||
);
|
||||
END IF;
|
||||
|
||||
IF v_performance_count != 144 THEN
|
||||
RAISE_APPLICATION_ERROR(
|
||||
-20002,
|
||||
'Expected 144 performance rows, found ' || v_performance_count
|
||||
);
|
||||
END IF;
|
||||
|
||||
IF v_latest_count != 8 OR v_risk_count != 3 THEN
|
||||
RAISE_APPLICATION_ERROR(
|
||||
-20003,
|
||||
'Expected 8 latest rows and 3 risk levels, found '
|
||||
|| v_latest_count || ' rows and ' || v_risk_count || ' levels'
|
||||
);
|
||||
END IF;
|
||||
END;
|
||||
/
|
||||
|
||||
SELECT
|
||||
(SELECT COUNT(*) FROM HMM_RDS_CARRIERS_V) AS carrier_count,
|
||||
(SELECT COUNT(*) FROM HMM_RDS_CARRIER_PERF_V) AS performance_count,
|
||||
(SELECT COUNT(*) FROM HMM_RDS_CARRIER_LATEST_V) AS latest_count
|
||||
FROM dual;
|
||||
|
||||
SELECT
|
||||
MIN(performance_month) AS first_month,
|
||||
MAX(performance_month) AS latest_month,
|
||||
COUNT(DISTINCT carrier_code) AS carrier_count
|
||||
FROM HMM_RDS_CARRIER_PERF_V;
|
||||
|
||||
SELECT risk_level, COUNT(*) AS carrier_count
|
||||
FROM HMM_RDS_CARRIER_LATEST_V
|
||||
GROUP BY risk_level
|
||||
ORDER BY risk_level;
|
||||
|
||||
SELECT
|
||||
carrier_code,
|
||||
carrier_name,
|
||||
performance_month,
|
||||
shipped_teu,
|
||||
revenue_usd,
|
||||
gross_margin_usd,
|
||||
schedule_reliability_pct,
|
||||
claim_rate_pct,
|
||||
risk_level
|
||||
FROM HMM_RDS_CARRIER_LATEST_V
|
||||
ORDER BY carrier_code;
|
||||
|
||||
SELECT
|
||||
table_name,
|
||||
comments
|
||||
FROM user_tab_comments
|
||||
WHERE table_name IN (
|
||||
'HMM_RDS_CARRIERS_V',
|
||||
'HMM_RDS_CARRIER_PERF_V',
|
||||
'HMM_RDS_CARRIER_LATEST_V'
|
||||
)
|
||||
ORDER BY table_name;
|
||||
63
sql/adb/80_hmm_rds_pg_99_cleanup.sql
Normal file
63
sql/adb/80_hmm_rds_pg_99_cleanup.sql
Normal file
@@ -0,0 +1,63 @@
|
||||
-- ============================================================
|
||||
-- Optional pre-recording reset.
|
||||
-- Drops only the three local Views, Database Link, and
|
||||
-- Credential owned by this demo. Host ACL entries are retained.
|
||||
-- Redmine: #730
|
||||
-- ============================================================
|
||||
|
||||
DECLARE
|
||||
v_count PLS_INTEGER;
|
||||
BEGIN
|
||||
FOR object_row IN (
|
||||
SELECT object_name
|
||||
FROM user_objects
|
||||
WHERE object_type = 'VIEW'
|
||||
AND object_name IN (
|
||||
'HMM_RDS_CARRIERS_V',
|
||||
'HMM_RDS_CARRIER_PERF_V',
|
||||
'HMM_RDS_CARRIER_LATEST_V'
|
||||
)
|
||||
ORDER BY CASE object_name
|
||||
WHEN 'HMM_RDS_CARRIER_LATEST_V' THEN 1
|
||||
WHEN 'HMM_RDS_CARRIER_PERF_V' THEN 2
|
||||
ELSE 3
|
||||
END
|
||||
) LOOP
|
||||
EXECUTE IMMEDIATE 'DROP VIEW ' || object_row.object_name;
|
||||
END LOOP;
|
||||
|
||||
SELECT COUNT(*) INTO v_count
|
||||
FROM user_db_links
|
||||
WHERE db_link = 'HMM_RDS_PG_LINK';
|
||||
|
||||
IF v_count = 1 THEN
|
||||
EXECUTE IMMEDIATE 'DROP DATABASE LINK HMM_RDS_PG_LINK';
|
||||
END IF;
|
||||
|
||||
SELECT COUNT(*) INTO v_count
|
||||
FROM all_credentials
|
||||
WHERE credential_name = 'HMM_RDS_PG_CRED';
|
||||
|
||||
IF v_count = 1 THEN
|
||||
DBMS_CLOUD.DROP_CREDENTIAL(
|
||||
credential_name => 'HMM_RDS_PG_CRED'
|
||||
);
|
||||
END IF;
|
||||
END;
|
||||
/
|
||||
|
||||
SELECT credential_name, username
|
||||
FROM all_credentials
|
||||
WHERE credential_name = 'HMM_RDS_PG_CRED';
|
||||
|
||||
SELECT db_link, username, host
|
||||
FROM user_db_links
|
||||
WHERE db_link = 'HMM_RDS_PG_LINK';
|
||||
|
||||
SELECT object_name, object_type
|
||||
FROM user_objects
|
||||
WHERE object_name IN (
|
||||
'HMM_RDS_CARRIERS_V',
|
||||
'HMM_RDS_CARRIER_PERF_V',
|
||||
'HMM_RDS_CARRIER_LATEST_V'
|
||||
);
|
||||
Reference in New Issue
Block a user