جلوگیری از log کردن داده‌های تغیر پیدا کرده در TableSpace

برای این کار از دستور زیر موقع ایجاد TableSpace استفاده می‌کنیم:

create tablespace ts datafile 'd:\root\a.dbf' size 100m nologging;
۱۳ ارديبهشت ۹۴ ، ۲۰:۳۴ ۰ نظر
مهدی غفاری

مخفی‌کردن TableSpcae برای کاربران

در طول کارتان شاید به این نیاز پیدا کنید که یکسری از TableSpaceها را از دسترس خارج کنید تا هیچ عملیاتی نتوان روی TableSpace مورد نظر انجام داد(نه میشه دیتا رو ازش خوند نه میشه دیتا روش نوشت پس جداولی که روی اون TableSpace هستند کلاً از کار می‌افتند):

ممکنه تو یه محدوده زمانی خاص نخواین روی این TABLESPACE عملی انجام بشه، مثلاً یکجور EXPORT خاص از دیتابیس می‌خواین بگیرین اونوقت باید آفلاین کنید یا وقتی می‌خواین دیتافایلهای یک TABLESPACE رو REPAIR کنید.

نکته: اگر تراکنشی با جدولی در ارتباط باشه که شما می‌خواهید TABLESPACE اون جدول را آفلاین کنید بلافاصله کل تراکنش ROLLBACK میشه.

SQL> CREATE TABLESPACE TS DATAFILE 'E:\A.DBF' SIZE 100M ;
Tablespace created.
SQL> ALTER TABLESPACE TS OFFLINE;
Tablespace altered.
SQL> ALTER TABLESPACE TS ONLINE;
Tablespace altered.

۱۳ ارديبهشت ۹۴ ، ۲۰:۲۳ ۰ نظر
مهدی غفاری

حذف TableSpace با موجودیت‌ها و فایل‌های آن

برای حذف tablespace با موجودیت‌ها و فایل‌های آن از دستور زیر استفاده می‌کنیم:

Drop tablespace <tablespace_name> including contents and datafiles;

نکته: ساختار Table نیز در دستور بالا از بین می‌رود و دیگر نمی‌توان در آن Table ورود داده کرد.

برای حذف tablespace با موجودیت‌ها و فایل‌های آن و جداولی که در این Tablespace نیستند ولی با آن در ازتباط هستند:

Drop tablespace <tablespace_name> including contents and datafiles cascade constraints;

۱۳ ارديبهشت ۹۴ ، ۲۰:۰۲ ۰ نظر
مهدی غفاری

ساخت TableSpace با رشد خودکار فضا

فضایی بسازید که تا 200mb به طور خودکار 10m 10m رشد می کند: (در صورتی که maxsize مشخص نشود فضا می‌گیرد)

SQL> create tablespace ts datafile 'd:\root\a.dbf' size 100m reuse autoextend on
next 10m  maxsize 200m;

در دستور بالا 100mb سایز اولیه TableSpaceامون است اگر این مقدار فضای اولیه پر شود به طور خودکار 10m 10m به فضا اضافه می‌شود تا به 200m برسد. در صورتی که فضای maxsize مشخص نگردد تا جایی که مدیا ذخیره‌سازی اجازه دهد به DataFile ما 10m 10m اضافه می‌شود.

نکته: عددی که برای رشد DataFile مشخص می‌کنیم بسیار مهم است. اگر این عدد را زیاد بگیریم فضای مدیای‌ذخیره‌سازی ما از بین می‌رود چون این فضا به طور کامل اشغال و توسط اوراکل رزرو می‌شود و ممکن است دیتای ما آنقدر فضا نیاز نداشته باشد. اگر این عدد را کم بگیریم (مثلا ۱ کیلوبایت) اینجوری مدیای ذخیره‌سازی ما فضای هدر شده ندارد ولی تو این مدت که بخواد به 200m برسه بار بسیار وحشتناکی رو CPU سرور ما داره چون به ازای هر کیلوبایت می‌خواد فایل رو extend کنه پس performance سیستم به شدت پایین می‌آید.

نکته: من ترجیح می‌دم فضای از دست رفته‌ام زیاد باشه نه اینکه بار CPU ام زیاد بشه و performance سیستم پایین بیاد

س: آیا با اضافه کردن به دیتا‌فایل در مدیای ذخیره‌سازی ما Gap ایجاد می‌شود؟

ج: این بستگی به سیستم‌عامل و سیستم‌فایلتان دارد و به اوراکل به صورت معمولی در حالت FileSystem ربطی ندارد. مگر در حالت ASM باشید که در این حالت اوراکل هیچ Gap ای در مدیای ذخیره‌سازی شما ایجاد نمی‌کند.

۱۳ ارديبهشت ۹۴ ، ۱۹:۳۵ ۰ نظر
مهدی غفاری

ساخت یک TableSpace با ۲ دیتافایل

برای ایجاد یک TableSpace با ۲ دیتافایل در زمان ایجاد TableSpace به صورت زیر عمل می‌کنیم:

نکته: من معمولاً‌این کار رو انجام نمیدوم و به صورت معمولی یک TableSpace‌می‌سازم و دیتافایل‌هایی را در آینده به آن وصل می‌کنم.

create tablespace homeworkts
datafile 'D:\oradata\orcl\df1.dbf' size 4m ,
    'D:\oradata\orcl\df2.dbf' size 4m;
۱۳ ارديبهشت ۹۴ ، ۱۹:۲۴ ۰ نظر
مهدی غفاری

اضافه‌کردن فضا به TableSpace

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

alter tablespace <tablespace_name>  add datafile <url> size <size>;

مثال:

alter tablespace ts  add datafile 'd:\root\b.dbf' size 100m;

نکته: مسیر tablespace شما می‌تواند در شبکه نیز باشد. حتی می‌تونه تو درایوهای دیگر و هر نوع مدیای ذخیره‌سازی نظیر: هارد اکسترنال، فلش، رم و ... باشد.

نکته: اگر هر کدوم از DataFileهای ما از شبکه خارج شوند یا از حالت mount بیرون بیایند موقع start کردن اوراکل به مشکل جدی می‌خورید و اورکل تا همه DataFileهای مد نظر را نداشته باشد دیتابیس را  startup open نمی‌کند.(به صورت کلی باید DataFile همیشه باشد و بدون نبود DataFile به هیچ‌وجه نمی‌توان دیتابیس را startup open کرد برای همین پیشنهاد می‌کنم که همیشه Backup داشته باشید)

نکته: در این موارد بهترین کار flash recovery است.

نکته: اگر بخواهید یک table‌ را روی چند tablespace پراکنده کنیم باید حتماً partitioning کنید و جالبه بدونید که قبل از ورژن 11g اوراکل اجازه اینکار را اصلاً نمی‌داد چون اصلاً بحث partitioning مطرح نبود.

س: چرا وقتی می‌توان چند DBF را به یک TableSpace اضافه کرد باید از چند TableSpace برای ذخیره‌سازی یک جدول استفاده کرد؟

ج: به خاطر سرعت index گذاری و cache اولیه - مثلاً وقتی می‌گیم select * from person where age =20 اوراکل به صورت پیش‌فرض اصلاً به where شما گوش نمی‌دهد اما حالا فرض کنید فضای SGA فضای کافی نباشه که بتونه کل جدول رو لود کنه (این مثال در مورد جداول بسیار بسیار حجیم صحت دارد مثلاً جدول ۱ اگزابایتی) خب شما نمی‌تونید رم ۱ اگزابایتی پیدا کنید که کش رو تو فضای SGA انجام بده پس کش کامل انجام نمیشه و همونطور که قبلاً گفتم اوراکل در این مورد خورد خورد عمل میکنه و تیکه تیکه دیتا رو برای کش میاره و در این حالت وقتی میخواد بره تیکه تیکه بیاره وقتی میبینه اندازه کش کافی نیست به سرعت میره و فقط اون قسمت where رو پیدا میکنه و کش میکنه و شما اگه partitioning اتون رو بر مبنای age کرده باشید اوراکل به سرعت اون DataFile‌رو پیدا میکنه و کش میکنه به این حالت میگن (کش اولیه یعنی زمانی که میخواد برای بار اول کش رو انجام بده)

یعنی زمانی که برای کش فضای خالی به اندازه کافی نباشد اوراکل به where شما توجه می‌کند و از partitioning به نفع خودش استفاده می‌کند تا به دیتا فایلی برسد که داده ما درون آن است.(این فقط در مورد tableهای وحشتناک سنگین صدق می‌کند)

ادامه مطلب...
۱۳ ارديبهشت ۹۴ ، ۱۶:۱۶ ۱ نظر
مهدی غفاری

TableSpace

یکی از مباحث خیلی مهم در سطح دیتابیس Tablespaceها هستند.

گفتیم رکوردهای ما رو سطح DataFile ذخیره می‌شوند، حال اگر بخواهیم DataFile را در سطح اوراکل ایجاد کنیم علاوه بر DataFile ای که قبلاً رو سطح دیتابیس وجود داشته باید از سک دستور SQL استفاده کنیم.

توی اوراکل مدیریت DataFileها و دسته‌بندی DataFileها توسط یک موجودیت منطقی مدیریت میشه به نام موجودیت Tablespace پس وقتی ما یک DataFile ایجاد می‌کنیم بعد از ایجاد DataFile مورد نظرمون اونو داخل یک tablespace می‌ذاریم بعد جدولمون رو به tablespaceامون وصل می‌کنیم.

پس DataFile رو ایجاد می‌کنیم DataFile یک ساختار فیزیکی داره به یک tablespace لینکش می‌کنیم بعد جداولمون رو به tablespaceامون وصل می‌کنیم. جدول ما از لحظه‌ای که به tablespaceامون وصل میشه اطلاعاتش رو میریزه در داخل DataFile ای که به Tablespace مدنظر وصل شده است.

به این ترتیب مدیریت DataFileها توسط Tablespace انجام می‌شود و شما هیچوقت یک جدول رو به طور مستقیم به یک DataFile وصل نمی‌کنید همیشه یک جدول رو به یک Tablespace وصل می‌کنید.

Tablespace در اصل واسط شما و DataFileتون است.

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

نحوه نصب و فعال‌کردن مخزن EPEL در RHEL/CentOS/Oracle Linux

EPEL ( سرنام عبارت Extra Packages for Enterprise Linux=بسته‌های اضافی برای انترپرایز لینوکس) یه repo است که توسط پروژه‌ی فدورا توسعه داده شده تا امکان استفاده از بسته‌های مستقل اما با کیفیت برای کاربران انترپرازها، نظیر کسانی که از RHEL, Cent OS, Oracle Linux  و Scientific Linux استفاده می‌‌کنند، وجود داشته باشد. این‌ها همگی انترپرایزهای لینوکسی پرکاربردی هستند که با بسته‌هایی پیش‌فرض، کاملاً بررسی‌شده و به طور رسمی تطبیق داده شده و عرضه می‌شوند، به همین خاطر در نر‌م‌افزارهای نصب‌شده بر روی آن‌ها، باگ‌های کمتری یافت می‌شود. اما مواردی هم وجود دارد که در آن‌ها یک نرم‌افزار مستقل پر کاربرد جزو فهرست رسمی آن انترپرایز نیست. به عنوان مثال نرم‌افزار Puppet، ابزار پیکربندی فوق‌العاده‌ای است که در repoهای رسمی وجود ندارد. راه‌حل مشکل ذکر شده، فعال‌کردن مخازن EPEL بر روی انترپرایز لینوکس شما است.

ادامه مطلب...
۱۲ ارديبهشت ۹۴ ، ۱۶:۲۱ ۰ نظر
مهدی غفاری

راهنمای تصویری برای نصب مقدماتی فدورا 20

این مقاله در حقیقت یک راهنمای تصویری برای نصب مقدماتی فدورا 20 است.

نصب مقدماتی

فدورا را از روی دی‌وی‌دی بوت کنید. از کلید بالا برای دسترسی به گزینه‌ی «نصب فدورا» استفاده کنید و کلید بازگشت را بزنید.

ادامه مطلب...
۱۲ ارديبهشت ۹۴ ، ۱۵:۵۸ ۰ نظر
مهدی غفاری

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

یه وقتایی هست که می‌خوایم دیتابیس رو ببریم رو حالتی که از نظر عموم کاربران در دسترس نیست در واقع دیتابیس تو این حالت open ایت ولی فقط برای ادمین‌های قدرمتند اوراکل open است. اصطلاحاً به این ادمین‌ها ادمین‌های restrictED گفته می‌شود.(یعنی ادمین‌هایی که می‌خوان با دسترسی مشخص به دیتابیس وصل بشوند)

با زدن دستور زیر دیتابیس ما به حالت restrict می‌رود:حالت یواشکی  (روی کاربران جاری اثر ندارد و هیچ کس به جز خود شما و کاربر SYS دسترسی به دیتابیس را ندارد)

alter system enable restricted session;

اگر خواستیم از این حالت خارج بشیم به شکل زیر عمل می‌کنیم:

alter system disable restricted session;

س: چه کاربرانی می‌توانند تو مد restric به دیتابیس وصل بشوند؟

ج: فقط کاربرانی که role زیر را داشته باشند می‌توانند به دیتابیس وصل شوند:

grant sysdba to [USER];

نکته: role کاربر system به صورت پیش‌فرض dba و role کاربر sys به صورت پیش‌فرض sysdba است:

system = dba
sys = sysdba

بردن به حالت یواشکلی (روی کاربران جاری اثر ندارد و فقط مدیران(role dba) دسترسی دارند):

alter system quiesce restricted;

خارج کردن از این حالت:

alter system unquiesce;
۱۲ ارديبهشت ۹۴ ، ۱۱:۵۲ ۰ نظر
مهدی غفاری