۱۳۰ مطلب با موضوع «Database :: Oracle DBA» ثبت شده است

عوض کردن DB_NAME دیتابیس با استفاده از NID

یکی از مشکلاتی که ممکنه براتون پیش بیاد اینه که بعد از ساخت دیتابیس جدید بخواین به هر علتی DB_NAME رو به مقداری دیگه تغییر بدید

درسته که تغییر DBID با nid، اثرات غیرقابل برگشتی روی توانایی‌های بک‌آپ و ریکاوری داره، اما تغییر DB_NAME دیتابیس به‌طور چشمگیری پیامدهای کمتری داره، چون:

  1. بک‌آپ‌هایی که قبلاً گرفته شده‌اند را بی‌اعتبار نمی‌کنه
  2. آرشیولاگ‌هایی که قبلاً ساخته شده‌اند را بی‌اعتبار نمی‌کنه
  3. به open کردن پایگاه داده به وسیله‌ی ریست‌لاگ نیازی نداره

خب بیایید db_name پایگاه داده را بدون تغییر dbid دیتابیس تغییر بدیم. (نکته: در هر حال باید حواستان به اثرات احتمالی هم باشه) 

SQL> shutdown immediate;
Database dismounted.
ORACLE instance shut down.

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

charcter setهای دیتابیس برای داده فارسی

  • AR8MSWIN256
  • AL16UTF8
  • AL32UTF8
  • UFT8

AR8MSWIN256

نکته: قدیمها به جای AR8MSWIN256 از WE8ISO8859P1 استفاده میکردن بدون اینکه دلیلش رو بدونن، در حقیقت این استاندارد قبل از اومدن AR8MSWIN256 رواج داشت ولی دیگه قابل قبول نیست

AR =همون Arabic

تو ویندوز XP اگه به قسمت Regional and Language Option برید تو قسمت Code page conversion table استاندارهای ذخیره کاراکترها رو می‌بینید (تو ویندوز اگه اسکرول کنید بیاین پایین استاندارد 1256 (ANSI - Arabic) رو می‌بینید)

تو این استاندارد ذخیره‌سازی به غیر از حروف عربی ۴ حرف اضافه فارسی هم اضافه شده (گچ پژ)

8 = یعنی ۸ بیت (۱ بایت)

نکته: ۱ بایت همیشه ۸ بیت نبود تو یونیکس‌های قدیمی ۱ بایت ۷ بیت بود

MS = مخفف Microsoft

WIN = مخفف Windows

256 = به همون 1256 اشاره داره

نکته: پس اگه دیتابیستون رو روی charcter set: AR8MSWIN256 بذارید هر کاراکتر ۱ بایت‌ه پس اگه بگیم (20)varchar2 ما می‌تونیم ۲۰ تا کاراکتر تایپ کنیم

AL16UTF8

AL = همون Alternative

16 = یعنی ۱۶ بیت یا همون ۲ بایت

پس هر کاراکتر AL ما ۲ بایت میگیره

پس اگه ما یکبار 'mahdi' رو به صورتی انگلیسی تایپ کنیم ۵ بایت اشغال میشه

و برای 'مهدی' ۸ بایت اشغال میشه

AL32UTF8

AL = همون Alternative

32 = یعنی ۳۲ بیت یا همون ۴ بایت

پس هر کاراکتر AL ما ۳۲ بایت میگیره

پس اگه ما یکبار 'mahdi' رو به صورتی انگلیسی تایپ کنیم ۵ بایت اشغال میشه

و برای 'مهدی' ۱۶ بایت اشغال میشه

UFT8

utf8 برای همه نوع کاراکتر ۳ بایت اشغال میکنه

پس وقتی از char موقع ایجاد جدولتون استفاده می‌کنید دقیقاً بسته به character set دیتابیستون شما کاراکترها رو مشخص می‌کنید

مثلاً اگه بگید:

varchar2(20) char => دقیقاً 20 کاراکتر میشه در این فیلد ذخیره کرد حالا بسته به character set دیتابیس ممکنه هر حرف رو ۲ بایت، ۳ بایت، ۴ بایت در نظر بگیره

برای آشنایی بیشتر با character setها به سایت http://unicode.org سر بزنید.

همچنین خوبه به این مستند مایکروسافتی هم سر بزنید.

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

انواع Data Type در Oracle Database 11g

  • varchar استاندارد ANSI داره
  • varchar2 استاندارد oracle رو داره (ماکزیمم 4000 بایت تو 11g و 32767 بایت تو 12c)
  • char به صورت ماکزیمم 255 بایت یا کاراکتر رو ساپورت میکنه
  • nvarchar2 به صورت ماکزیمم 2000 بایت یا کاراکتر
  • number به صورت ماکزیمم ۳۸ رقم
  • date شامل "قرن، سال، ماه، روز، ساعت، دقیقه، ثانیه" داره
  • timestamp تمام date رو داره بعلاوه اینکه ثانیه تا ۹ رقم ریزتر هم میشه
  • long برای کاراکتر استفاده میشه و ماکزیمم اون ۲ گیگ‌ه
  • long raw برای فایلهای باینری هستش و برای فایل‌های pdf, doc, mp3, avi, dll, ... هستش ماکزیمم ۲ گیگ

LOBs یا همون Large Objects

  • clob به صورت کاراکتره و ماکزیمم ۴ گیگ‌ه
  • nclob به صورت کاراکتر با ساپورت کاراکترهای national و ماکزیمم ۴ گیگ‌ه
  • blob به صورت binary برای فایلهای باینری هستش و برای فایل‌های pdf,rtf, doc, mp3, avi, dll, ... هستش، ماکزیمم ۴ گیگ
  • bfile در این type فایل‌ها به صورت اکسترنال و روی OS قرار داردند و درون bfile اشاره‌گر به فایل قرار دارد، ماکزیمم ۴ گیگ
  • securefile همون blob با سرعت و کارایی بیشتر

تفاوت بین long و long raw و LOBها

1:

اگه فیلدهای جدول شما به صورت زیر باشه به طور قطع شما موقع ساخت جدول به مشکل میخورید:

create table e(
e_id number(20),
f_name varchar(40 char),
...,
...,
cv long,
img long raw
);

نکته اینجاست که در یک جدول ۲ فیلد long نمیتوان داشت

2:

سرعت خوندن در log و LOBها متفاوته

در حقیقت long و long raw به صورت sequencial از حافظه میخونن(سریالی) و LOBها به صورت random access(مستقیم)

3:

در اوراکل با contex index یا همون oracle text میشه فیلدهای blob رو به صورت لغت به لغت ایندکس‌گذاری کرد همچنین به طور کامل از فارسی پشتیبانی میکنه

نکته: روز فیلدهای blob و clob نمیتوان index معمولی (b-tree ,bitmap) گذاشت

نکته: اگه فایل pdf داشته باشید context index نمیتونه فارسی‌ها رو ایندکس بکنه و فقط انگلیس‌ها رو ایندکس میکنه

4:

ذخیره فایلهای باینری مثل فیلم و موزیک در bfile عملکرد بهتری نسبت به فقط ذخیره آدرس فایل در varchar یا ... دارد

مثلا فرض کنید OS ما ویندوزه و فایلهای ما هم در درایوهای ویندوز قرار داره پس موقع ذخیره آدرس فایل در varchar آدرس فایلها به صورت ویندوزی است در این حالت اگه مسیر فایلها رو عوض کنیم کل مسیرهای ذخیره شده در دیتابیس هم باید عوض شود همچنین اگه سیستم‌عاملمون رو عوض کنیم و به unix baseها یا unix likeها که از استاندارد POSIX استفاده میکنن بریم دوباره کل مسیرها باید عوض شوند تازه اگه فایلها تو انتقال طبقه‌بندی و از هم جدا بشن درست کردن مسیرها بسیار کار مشکلی خواهد بود

برای رهایی از این مشکلات از bfile استفاده می‌کنیم و با ایجاد یک آبجکت دایرکتوری در دیتابیس مسیر فایلها رو ذخیره می‌کنیم در این رویکرد اگه سیستم‌عامل عوض شود یا بخوایم مسیر رو عوض کنیم فقط مسیر دایرکتوری رو عوض می‌کنیم

مزیت دیگه bfile نسبت به varchar برای ذخیره آدرس فایلها اینه که میتونیم رو فایلها ایندکس بذاریم(مثلا ایندکس روی doc, docx, rtf, ...) در صورتی که اگه از نوع varchar باشه فقط روی رشته‌ها ایندکس انجام میشه

اگه blob رو به bfile ببریم اولین مشکل میتونه تو خراب شدن پسوند فایلها در OS به وجود بیاد، دومین مشکل سر export گیری هستش اگه فایلها توی blob باشن با یه export تمام فایلها هم بک‌آپ گرفته میشن همچنین حجم بک‌آپ بالاتر میره

char

وقتی از data type char استفاده می‌کنید داده‌ها تو حافظه به صورت fix ذخیره می‌شوند

(پس سایز char به صورت fix ‌است) مثلاً:

Mahdi char(20) => 'Mahdi              '

مشکلات char

  • اشغال زیاد حافظه
  • مشکل در index و sort
  • مشکل در select (حتما باید موقع select ما trim کنیم رشته ورودی رو)
create table employees(
    employee_id number(10),
    f_name varchar2(40 char)
)

تو فیلد اول type ما در حقیقت 10 بایت‌ه و تعداد کاراکترهاش بسته به character set دیتابیس داره

و تو فیلد دوم type ما دقیقاً 40 کاراکتره

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

نگاهی بر معماری Oracle Database 11g - قسمت سوم

نگاهی بر معماری Oracle Database 11g - قسمت اول

نگاهی بر معماری Oracle Database 11g - قسمت دوم

LGWR

کار background process log writer اینه که تمام redo entryها رو که توی log buffer نوشته میشه رو توی redo log file بنویسه

LGWR تعداد نداره یعنی همیشه یکی است و اگه این background process پایین بیاد دیتابیس کلاً shutdown میشه

زمانهای نوشتن:

  • اگر کاربر دستور commit رو بزنه
  • وقتی که 1/3 redo log buffer پر بشه
  • قبل از شروع نوشتن بافر در دیسک توسط DBW
  • هر ۳ ثانیه یکبار

سرعت نوشتن LGWR بسایر بیشتر از DBW ه چون فقط به انتهای یک فایل باینری redo entryها رو میبره

LGWR به صورت چرخشی بین redo log file ها عمل میکنه که بهش log witch میگیم

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

نگاهی بر معماری Oracle Database 11g - قسمت دوم

نگاهی بر معماری Oracle Database 11g - قسمت اول

KEEP buffer pool

اگه جداول base ما در محاسباتمون زیاد استفاده میشه (موقع join ها) و گزارش‌گیری‌های زیادی ازشون انجام میشه برای اوراکل نمیصرفه هر دفعه اطلاعات شما رو بیاره تو database buffer cache پس اوراکل جدول رو KEEP میکنه یعنی جدول base رو میخونه میاره تو حافظه تو محفظه‌ی KEEP buffer pool پس دیتایی که دائما توی گزارش‌هامون مورد استفاده قرار میگیره و تغییراتی روش انجام نمیشه رو اوراکل به صورت KEEP نگه میداره مگر اینکه دیتابیس بیاد پایین یا برق سرور بره

همچنین این کار موقع ساختن جدول یا بعدش با دستور alter امکان پذیره همچنین می‌تونید برای اینکار اسکریپت هم بنویسید

 Alter table emp storage (buffer_pool Keep);

یه نمونه اسکریپت

Oracle Automating Script for KEEP Pool Caching Tables & Indexes db_keep_cache_size

BEST PRACTICE اینه که فقط جداول پایه با حجم کم رو KEEP‌ کنید در کل جداولی با داده کم و کاربرد زیاد مثل اطلاعات: شهرها، فرمولهای مالی، نرخ سود، نام دپارتمان‌ها و ...

 

نکته: هیچوقت یک جدول بالای 1 میلیون رکورد رو KEEP نکنید چون بی‌خودی حافظه رو میگیره

نکته: اگه دیتا زیاده و تغییرات داره بهتره از TimesTen استفاده بشه (این محصول دیتا رو کلاً میخونه میذاره تو حافظه بعد خودش دیتابیس رو مدیریت میکنه که اگه دیتا تغییر کرد دیتای حافظه هم تغییر کنه و ...)

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

نگاهی بر معماری Oracle Database 11g - قسمت اول

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

دریافت
حجم: 558 کیلوبایت
توضیحات: Less01_Architecture

دریافت
حجم: 23 مگابایت
توضیحات: تمام اسلایدهای اوراکل ورکشاپ ۱ به همراه اسکریپت‌ها 

نگاهی بر معماری Oracle Database 11g - قسمت اول

نگاهی بر معماری Oracle Database 11g - قسمت دوم

نگاهی بر معماری Oracle Database 11g - قسمت سوم

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

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

نحوه لیست کردن تمام tablespacesها در دیتابیس اوراکل

امروز به این موضوع خوردم

جواب خیلی راحته میشه از ستون tablespace_name از جدول dba_tablespaces یا user_tablespaces استفاده کرد.

select tablespace_name from dba_tablespaces;

منبع

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

لینک زدن به sql server بوسیله درایور odbc

هدف ما در این آموزش این است که بتوانیم یک لینک از اوراکل به sql server برقرار کنیم تا بتوانیم بوسیله دستورات sql ، از داخل اوراکل به داده‌های sql server دسترسی داشته باشیم. تاکید می کنم که فقط دستورات sql مجاز هست و نه plsql .


نیاز مندی ها
در این آموزش ما از اوراکل نسخه 11gr2 و sql server express 2008 r2 استفاده کرده ایم که هر دو نسخه 64 بیتی هستند. سیستم عامل تست هم windows 7 ultimate نسخه 64 بیتی هست. برای وصل شدن به sql server نیاز به درایور odbc برای این dbms داریم. نسخه 64 بیتی درایور odbc برای sql server از لینک زیر قابل دانلود هست:


http://www.microsoft.com/en-us/download/details.aspx?id=36434

 

ms odbc sql-sql server odbc x64 for win7
حجم: 4.42 مگابایت

 

منبع

http://www.aparat.com/v/G5xEZ

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

Install Oracle(Mode SI) With ASM In Oracle Linux - Part 4 – قبل از نصب اوراکل

خب بعد از نصب لینوکس و پکیج‌های انتخاب شده ما نیاز داریم یکسری کارها رو قبل از اینکه نرم‌افزار Oracle و Grid رو نصب کنیم انجام بدیم. لیست این کارها در فایل زیر موجود است.

دریافت
حجم: 2.34 کیلوبایت

 

مرحله اول:

اول از همه باید تنظیمات شبکه رو انجام بدیم

vi /etc/hosts

اسم host رو که در زمان نصب برای ماشین گذاشتیم وارد می‌کنیم

در حقیقت تو این فایل می‌گیم هرکی خواست این name رو ببینه معادلش آی‌پی‌اش میشه (dns داخلی)

(حتی اگه کاربرمون join domain هم باشه به همون صورت می‌نویسیم مثلاً: oel660.com 

مرحله دوم:

بعد باید سراغ نصب پکیج‌ها بریم که ما در مرحله نصب سیستم‌عامل نصبشون کردیم

 

مرحله سوم:

نیاز به یکسری گروه‌ها داریم چون asm میخوایم پس قبل از اینکه نرم‌افزار oracle رو نصب کنیم باید grid رو نصب کنیم. برای نصب oracle, grid نیاز داریم یکسری کارها رو انجام بدیم.

یکسری از این گروه‌ها با نصب پکیج‌های موردنیازمون درست شده‌اند.

اگر کاربر سیستم‌عاملی عضو گروه asmdba شود دسترسی dba ای asm رو خواهد داشت

گروه asmoper برای تنظیمات سیستم‌عامل برای asm

گروه oinstall برای نصب نرم‌افزارهاست

گروه dba: اگر کاربری عضو این گروه شود بدون پسورد می‌تواند مستقیماً به دیتابیس بدون پسورد به صورت dba لاگین کند

گروه oper: برای تنظیمات سیستم‌عامل برای oracle

 

مرحله چهارم:

باید کاربرهامون رو عضو یکسری از این گروه‌ها کنیم

کاربر grid رو ایجاد عضو گروه‌های asmadmin,asmdba,asmoper,dba می‌کنیم (useradd)

کاربر Oracle رو ویرایش می‌کنیم و عضو گروه‌های dba,oper,asmadmin,asmdba می‌کنیم (usermod)

Usermod = یعنی این کاربر وجود داشته و حالا فقط میخوایم ویرایشش بکنیم

 

مرحله پنجم:

یکسری تنظیمات برای

shared_pool_size, large_pool, db_cache_size هست که با نصب پکیج‌ها انجام می‌شوند

 

مرحله ششم:

چون اوراکل پورت 1521 رو اشغال میکنه ممکنه تو ارتباط tnsها شما به مشکل بخورید بنابراین ما باید پورت 1521 رو تو فایروال باز کنیم همچنین پورت‌های دیگه برای EM, SSH رو. برای دیدن وضعیت iptables از دستور زیر استفاده می‌کنیم:

/sbin/service iptables status

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

/sbin/service iptables stop

برای اینکه سرویس iptable رو هم off‌کنیم که دیگه بعد ریستارت on نشه از دستور زیر استفاده می‌کنیم:

chconfig iptables off

مرحله هفتم:

خاموش کردن selinux

vi /etc/selinux/config
and --> SELINUX = disabled

مرحله هشتم:

وقتی پکیج RDBMS اوراکل رو نصب می‌کنید یکسری پارامترها تو فایل /etc/sysctl.conf به وجود میاد که نیازی نیست ما این قسمت رو انجام بدیم.

  • در این فایل اول لیست پکیج‌هایی که نصب کردیم رو میاره
  • و تغییرات مورد نیازمون که نیاز داشتیم انجام شده

 

مرحله نهم:

در فایل /etc/security/limits.conf هم با نصب پکیج‌هامون تغییرات لازم رو اعمال می‌شود. ولی دقت کنید مقادیر برای grid ست نشده‌اند پس مقادیر رو برای grid با insert انتهای فایل اضافه می‌کنیم.

## nessery
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 10240 ==> محدودیتی که برای لاگین داریم
grid hard nofile 65536

مرحله دهم:

فایل /etc/pam.d/login برای محدودیتی که برای تعداد کاربری که میخواد لاگین که به سرورتون

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

مرحله یازدهم:

برای اینکه oracle, grid رو نصب کنیم باید یکسری پوشه‌هایی رو قبلاً براش ایجاد کنیم

mkdir -p /u01/app/grid => برای gridhome
chown -R grid:oinstall /u01/ => مالکش رو عوض می‌کنیم با دادن اسم کاربر و گروهش
chmod -R 775 /u01/ => میزان دسترسی رو مشخص می‌کنیم
mkdir -p /u02/app/oracle => پوشه‌های مربوط به اوراکل oraclehome
chown -R oracle:oinstall /u02/ =>  مالکش رو عوض می‌کنیم
chmod -R 775 /u02/

مرحله دوازدهم:

passwd grid

نکته: باقی کاربرها بجز root می‌توانند پسوردهاشون کمتر از ۶ کاراکتر باشه

یکسری پارامترها هستش که باید تو پروفایل کاربرهامون تنظیم کنیم. که زمانی که کاربر با پوسته خودش به سیستم‌عامل لاگین کرد این پارامترها براش set شده باشه

su - grid => با یوزر روت دیگه پسورد نمیخواد وقتی به یه کاربر دیگه سوئیچ می‌کنیم

vi .bash_profile

 

export ORACLE_SID=+ASM; 
export ORACLE_BASE=/u01/app/grid;
export ORACLE_HOME=/u01/app/grid/product/11.2.0/grid;
export PATH=$ORACLE_HOME/bin:$PATH;
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH;

 

برای اعمال این تغییرات به صورت زیر عمل می‌کنیم:

. .bash_profile
exit

مرحله سیزدهم:

همین کارها رو هم برای کاربر اوراکل انجام می‌دیم

passwd oracle
su - oracle
vi .bash_profile
PATH=$PATH:$HOME/bin        
export PATH
export ORACLE_BASE=/u02/app/oracle => تمام فایلهای اوراکل تو این مسیره
export ORACLE_HOME=/u02/app/oracle/product/11.2.0/db_1
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib => فایلهای اجرایی مثل sqlplus
# export NLS_LANG=AMERICAN_AMERICA.UTF8 => می‌تونید این پارامتر رو اگر دیتابیستون utf8 است تنظیم کنید.
export ORACLE_SID=orcl
export DB_UNQNAME=orcl
export ORACLE_UNQNAME=orcl

 

نکته: sid, dbname ای که میخوایم به اوراکلمون بدیم رو همینجا تنظیم می‌کنیم پس اگه اینجا orcl تنظیم کردید موقع نصبش هم باید بذارید orcl

 

. .bash_profile
Exit

مرحله چهاردهم:

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

shutdown -h now

۲۱ فروردين ۹۵ ، ۱۱:۲۲ ۱ نظر
مهدی غفاری

Install Oracle(Mode SI) With ASM In Oracle Linux - Part 3 - تنظیمات شبکه سیستم‌عامل

اول از همه باید تنظیمات شبکه رو درست کنیم. اول میذاریم به صورت اتوماتیک از DHCP مون IP بگیره

مهمترین ابزاری که باهاش تو لینوکس کارها رو جلو میبریم ترمینال هستش

برای اینکه بفهمیم IP ای که سیستم‌عاملمون از DHCP گرفته چیه از دستور ifconfig تو لینوکس استفاده می‌کنیم

حال برای اینکه این IP رو به صورت STATIC دربیاریم باید INTERFACEامون رو ویرایش کنیم راه‌های مختلفی برای اینکار هست(مثل SETUP) و ETC/NETWORK و ...

برای ریستارت نتورک از دستور زیر استفاده کنید:

SERVICE NETWORK RESTART

تو محیط‌های عملی چون نمیشه همیشه به سرور و اتاق سرور راحت دسترسی داشت باید به سرور SSH زد

موقع PING هم در واقع TTL = 64 یعنی سیستم‌عاملش UNIX بیسه

۲۱ فروردين ۹۵ ، ۰۹:۲۷ ۱ نظر
مهدی غفاری