منبع اصلی نوشتار زیر در این لینک قرار دارد

مقدمه‌ای بر Oracle Streams

همانطور که گفتم در نسخه‌های اخیر Oracle GoldenGate جایگزین Oracle Streams شده

در بحث Oracle DataGuard قضیه sync بین primaryها و standbyها یکطرفه است. ولی در سناریو Streaming شما می‌تونید sync دوطرفه داشته باشید. یعنی ۲ تا پایگاه داده داشته باشید که در هر ۲ وقتی کاربران اطلاعات وارد و یا آپدیت می‌کنن اطلاعات نوشته میشه و در نهایت این ۲ سرور اط نظر اطلاعات یکی هستند.

همچنین شما می‌تونید کاربرد خاص‌تری از streaming بگیرید و فقط یکسری از جداول و schema های خاص رو در هر ۲ باهم sync کنید.(از سرور مبدا به سرور مقصد)

Oracle Streams یا Oracle GoldenGate قابلیت انعطاف‌پذیری بسیار بالایی داره، شما می‌تونید حتی دیتابیس اوراکل رو با پایگاه‌‌داده‌های دیگه‌ای غیر از اوراکل (مثل DB2, SQL Server, …) بیاین و sync کنید.

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

مقدمه‌ای بر معماری Oracle Data Guard

خب میخوایم یه ذره راجع به DataGuard و انواع اون صحبت کنیم.

پرکاربردترین نوع Oracle Data Guard نوع Physical Standby هست. توی Physical Standby دیتابیس شما در وضعیت readonly قرار می‌گیره و تضمین میکنه که داده‌های شما از بین نمیره در صورتی که دیتابیس‌ها باهم sync باشند.

نحوه کپی اطلاعات برای sync کردن توسط Archive Redo Logsها هستش. در حقیقت وقتی Archive Redo Log File ها در سمت دیتابیس primary ساخته میشه به سمت سرور standby فرستاده میشه و با استفاده از standby Redo Log File ها بر روی سرور standby قرار می‌گیرند (apply می‌شوند)

همچنین شما می‌تونید از سرور physical standby بک‌آپ هم بگیرید.

به شکل زیر توجه کنید:

خب همانطور که گفتم physical standby به صورت readonly هستش، حالا اگر شما می‌خواهید تغییراتی در سرور standby داشته باشید باید این دیتابیس در وضعیت read/write قرار بگیره.

برای انجام اینکار باید سرور physical خود را به سرور logical تبدیل کنید. توی این حالت redo فایلها تبدیل به دستروات sql میشه و بعد بر روی سرور logical شما apply میشه.

کاربرد این حالت بیشتر روی سرورهای گزارش‌گیر هستش که شما می‌تونید indexهای متفاوت و یا materialized view های متفاوت تعریف کنید و یا برای تیم‌های دولوپ که فرضاً احتیاج به یسری بک‌آپ از سرور دارند می‌تونند از این سرور logical استفاده کنند و بک‌آپ‌ها رو روی این سرور import کنن و ازش استفاده کنند.

مثال

فرض کنید database primary شما در تهران است، می‌خواهیم ۲تا سایت داشته باشیم و به صورت ریموت از این ۲تا سایت استفاده کنیم که اگر زمانی مشکلی برای سرور تهران پیش اومد شما به physical standby که در تبریز هست سوییچ کنید بدون اینکه مشکلی توی سیستم به وجود بیاد همچنین می‌تونیم یک logical standby توی یک شهر دیگه فرضاً شیراز داشته باشیم و از این logical برای گزارش‌گیری استفاده کنیم و یا حتی از logical به عنوان یک سرور standby دیگه استفاده کنیم و روش سوییچ بزنیم.

قابلیت Far Sync – Road Map

این قابلیت در نسخه 12c معرفی شده که در این تکنولوژی دیگه instance اهمیتی نداره و پهنای باند شما هر چقدر باشه با استفاده از این تکنولوژی می‌تونید سرور stanby رو راه‌اندازی و مدیریت کنید.

در این قابلیت شما می‌تونید چندین دیتابیس stanby داشته باشید که سرور primary اونها رو سرویس میده.

در این حالت شما می‌تونید هم سرور Physiacl Standby داشته باشید و هم Logical Standby

معماری این حالت هم شبکه ۱ به n هست یعنی شما می‌تونید n تا سرور داشته باشید که از سمت primary به standby ها آرشیوها ارسال بشود.

همچنین در سرعت‌های پایین شبکه نیز این معماری قابل استفاده است.

به طور خلاصه:

  • پشتیبانی از چند دیتابیس standby
  • استفاده از Pgusical & Logical Standby
  • معماری شبکه یک به چند
  • پشتیبانی در سرعت‌های پایین شبکه

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

لیست تغییرات جدول توسط کاربران

س: لیست تغیراتی که کاربران بر روی جدول T1 داده‌اند را نمایش دهید:

ج: با استفاده از کوئری زیر می‌توانید به این هدف برسید.

SQL> select commit_timestamp , logon_user, XID from flashback_transaction_query
where table_NAME='T1';
COMMIT_TI LOGON_USER                     XID
--------- ------------------------------ ----------------
12-MAY-15 MAHDI 02000000B8090000
12-MAY-15 MAHDI 02000000B8090000
12-MAY-15 MAHDI 02000000B8090000
12-MAY-15 MAHDI 08001C00C6090000

گزارش بالا لیست commitهایی که کاربران رو سطح دیتابیس رو جدول t1 انجام داده‌اند.

نکته: این گزارش نمونه‌ای از اطلاعات دیتادیکشنری است. همچنین همانطور که مشاهده می‌کنید این گزارش از flashback_transaction_query گرفته شده است.

XID = شماره پیگیری transaction است.

نمایش لیست فیلدهای جدول flashback_transaction_query

SQL> describ flashback_transaction_query;
Name Null? Type
----------------------------------------- -------- -----------------
XID                                                 RAW(8)
START_SCN NUMBER
START_TIMESTAMP DATE
COMMIT_SCN NUMBER
COMMIT_TIMESTAMP DATE
LOGON_USER VARCHAR2(30)
UNDO_CHANGE# NUMBER
OPERATION VARCHAR2(32)
TABLE_NAME VARCHAR2(256)
TABLE_OWNER VARCHAR2(32)
ROW_ID VARCHAR2(19)
UNDO_SQL VARCHAR2(4000)

نکته: اگر در حالت audit نباشید فیلد undo_sql, row_id اطلاعاتی در خود ندارد.

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

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

نصب پایگاه داده اوراکل 12c بر روی فدورا 20

قبل از خواندن این راهنما، اوراکل را بر روی فدورا نصب نکنید!!
این مقاله نصب پایگاه داده اوراکل 12c ریلیز 1 نسخه 64 بیتی را بر روی فدورا ۲۰ نسخه ۶۴ بیتی توضیح می‌دهد. این مقاله بر مبنای نصب اوراکل بر روی سرور با حداقل ۲ گیگابایت swap و لینوکس امن در حالت permissive را آموزش می‌دهد برای نمونه ای از این نوع نصب می‌توانید اینجا را ببینید.

دانلود نرم افزار

با توجه به شرایط پشتیبانی‌تان، نرم افزار اوراکل را از اوتی‌ان یا ام‌او‌اس دانلود کنید.

(OTN: Oracle Database 12c Release 1 (12.1.0.1) Software (64-bit

(edelivery: Oracle Database 12c Release 1 (12.1.0.1) Software (64-bit

بازکردن فایل‌ها
فایل ها را از حالت زیپ خارج کنید.

unzip linuxamd64_12c_database_1of2.zip
unzip linuxamd64_12c_database_2of2.zip

حالا شما می‌بایست یک دایرکتوری به نام database داشته باشید که شامل فایل‌های نصبی شود.

ادامه مطلب
ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

ایجاد پروفایل

مستند اوراکل

CREATE PROFILE

مقدمه

نکته: role دلالت بر قدرت یک کاربر دارد در حالی که profile دلالت بر ضعف یک کاربر دارد. شما با دادن role های مختلف به کاربر آن کاربر را قوی می‌کنید و با ایجاد profile برای کاربر آن کاربر را محدود خواهید کرد.

profile بر ۲ دسته تقسیم می‌شود. یعنی ۲ نوع تنظیم(محدودیت) را می‌تواند در داخل خودش داشته باشد.

  1. تنظیمات سخت‌افزاری و physical
  2. تنظیمات امنیتی

نکته: توی اوراکل ما با profile می‌توانیم محدود کنیم یک کاربر را که چند بلاک از cpu‌ را توی سرور ما اشغال کند.

نکته: با ایجاد Profile به این نکته پی خواهید برد که چقدر دیتابیس در اپلیکیشن تاثیر گذار است.

ادامه مطلب
ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

توابع زبان SQL در اوراکل

تمام دیتابیس‌ها یسری FUNCTIONها دارند که ما می‌توانیم از این فانکشن‌ها استفاده کنیم.

فانکشن‌ها قطعه کدهایی هستند، که از پیش تعریف شده‌اند تا شما را در امور مختلف یاری نمایند. لازم به ذکر است شما می‌توانید در زبانی دیگر، به نام PL-SQL توابعی را به دلخواه، طراحی و در دستورات SQL از آن استفاده نمایید. فانکشن‌ها، موارد زیر را شامل می‌شوند:

  • فانکشن‌های پردازش‌رشته،
  • فانکشن‌های ریاضی،
  • فانکشن‌های تاریخ و زمان،
  • فانکشن‌های جمعی،
  • و سایر فانکشن‌ها

همچنین این فانکشن‌ها ۲ گروه عمده رو تشکیل می‌دهند:

  1. فانکشن‌های یک RESULTای
    1. یعنی وقتی فانکشن رو روی یک جدول صدا می‌کنیم فقط یک RESULT برمی‌گردونه
  2. فانکشن‌های چند RESULTای
    1. یعنی وقتی فانکشن رو روی یک جدول صدا می‌کنیم به ازای هر رکورد یک RESULT جدید برمی‌گردونه

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

اوراکل یکی از پر تعدادترین فانکشن‌ها را در میان بانک‌های‌اطلاعاتی دارد. بعد از اوراکل MYSQL و بعد از اون DB2 و بعد از DB2 پرتعداترین فانکشن را MS SQL SERVER دارد.

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

توابع ریاضی – Ceil, Floor, Round

CEIL

این تابع، یک عدد را به عدد بزرگتر بعد از آن گرد می‌کند. به مثال زیر، که به کارگیری این تابع را نشان می‌دهد، توجه کنید.

SELECT A,CEIL(A) FROM NUM_TEST;

همان‌گونه که در زیر مشاهده می‌کنید، داده‌های فیلد A، به عدد بزرگتر از خود گرد شده‌اند.

A      CEIL(A)
------ --------------
-5.65 -5
6.1 7
11 11
.33 1
-10 -10
1.598 2

ادامه مطلب
ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

session در اوراکل

هرگاه کاربری به بانک اطلاعاتی متصل گردد، بانک اطلاعاتی برای کاربر مذکور یک جلسه یا همان SESSION ایجاد می‌کند، با استفاده از دستور زیر می‌توان کاربرانی که با نام کاربری SYSTEM به اوراکل متصل شده‌اند را مشاهده کرد.

SELECT SERIAL# , SID , USERNAME , MACHINE , STATUS , PROGRAM FROM V$SESSION WHERE USERNAME =’SYSTEM’;

حال اگر بخواهیم SESSION کاربری را حذف نماییم و باعث قطع ارتباط کاربر شویم میتوانیم از دستور زیر استفاده کنیم.

ALTER SYSTEM KILL SESSION ’75,20’;

دقت داشته باشید که عدد 75 به SID اشاره کرده و عدد 20، SERIAL# است. برای یافتن تعداد SESSION های فعال می‌توان از دستور زیر استفاده کرد.

SELECT SESSIONS_CURRENT FROM V$LICENSE;

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

انواع DataTypeها در اوراکل

بانک اطلاعاتی برای نگهداری داده‌های مختلف نوع‌های مختلفی از فیلد را به شما ارائه می‌کند:

مثال:

CREATE TABLE T1(ID NUMBER(10,10), NAME VARCHAR2(20));
  • نوع داده‌ای NUMBER

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

ID ما که از جنس NUMBER است، میتونه ۲تا پارامتر بگیره اولین پارامتر یعنی ۱۰ رقم صحیح و دومین پارامتر یعنی ۱۰ رقم اعشاری

نکته: اوراکل حداکثر توانایی نگه‌داری ۳۲ رقم رو داره

  • نوع داده‌ای VARCHAR2

جهت نگهداری اطلاعات رشته‌ای با طول متغییر می‌توانید از نوع VARCHAR2 استفاده کنید.

SIZE در این نوع کاراکتر به صورت رقم در جلوی آن مشخص می‌شود.

  • نوع داده‌ای NVARCHAR2

همانند VARCHAR2 می‌باشد. و جهت نگهداری متون چینی، ژاپنی، پارسی، عربی و… می‌توانید از این نوع داده استفاده نمایید.

  • نوع داده‌ای CHAR

جهت نگهداری اطلاعات رشته‌ای با طول ثابت می‌توانید از نوع CHAR استفاده کنید.

CHAR هم  SIZE می‌گیره

  • نوع داده‌ای NCHAR

همانند CHAR می‌باشد. و جهت نگهداری متون چینی، ژاپنی، پارسی، عربی و … می‌توانید از این نوع داده استفاده نمایید.

فرق VARCHAR و CHAR

CHAR طول ثابت داره یعنی اگه ما داده‌ای در آن ذخیره کنیم که مثلا ۴ حرف باشه در حالتی که سایز وارده به CHAR رو ۲۰ کاراکتر مشخص کرده‌ایم، ۱۶ کاراکتر برای ما خالی رد می‌شه و حجمی اضافه‌تر از داده ما را ذخیره می‌کند.

اما در VARCHAR و NVARCHAR سایز ما اگر کمتر از مقدار وراد شده باشد به همون میزان کاراکتر وارده سایز جمع می‌شود.

مثال

معمولاً برای داده جنسیت ما از CHAR استفاده می‌کنیم، به عنوان مثال Female می‌شه 0 و Male می‌شه 1 و 2 هم وضعیت مجهول جنسیت رو برای ما مشخص می‌کنه، در این مورد به جای استفاده از CHAR می‌توان از NUMBER هم استفاده کرد.

نکته: برای زمان‌هایی که می‌خواهیم مقادیر TRUE, FALSE در دیتابیس وارد کنیم استفاده از CHAR توصیه می‌شود.

  • نوع داده‌ای DATE

جهت نگهداری اطلاعات تاریخی می‌توانید از نوع DATE استفاده کنید.

نکته: اوراکل تاریخ شمسی رو پشتیبانی می‌کنه

  • نوع داده‌ای CLOOB

جهت نگهداری اطلاعات رشته‌ای طولانی می‌توانید از نوع CLOB استفاده کنید.

  • نوع داده‌ای BLOOB

همانند CLOB بوده و جهت نگهداری متون چینی، ژاپنی، پارسی، عربی، … می‌توانیدازاین نوع داده استفاده نمایید.

 

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

استفاده نکردن از JOIN در اوراکل

یادآوری

یسری قواعد جامعیتی در بانک‌اطلاعاتی اوراکل وجود داره که شما می‌تونید از اونها در این بانک استفاده کنید کار این قواعد اینه که شما هرچی خواستید رو نتونید به عنوان داده در بانک وارد کنید.

مثال:

CRAETE TABLE T2(ID NUMBER PRIMARY KEY, NAME VARCHAR2(20));

به چند چیز باید توجه کنیم(چون ID به عنوان PRIMARY KEY) تعریف شده):

  • ID نمی‌تونه NULL باشه
  • ID نمی‌تونه تکراری باشه
INSERT INTO T2(ID, NAME) VALUES(1, 'MAHDI');

همونطور که در زیر می‌بینید با یکسان قرار دادن ID پایگاه داده خطایی به ما برمی‌گرداند:

INSERT INTO T2(ID, NAME) VALUES(1, 'EHSAN');
*
ERROR at line 1:
ORA-00001: unique constraint (MGHAFFARI.SYS_C0010911) violated

حالا ID احسان رو می‌ذاریم ۲ و INSERT رو انجام می‌دیم:

INSERT INTO T2(ID, NAME) VALUES(1, 'EHSAN');
*
ERROR at line 1:
ORA-00001: unique constraint (MGHAFFARI.SYS_C0010911) violated

وحالا می‌خوایم ID رو NULL رد کنیم:

INSERT INTO T2(NAME) VALUES('EHSAN');
*
ERROR at line 1:
ORA-01400: cannot insert NULL into (MGHAFFARI.SYS_C0010911) violated

همونطور که می‌بینید نمی‌تونیم مقدار NULL رد کنیم.

ادامه مطلب
ادامه مطلب