بررسی انباره داده بخش سی و یکم

به همين ترتيب همين script را با اتصال به دو شمای ديگر در بانک GDB اعمال کنيد.
---
---
---
SQL>CONNECT REPADMIN1/REPADMIN1@GDB
SQL>CREATE OR REPLACE TRIGGER "REPADMIN1"."TRG_CATALOG" AFTER
INSERT ON "REPADMIN1"."TBL_CATALOG"
REFERENCING OLD AS OLD NEW AS new FOR EACH ROW BEGIN
INSERT INTO ADMIN.TBL_CATALOG
VALUES(:new.PK_CATALOG_ID
,:new.CATALOG_VALUE
,:new.FK_CATALOG_TYPE_ID);
END;
---
---
---
SQL>CONNECT REPADMIN1/REPADMIN1@GDB
SQL>CREATE OR REPLACE TRIGGER "REPADMIN1"."TRG_PERSON" AFTER
INSERT ON "REPADMIN1"."MV_PERSON"
REFERENCING OLD AS OLD NEW AS new FOR EACH ROW BEGIN
INSERT INTO ADMIN.TBL_PERSON
VALUES(:new.PER_PK_PERSON_ID
,:new.PER_PERSON_CODE
,:new.PER_FIRST_NAME
,:new.PER_LAST_NAME
,:new.PER_FATHER_NAME
,:new.PER_NATIONAL_NO
,:new.PER_BIRTH_DATE
,:new.PER_BIRTH_PLACE
,:new.PER_TEL
,:new.PER_ADDRESS
,:new.PER_BASE_SAL
,:new.PER_FK_MARRIED_ID
,:new.PER_FK_SEX_ID
,:new.PER_FK_POSITION_ID
,:new.PER_FK_WORK_UNIT_ID
,:new.PER_DB_ID);
END;
/
SQL>CREATE OR REPLACE TRIGGER "REPADMIN1"."TRG_WORK_TIME" AFTER
SQL>CREATE OR REPLACE TRIGGER "REPADMIN1"."TRG_PAYMENT_SALARY" AFTER
INSERT ON "REPADMIN1"."MV_PAYMENT_SALARY"
REFERENCING OLD AS OLD NEW AS new FOR EACH ROW BEGIN
INSERT INTO ADMIN.TBL_PAYMENT_SALARY
VALUES(:new.PAY_PK_PAYMENT_ID
,:new.PAY_FK_PERSON_ID
به همين ترتيب همين script را با اتصال به دو شمای ديگر در بانک GDB اجرا کنيد.
نمايش نحوه اعمال تغييرات
دراين بخش نيز مرحله به مرحله به اقدام به انجام يک تغيير در يکی از بانکهای توزيع شده می نماييم وقصد داريم تااين تغييررا در بانک اطلاعاتی سراسری نيز اعمال کنيم .بدين منظور و برای روشن تر شدن مطلب ابتدا مرحله به مرحله به صورت دستی اقدام به انجام سری اعمال زير می نماييم.سپس قصد داريم که چند مرحله از سری اعمال زير را به عهده خود RDBMS گذاشته تا به صورت خودکار انجام شود.
درابتدا برای نمايش نحوه عمليات دو صفحه SQL*PLUS باز کرديم به طوريکه هر صفحه از طريق TNS به يک بانک متصل شده اند.يکی از طريق شمای RepAdmin1 به بانک DB1 و ديگری از طريق شمای Admin به بانک سراسری GDB متصل شده است.به طور همزمان دو درخواست از يک سری اطلاعات يکسان از هر دو بانک اجرا می کنيم. همانطور که در شکل نشان داده شده است نتيجه هر دو در خواست يکسان می باشد.
در مرحله بعد اقدام به اعمال يک تغيير در يکی از فيلدهای انتخابی مرحله گذشته در بانک DB1 می نماييم. اين تغيير مبتنی بر تغيير شماره تماس پرسنل انتخاب شده می باشد.
سپس دوباره درخواست قبلی مبنی بر انتخاب يک سری اطلاعات پرسنل قبلی را از بانک GDB می نماييم و مشاهده می کنيم که هيچ تغييری مبنی برتغيير شماره تلفن مشاهده نشده است .
در مرحله بعد به بانک اطلاعاتی GDB از طريق شمای RepAdmin1 متصل می شويم و Script زير را اجرا می نماييم.
EXECUTE DBMS_MVIEW.REFRESH('MV_PERSON','?');
شايان ذکر است از طريق اجرای اين Script يک Refresh دراطلاعات Materialized View مورد نظر اتفاق می افتد. علامت سئوال در اين Script به معنی انجام يک Refresh به صورت Force می باشد.
اکنون دوباره به شمای Admin از بانک GDB متصل شده و دوباره درخواست قبلی را اجرا نماييد.مشاهده می کنيد فيلد جديدی با اطلاعات به روز شده به جدول اضافه شده است .اين همان مفهوم داده تاريخدار در انبار داده می باشد.
پاسخگويی به درخواستهای مديريتی
تااينجای بحث يک انبار داده ايجاد کرديم که قادر به پاسخگويي درخواستهايی باشد که درقسمت ابتدايی فصل بيان شد.حل نوبت به آن است که به طور عملی نحوه پاسخگويی انبار به اين سری درخواستها را نشان دهيم.
درخواست 1: می خواهيم بدانيم کل پرداختی شرکت به واحد تحقيقات شعبه يک چقدر بوده است؟
SELECT SUM(PAY.PAY_PAYMENT_AMOUNT)
FROM TBL_PAYMENT_SALARY PAY
,TBL_PERSON PER
,TBL_WORK_UNIT UNIT
WHERE PER.PER_PK_PERSON_ID=PAY.PAY_FK_PERSON_ID
در خواست 2 : در صد حقوق پرداختی در شعبه شماره 2 نسب به کل پرداختی شعب چند در صد است؟
SELECT (A.S1/B.S2)*100
FROM (SELECT SUM(PAY.PAY_PAYMENT_AMOUNT) S1
FROM TBL_PAYMENT_SALARY PAY
درخواست 3 :درصد حقوق پرداختی واحد تحقيات شعبه شماره 1 نسبت به کل پرداختی دراي« شعبه چقدراست؟
SELECT (A.S1/B.S2)*100
FROM (SELECT SUM(PAY.PAY_PAYMENT_AMOUNT) S1
FROM TBL_PAYMENT_SALARY PAY
,TBL_PERSON PER
,TBL_WORK_UNIT UNIT
WHERE PER.PER_PK_PERSON_ID=PAY.PAY_FK_PERSON_ID
AND PER.PER_DB_ID = PAY.PAY_DB_ID
AND PER.PER_FK_WORK_UNIT_ID=UNIT.PK_WORK_UNIT_ID
AND PER.PER_DB_ID='1'