بررسی انباره داده بخش سی ام
اما همانطور که در فصلهای گذشته ذکر شد هدف اصلی پروژه پيکربندی بالا نيست .در واقع هدف، ايجاد نوعی تجميع اطلاعات در يک مکان است تا بتوانيم به درخواستهايی پاسخ دهيم که با وجود سيستمهای موجود و پراکنده امروزی قادر به پاسخگويی به آنها نبوديم. بنابراين برای ايجاد يک چنين محيطی می بايست سايت سراسری يعنی GDB نيز قادر به مشاهده اطلاعات موجود در هر يک از سه سايت موجود باشد. لذا به سايت GDB متصل شده و از جداول موجود در هر شمای سايتهای ديگر يک Materialized View در شمای مربوطه ايجاد می نماييم.

شايان ذکر است انجام اعمال زير از سه روشی که قبلا ذکر شد نيز قابل انجام است که به دليل سرعت استفاده از Script در اين بخش تنها کل Script لازم بری ايجاد را می آوريم.
---
SQL>CONNECT REPADMIN1/REPADMIN1@GDB
SQL>CREATE MATERIALIZED VIEW MV_PAYMENT_SALARY
REFRESH
WITH ROWID
FOR UPDATE
AS
SELECT
PAY.PK_PAYMENT_ID PAY_PK_PAYMENT_ID
,PAY.FK_PERSON_ID PAY_FK_PERSON_ID
,PAY.PAYMENT_YEAR PAY_PAYMENT_YEAR
,PAY.PAYMENT_AMOUNT PAY_PAYMENT_AMOUNT
,PAY.DB_ID PAY_DB_ID
FROM TBL_PAYMENT_SALARY@DB1.COM PAY
/
SQL>CREATE MATERIALIZED VIEW MV_PERSON
SQL>CREATE MATERIALIZED VIEW MV_WORK_TIME
REFRESH
WITH ROWID
FOR UPDATE
AS
SELECT
OUT.PK_WORK_TIME_ID OUT_PK_WORK_TIME_ID
,OUT.OPR_DATE OUT_OPR_DATE
,OUT.START_TIME OUT_START_TIME
,OUT.END_TIME OUT_END_TIME
,OUT.WORK_TIME OUT_WORK_TIME
,OUT.OVERTIME OUT_OVERTIME
,OUT.UNDERTIME OUT_UNDERTIME
,OUT.FK_PERSON_ID OUT_FK_PERSON_ID
,OUT.DB_ID OUT_DB_ID
FROM TBL_WORK_TIME@DB1.COM OUT
کل script های بالا را می توان برای دو شمای ديگر RepAdmin2 با DBLink بانام DB2.COM و RepAdmin3 با DBLink بانام DB3.COM اجرا کرد و بدين ترتيب قادر به مشاهده اطلاعات هر سه سايت از سايت سراسری خواهيد بود.
تجميع اطلاعات در يک شما
تاکنون و تا اينجای بحث در بررسی لايه ETL دو قسمت استخراج و تغيير شکل داده انجام شد ،البته در پروژه حاضر به دليل همگن بودن ساختارهای داده ای و ابزارها و محيط های عملياتی قسمت تغيير شکل داده بسيار کمرنگ بوده است، چراکه اگر چه ساختار حاضر پديد امده اما نيازی به اعمالی که در بخش تغيير شکل انجام می شود از قبيل بعضی تصحيحات و اضافات در مقادير داده ای نداريم. بهتر است مروری اجمالی به فعاليتهای انجام شده داشته باشيم ؛ تاکنون يک سايت سراسری داريم با سه کاربر که در هر يک با سه ساختار داده ای يکسان مواجهيم، اما اطلاعات هر يک متفاوت است و مختص همان کاربر در سايت Materialized View است. همانطور که در بخش دوم از همين فصل بررسی شد به منظور پاسخگويی به درخواستهای مديريتی می توانيم يک سری درخواستهايی را به صورت توزيع شده به روش الف يا ب انجام داد.اما روش پيشنهادی در اين بخش تجميع کليه ساختارها در يک شما به نام Admin است.توجه داشته باشيد که در صورتي اين روش قابل اعمال است که کليه ساختارها چه از نظر نام جداول جه از نظر نام فيلد و نوع فيلد و غيره همگن باشند. به منظور ايجاد چنين ساختاری ابتدا يک شما با نام Admin به روش زير ايجاد می نماييم.
---
---
---
SQL>CONNECT SYSTEM/MANAGER@GDB
SQL>CREATE USER ADMIN PROFILE "DEFAULT"
IDENTIFIED
سپس برای هرMaterialized View موجود در هر شما جدولی با join جداول هر شما ايجاد می نماييم.


---
SQL>CONNECT ADMIN/ADMIN@GDB
SQL>CREATE TABLE TBL_PERSON
AS
SELECT PER1.PER_PK_PERSON_ID
,PER1.PER_PERSON_CODE
,PER1.PER_FIRST_NAME
,PER1.PER_LAST_NAME
,PER1.PER_FATHER_NAME
,PER1.PER_NATIONAL_NO
,PER1.PER_BIRTH_DATE
,PER1.PER_BIRTH_PLACE
,PER1.PER_TEL
,PER1.PER_ADDRESS
,PER1.PER_BASE_SAL
,PER1.PER_FK_MARRIED_ID
,PER1.PER_FK_SEX_ID
,PER1.PER_FK_POSITION_ID
,PER1.PER_FK_WORK_UNIT_ID
,PER1.PER_DB_ID
FROM REPADMIN1.MV_PERSON PER1
UNION
SELECT PER2.PER_PK_PERSON_ID
,PER2.PER_PERSON_CODE
,PER2.PER_FIRST_NAME
,PER2.PER_LAST_NAME
,PER2.PER_FATHER_NAME
,PER2.PER_NATIONAL_NO
SQL>CREATE TABLE TBL_WORK_TIME
AS
SELECT OUT1.OUT_PK_WORK_TIME_ID
,OUT1.OUT_OPR_DATE
,OUT1.OUT_START_TIME
,OUT1.OUT_END_TIME
,OUT1.OUT_WORK_TIME
,OUT1.OUT_OVERTIME
,OUT1.OUT_UNDERTIME
,OUT1.OUT_FK_PERSON_ID
,OUT1.OUT_DB_ID
FROM REPADMIN1.MV_WORK_TIME OUT1
UNION
SELECT OUT2.OUT_PK_WORK_TIME_ID
,OUT2.OUT_OPR_DATE
,OUT2.OUT_START_TIME
,OUT2.OUT_END_TIME
---
SQL>CREATE TABLE TBL_ADDSUB
AS
SELECT ADSU1.ADSU_PK_ADDSUB_ID
,ADSU1.ADSU_FK_PERSON_ID
,ADSU1.ADSU_ADDSUB_DATE
,ADSU1.ADSU_INSURANCE
,ADSU1.ADSU_TAX
,ADSU1.ADSU_MISSION
,ADSU1.ADSU_OVERTIME
,ADSU1.ADSU_DB_ID
FROM REPADMIN1.MV_ADDSUB ADSU1
UNION
SELECT ADSU2.ADSU_PK_ADDSUB_ID
,ADSU2.ADSU_FK_PERSON_ID
,ADSU2.ADSU_ADDSUB_DATE
,ADSU2.ADSU_INSURANCE
,ADSU2.ADSU_TAX
,ADSU2.ADSU_MISSION
,ADSU2.ADSU_OVERTIME
,ADSU2.ADSU_DB_ID
FROM REPADMIN2.MV_ADDSUB ADSU2
UNION
SELECT ADSU3.ADSU_PK_ADDSUB_ID
,ADSU3.ADSU_FK_PERSON_ID
,ADSU3.ADSU_ADDSUB_DATE
,ADSU3.ADSU_INSURANCE
,ADSU3.ADSU_TAX
,ADSU3.ADSU_MISSION
اين روش را نه تنها بايد برای Materialized View موجود در شماه بلکه برای جداول پايه موجود نيز می بايست انجام داد .درواقع باانجام اين روش يک لايه انتزاعی از کليه شما ها در يک شما ايجاد می نماييم که مزايای آن در مبحث بعد مورد بررسی قرر می گيرد.
---
SQL>CREATE TABLE TBL_CATALOG
AS
SELECT CAT1.PK_CATALOG_ID
,CAT1.CATALOG_VALUE
,CAT1.FK_CATALOG_TYPE_ID
FROM REPADMIN1.TBL_CATALOG CAT1
UNION
SELECT CAT2.PK_CATALOG_ID
,CAT2.CATALOG_VALUE
,CAT2.FK_CATALOG_TYPE_ID
FROM REPADMIN2.TBL_CATALOG CAT2
UNION
SELECT CAT3.PK_CATALOG_ID
,CAT3.CATALOG_VALUE
,CAT3.FK_CATALOG_TYPE_ID
FROM REPADMIN3.TBL_CATALOG CAT3
/
SQL>CREATE TABLE TBL_POSITION
AS
SELECT POS1.PK_POSITION_ID
,POS1.POSITION_NAME
,POS1.ENGLISH_TITLE
,POS1.FK_POSITION_TYPE_ID
FROM REPADMIN1.TBL_POSITION POS1
UNION
SELECT POS2.PK_POSITION_ID
البته وجود اين جداول به تنهايی به منظور ديدن کليه اطلاعات موجود در شماهای مختلف کافی نمی باشد .چراکه به محض تغيير يا Refresh هر کدام از Materialized View ها هيچگونه تغييری در جداول لايه بالاتر نخواهيم ديد.بنابر اين نياز به ايجاد مکانيزمی داريم که به وسيله آن هر گونه تغييری در هر کدام از Materialized Viewآن تغيير در روی جداول لايه بالاتر نيز اعمال شود.با استفاده از Trigger می توان اين تغييرات را اعمال کرد .بنابر اين روی کليه جداول و Materialized View های هر سه شما Script زير را اعمال کنيم.