در موارد نادری مشاهده میشود که رابط گرافیکی لینوکس غیر فعال شده و با تغییر inittab و run level نیز مشکل رفع نمیشود . در این مواقع پس از Reboot سیستم با محیط زیر روبرو میشوید :
بعضی اوقات نیز بدلیل آپدیت ناقص این خطا بروز میکند. جهت رفع آن از دستور زیر استفاده کنید :
> yum groupinstall graphical-server-environment
> reboot
Kernel panic – not syncing: VFS: Unale to mount root fs on unknown-block(0.0)
دلیل بروز مشکل :
بروزرسانی ناقص Kernel و بقیه پکیج ها در هنگام استفاده از دستور yum update
شرح : در زمان Update ، سرور دچار هنگی شده و پس از Reboot با پیغام بالا مواجه شدیم و امکان Boot با Kernel های قبلی نیز مقدور نبود .
راه حل :
در صفحه Boot بر روی Kernel قبلی کلیک کرده و Ctrl + E را بزنید . سپس طبق شکل زیر عمل نمایید :
سپس Ctrl + x را فشار دهید.
سیستم در حالت Rescue بالا می آید . سپس دستورات زیر را میزنیم :
# rpm –qa |grep kernel
# Yum remove newkernelname*
# Reboot
سلام خدمت دوستان
شاید برای خودتون یا همکارانتون پیش اومده باشه که به اشتباه یک پارتیشن را حذف کرده باشید . اگر آن پارتیشن محتوی دیتای مهمی باشه حتماً دچار استرس شدید خواهید شد !!
یکی از بهترین و سریعترین ابزارها که باهاش میتونید در کسری از دقیقه پارتیشن های لینوکسی و ویندوزی رو بطور کامل بازیابی کنید GParted نسخه Live هست که میتونید از این اینجا دانلود کنید . بهترین آموزشش هم اینجا ببینید.
در قسمت تنظیمات VM به دیسک شماره
2 مقدار 200 گیگ فضا اضافه میکنیم (فضای قبلی 35 گیگ بوده). اگر Editor مربوط به فضای دیسک در حالت غیرفعال باشد معمولاً بدلیل وجود snapshot میباشد . پس از حذف snapshot ها Editor های مربوطه فعال میشوند.
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 110G 0 disk
├─sda1 8:1 0 953M 0 part /boot
├─sda2 8:2 0 47.3G 0 part
│ ├─rhel-root 253:0 0 178.6G 0 lvm /
│ ├─rhel-swap 253:1 0 9.3G 0 lvm [SWAP]
│ ├─rhel-home 253:2 0 316.5G 0 lvm /home
│ └─rhel-var 253:3 0 319.7G 0 lvm /var
└─sda3 8:3 0 61.8G 0 part
└─rhel-home 253:2 0 316.5G 0 lvm /home
sdb 8:16 0 280G 0 disk
├─sdb1 8:17 0 80G 0 part
│ └─rhel-var 253:3 0 319.7G 0 lvm /var
└─sdb2 8:18 0 200G 0 part
└─rhel-var 253:3 0 319.7G 0 lvm /var
sdc 8:32 0 35G 0 disk
└─sdc1 8:33 0 35G 0 part
└─rhel-var 253:3 0 319.7G 0 lvm /var
sdd 8:48 0 200G 0 disk
├─sdd1 8:49 0 50G 0 part
│ └─rhel-home 253:2 0 316.5G 0 lvm /home
└─sdd2 8:50 0 150G 0 part
└─rhel-root 253:0 0 178.6G 0 lvm /
sde 8:64 0 200G 0 disk
└─sde1 8:65 0 200G 0 part
└─rhel-home 253:2 0 316.5G 0 lvm /home
sr0 11:0 1 1024M 0 rom
همانطور که مشاهده میکنید دیسک sdc هنوز
فضای قبلی خود را نشان میدهد .
select id,
sum(decode(x, 1, cnt, 0)) c1,
sum(decode(x, 2, cnt, 0)) c2,
sum(decode(x, 3, cnt, 0)) c3,
sum(decode(x, 4, cnt, 0)) c4
from (select 1 id, 10 cnt, 1 x
from dual
union all
select 2 id, 20 cnt, 2 x
from dual
union all
select 3 id, 30 cnt, 3 x
from dual
union all
select 4 id, 40 cnt, 4 x
from dual
)
group by id order by id
ID C1 C2 C3 C4
1 10 0 0 0
2 0 20 0 0
3 0 0 30 0
4 0 0 0 40
برای متوقف کردن یک job در حال اجرا در export data pump به دو روش زیر می توان عمل کرد:
1-ابتدا از view زیر وضعیت jobها به همراه نامشان را مشاهده کنید:
select * from dba_datapump_jobs
سپس job مورد نظر که در وضعیت executing می باشد را جستجو کنید.
SYS SYS_EXPORT_FULL_01 EXPORT FULL EXECUTING
پس از مشاهده job_name باید با دستور زیر وارد محیط export data pump شوید:
oracle@dbserver ~]$ expdp system/manager attach=SYS_EXPORT_FULL_01]
پس از مشاهده مشخصات باید job را بصورت زیر متوقف کنید:
قبل از هر چیز به تعریف دو اصطلاح می پردازیم:
Distributed Transaction:تراکنشی که در سطح شبکه بین دو دیتابیس انجام می شود.
In-Doubt Transaction: تراکنش نیمه تمامی از نوع Distributed که وضعیت commit یا rollback آن مشخص نیست.
اگر چنین تراکنشی در دیتابیس انجام شود و به دلایلی نیمه تمام باقی بماند پس از اجرای مجدد آن هنگام COMMIT با سه خطای پی در پی به شرح زیر مواجه می شویم:
ora-02050: transaction 21.534654 rolled back,some remote DBs may be in-doubt
ora-02056: bad two phase command number rdonly from coord
ora-02063: preceding line from BANK
برای رفع مشکل می توانیم از دستورات ALTER SESSION ADVISE COMMIT یا ALTER SESSION ADVISE ROLLBACK قبل از کوئری خود استفاده کنیم.
مثال :
insert into SUPERIORCUSTS
SELECT B.BRANCH_CODE BR,trunc(INSERT_SYSDATE) as INSERT_DATE,COUNT(*) as cnt
FROM VC.ORGANIZATION A JOIN RP.VW_CLIENT_INFO_BANK@REMOTE B ON A.CIF = B.EXTERNAL_REF
WHERE B.CLIENT_TYPE = 1 and trunc(INSERT_SYSDATE) = trunc(sysdate - 1)
GROUP BY B.BRANCH_CODE, trunc(INSERT_SYSDATE);
commit;
insert انجام می شود ولی بعد از commit خطاهای مذکور را دریافت می کنیم.کافیست قبل از اجرای مجدد کوئری فوق، یک یا دو بار دستور ALTER SESSION ADVISE COMMIT را اجرا کنیم.(یا چنانچه بخواهیم تغییرات حاصل از کوئری قبل را cancel کنیم بجای commit از rollback استفاده می کنیم)
ممکن است گاهی متوجه عملیات مرتب سازی (SORT) در دستورات خود نشوید.SORT معمولا در موارد زیر استفاده می شود:
1- از distinct اجتناب کنید مگر اینکه واقعا نیاز باشد.
2- از UNION ALL به جای UNION استفاده شود مگر اینکه نیاز باشد رکوردهای مشابه حذف گردند.
3- سعی کنید از HASH JOIN بجای SORT_MERGE_JOIN استفاده شود.ضمنا استفاده از HINTها باعث می شود OPTIMIZER از INDEX HINT های مناسب استفاده کند تا از SORTها جلوگیری شود.مثلا cost based optimizer از عملیات SORT اجتناب می کند وقتیکه FIRST_ROWS hint استفاده شود.
4- از مناسبترین ایندکسها در کد خود استفاده کنید.
چنانچه در مانیتورینگ با مشکلاتی ناشی از SORT مواجه شدید افزایش مقدار پارامتر SORT_AREA_SIZE متناظر با میزان کل فضای حافظه قابل ملاحظه است.
برای بازگردانی اطلاعات در فرآیند ریکاوری Rman پس از دستور restore database می توانیم از دستور Recover database until available redo استفاده کنیم که از ویژگیهای اوراکل نسخه 12 می باشد.در نسخه های قبل، پس از دستور recover database ممکن بود به دلیل مواجه شدن با مشکل، ریکاوری ناتمام بماند و مجبور بودیم به محیط sqlplus سوئیچ کرده و برای اتمام فرآیند از دستور recover database using backup controlfile until cancel استفاده کنیم ویا متناظر با archivefile دچار مشکل از عبارت until time و یا until sequence استفاده کنیم.اما در نسخه 12cR2 پس از اجرای دستور Recover database until available redo فرآیند ریکاوری بطور اتوماتیک تا آخرین log موجود انجام می شود و از بروز خطاهای RMAN-06053: unable to perform media recovery because of missing log و(بطور مثال) RMAN-06025: no backup of archived log for thread 1 with sequence 1 and starting SCN of 543788891 found to restore جلوگیری می شود.
در اوراکل 12c امکان ثبت رویدادنگاری از دستورات DDL وجود دارد ، البته این امکان در 11g نیز وجود داشت ولی در نسخه جدید رویدادنگاری ها جدای از alert log دخیره میشوند . با این امکان میتوان متوجه شد که چه تغییراتی توسط چه کسی و در چه زمانی بر روی پایگاه داده اعمال شده است . بزای فعالسازی این امکان باید پارامتر ENABLE_DDL_LOGGING را فعال کنیم ، این پارامتر میتواند در سطح دیتابیس یا سشن فعال شود . پس از فعال شدن این پارامتر تمام دستورات DDL در قالب یک فایل XML و یک لاگ فایل در مسیر ORACLE_BASE/diag/rdbms/DBNAME/log|ddl$ ذخیره خواهند شد. یک فایل XML شامل اطلاعاتی نظیر دستور DDL ، آدرس IP ، زمان اجرا و . میباشد .
دستور فعال سازی DDL logging :
ALTER SYSTEM|SESSION SET ENABLE_DDL_LOGGING=TRUE;
در صورت فعال سازی دستورات زیر رویدادنگاری خواهند شد :
CREATE|ALTER|DROP|TRUNCATE TABLE
DROP USER
CREATE|ALTER|DROP PACKAGE|FUNCTION|VIEW|SYNONYM|SEQUENC
بیشتر بخوانید :
تا پیش از اوراکل 12 چنانچه بخواهید برای ستونی از یک جدول Defaul Value تعیین کنید، باید یک Trigger و Sequence ایجاد شود؛ تا هنگام Insert در جدول مورد نظر، Trigger اجرا شود و با اضافه شدن Sequnce، مقدار آن در ستون مورد نظر قرار گیرد، مانند مثال زیر :
CREATE TABLE Person (
ID NUMBER(10) NOT NULL,
… );
ALTER TABLE departments ADD (
CONSTRAINT person_pk PRIMARY KEY (ID));
CREATE SEQUENCE person_seq START WITH 1;
CREATE OR REPLACE TRIGGER person_trgr
BEFORE INSERT ON Person
FOR EACH ROW
BEGIN
SELECT person_seq.NEXTVAL
INTO :new.id
FROM dual;
END;
ولی در اوراکل 12C نیازی به ساختن Trigger نیست و میتوان تنها با استفاده از Sequence برای ستون مورد نظر Default Value تعیین کرد. به عنوان مثال :
CREATE SEQUENCE person_seq;
CREATE TABLE Person (
ID NUMBER(10) DEFUALT person_seq.NEXTVAL,
… );
در نسخه های پیشین شما تحت هیچ شرایطی امکان تعریف چند ایندکس روی یک ستون یا یک مجموعه از ستونهای مشترک را نداشتید . اوراکل 12c R1 این امکان را به شرط متفاوت بودن نوع ایندکس ها فراهم کرده است . البته همچنان اوراکل فقط از یک ایندکس که اصطلاها به آن فعال یا آشکار -active/visible- گفته میشود استفاده خواهد کرد . در صورتی که بخواهید ایندکس های پنهان نیز به کار گرفته شوند باید مقدار پارامتر OPTIMIZER_USE_INVISIBLE_INDEXES را برابر true قرار دهید .
مثالی از ساخت ایندکس ها :
create index idx_person_1 on person(national_code,gender); create bitmap index idx_peson_2 on person(national_code,gender) invisible;
بیشتر بخوانید :
تعداد Redolog های تولید شده به تفکیک ساعت
select to_char(first_time,'YYYY-MM-DD') day,
to_char(sum(decode(substr(to_char(first_time,'HH24'),1,2),'00',1,0)),'9999') "00",
to_char(sum(decode(substr(to_char(first_time,'HH24'),1,2),'01',1,0)),'9999') "01",
to_char(sum(decode(substr(to_char(first_time,'HH24'),1,2),'02',1,0)),'9999') "02",
to_char(sum(decode(substr(to_char(first_time,'HH24'),1,2),'03',1,0)),'9999') "03",
to_char(sum(decode(substr(to_char(first_time,'HH24'),1,2),'04',1,0)),'9999') "04",
to_char(sum(decode(substr(to_char(first_time,'HH24'),1,2),'05',1,0)),'9999') "05",
to_char(sum(decode(substr(to_char(first_time,'HH24'),1,2),'06',1,0)),'9999') "06",
to_char(sum(decode(substr(to_char(first_time,'HH24'),1,2),'07',1,0)),'9999') "07",
to_char(sum(decode(substr(to_char(first_time,'HH24'),1,2),'08',1,0)),'9999') "08",
to_char(sum(decode(substr(to_char(first_time,'HH24'),1,2),'09',1,0)),'9999') "09",
to_char(sum(decode(substr(to_char(first_time,'HH24'),1,2),'10',1,0)),'9999') "10",
to_char(sum(decode(substr(to_char(first_time,'HH24'),1,2),'11',1,0)),'9999') "11",
to_char(sum(decode(substr(to_char(first_time,'HH24'),1,2),'12',1,0)),'9999') "12",
برای چک کردن corruption در datafileها ،archivefileها ، controlfileها و spfile می توانید از Rman استفاده نمایید.ضمنا می توانید مشخص کنید که یک backupset قابل restore می باشد یا خیر.دستور RMAN VALIDATE برای چک کردن موارد ذکر شده کاربرد دارد.
VALIDATE
BACKUP…VALIDATE
RESTORE…VALIDATE
طریقه استفاده از دستور به صورت زیر است:
Rman>validate database;
و برای اعتبارسنجی controlfile:
RMAN>validate current controlfile;
برای چک کردن آرشیو فایلها:
RMAN>validate archivelog all;
بصورت ترکیبی هم در دستور می توان چک کردن آیتمهای مختلف را بیان کرد:
RMAN>validate check logical database include current controlfile plus archivelog
ادامه مطلب
1- ابتدا Plan های مربوط به کوئری مورد نظر را از طریق زیر می یابیم :
) select * from dba_sql_plan_baselines b where b.signature in
select s.exact_matching_signature from v$sql s where sql_id = '0p09g7ftbkmk0
(
2- سپس sql_handle و plan_name ای که از مرحله قبل بدست آمده، در دستور زیر قرار داده و آن را اجرا می کنیم :
set serveroutput on
declare
l_plans_dropped pls_integer;
begin
l_plans_dropped:=dbms_spm.drop_sql_plan_baseline(sql_handle => 'SQL_cfffc84dd93b2190',plan_name => 'SQL_PLAN_czzy89rcmq8ch9865aff3');
dbms_output.put_line(l_plans_dropped);
end;
/
هنگام اجرای export data pump در RAC database چنانچه از پارامتر cluster استفاده نکنیم مقدار پیش فرض آن که YES می باشد در هنگام اجرا لحاظ می گردد و به این معنی است که process مربوطه از تمامی instance های موجود در RAC جهت اجرای export استفاده می کند.اگر این پارامتر را در دستور expdp خود بصورت cluster=no استفاده کنیم به این معنی است که فقط instance ی که دستور در آن اجرا شده است مورد استفاده قرار می گیرد و در برخی موارد مزیت آن جلوگیری از cluster wait می باشد.
CREATE TABLE emp (eno number(6), ename name varchar2(40), sal number(9) INVISIBLE);همینطور میتوان آن را غیر فعال کرد :
ALTER TABLE emp MODIFY (sal visible);- در عبارت insert نیز باید صریحا به نام این ستون ها اشاره کرد.
در نسخه 12c R1 تغییر نام و جابجا کردن دیتافایل ها بسیار ساده تر شده است ، از این نسخه به بعد میتوان بدون ایجاد اختلال در عملکرد پایگاه داده و به صورت بر خط دیتافایل ها را تغییر نام داد یا جابجا کرد ، در طول مدتی که دیتافایل در حال انتقال است کاربر میتواند query و دستورات DML و DDL را اجرا کند . همینطور از این طریق میتوان دیتافایل ها را بین فصای ذخیره سازی ASM و غیر ASM و بلعکس جا به جا کرد.
در این نسخه میتوان از دستور ALTER DATABASE MOVE DATAFILE برای انتقال دیتافایل استفاده کرد ، در ادامه چند مثال برای استفاده از آن ذکر شده است :
تغییر نام دیتافایل :
ALTER DATABASE MOVE DATAFILE '/u00/data/OLD_File.dbf' TO '/u00/data/NEW_File.dbf';
انتقال دیتافایل به ASM :
ALTER DATABASE MOVE DATAFILE '/u00/data/FileToMove.dbf' TO '+DG_DATA';
انتقال دیتافایل بین دیسک گروپ های ASM :
ALTER DATABASE MOVE DATAFILE '+DG_DATA/DBNAME/DATAFILE/File.dbf ' TO '+DG_DATA_02';
بازنویسی دیتافایل در صورتی که دیتافایلی به همان نام در مسیر جدید موجود باشد :
ALTER DATABASE MOVE DATAFILE '/u00/data/File.dbf' TO '/u00/data_new/File.dbf' REUSE;
کپی کردن دیتافایل به مسیر جدید بدون حذف دیتا فایل در مسیر قبلی :
ALTER DATABASE MOVE DATAFILE '/u00/data/File.dbf' TO '/u00/data_new/File.dbf' KEEP;
بیشتر بخوانید :
select sq.sql_id,sq.sql_text from v$sql sq where sq.sql_text like '%Your Query%';
یا
select sql_id from v$session where sid = x
2- در گام بعدی برای کوئری یک tuning task ایجاد می کنیم :
SET SERVEROUTPUT ON
declare
stmt_task VARCHAR2(40);
begin
tune_task := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id => ' 5fktw7d0p8mut');
DBMS_OUTPUT.put_line('task_id: ' || tune_task);
end;
/
task_id: TASK_1042
گاهی نیاز است برای بهبود سرعت پرس و جو ، بجای select تو
در تو از join استفاده کنیم.مثال زیر نمونه ای از این تبدیل می باشد:
select *
FROM emp A
WHERE A.sal between 800 and 2000
AND A.deptno NOT IN
(SELECT B.deptno
FROM dept B
WHERE B.deptno = A.deptno
AND B.dname = 'sales');
//-----------------------------------
SELECT *
FROM emp A
left join dept B on B.deptno = A.deptno AND B.dname='sales'
WHERE A.sal between 800 and 2000
and B.dname is null
معرفی DRBD
Distributed Replicated Block Device یکی از ابزارهای مورد استفاده در سیستم عامل های بر پایه لینوکس است که از آن برای Sync کردن دائمی یا موقتی یک یا چند دیسک بین چند سیستم استفاده می شود.. DRBD مشابه RAID1 عمل میکند با این تفاوت که از بستر شبکه بهره گرفته شده است. یعنی در هر زمان داده ها بر روی دو (یا چند) دیسک واقعی نوشته میشود و در صورت از دست دادن یکی از دیسکها میتوان از دیسک دیگر استفاده و به اطلاعات دسترسی پیدا نمود.کاربر اصلی DRBD در سیستمهای کلاسترینگ می باشد. همچنین میتوان برای سایت های DISASTER به عنوان روشی مطمئن در یکسان سازی دیتای دو سرور استفاده نمود. ( پیشنهاد می شود از این روش برای یکسان سازی Application ها و وب سرورهااستفاده شود و برای دیتابیس ها از روشهای مختص همان دیتابیس نظیر Active Data Guard در اوراکل ، استفاده شود )
با سلام
این تصویر یکی از متداول ترین خطاهای محیط کنسول نسخه 11g میباشد . جهت رفع این خطا مراحل زیر را طی کنید:
1- در ایتدا از درست تنظیم شدن environmental setting از جمله ORACLE_HOME, $ORACLE_SID , $ORACLE_BASE$ اطمینان حاصل کنید . در محیط ویدوز این تنظیمات در قسمت Environment Variables و در لینوکس داخل Bash_Profile قرار میگیرند.
2- دسترسی کاربر اوراکل به مسیر کامل App را چک نمایید . در محیط ویندوز کاربر عضو Ora_Dba به کل مسیر پوشه App دسترسی داشته و همچنین Owner آن تعریف شود.
3- اطمینان حاصل کنید که کاربرهای DBSNMP و SYSMAN در وضعیت Lock قرار نداشته باشند.
4- تنظیمات Regional and timezone settings را چک کنید . یک نمونه از تنظیمات صحیح به شکل زیر میباشد.
پس از کنترل و تنظیم نمودن موارد ذکر شده سیستم را یکبار Reboot کنید.
در بیشتر مواقع با انجام تنظیمات بالا مشکل رفع میگردد . در صورت عدم رفع میبایست OEM Reposiroty را با دستورات زیر یکبار حذف و دوباره نصب کنید.
emca -deconfig dbcontrol db -repos drop
emca -config dbcontrol db -repos create
در صورتی که یکی از دستورات insert,delete,update را در محیط sqlplus بزنید و بدون commit از محیط exit کنید ، بطور اتوماتیک commit انجام میشود . جهت غیرفعالسازی این امکان مراحل زیر را انجام دهید.
در صورت بستن پنجره Sqlplus پروسه به PMON سپرده شده و تراکنش Rollback میگردد.
SQL> show exitcommit
exitcommit ON
SQL> delete from dept where deptno=30;
1 row deleted.
SQL> exit;
$sqlplus scott/tiger
SQL> select * from dept where deptno=30;
0 row.
**********
SQL> set exitcommit off
SQL> show exitcommit
exitcommit OFF
SQL> delete from dept where deptno=30;
1 row deleted.
SQL> exit;
$sqlplus scott/tiger
SQL> select * from dept where deptno=30;;
DEPTNO DNAME LOC
---------- -------------- -------------
30 SALES CHICAGO
همیشه Not In و Not Exists شبیه هم نیستند و ممکن است پاسخ های متفاوتی داشته باشند .
(مثال ۱ ) به طور مثال :
select count(*) from emp where empno not in ( select mgr from emp );
COUNT(*)
----------
0
این پاسخ به ما میگوید که همه مدیر هستند .
حال به پرس و جوی زیر دقت کنید :
select count(*) from emp T1 where not exists ( select null from emp T2 where t2.mgr = t1.empno );
COUNT(*)
----------
9
ولی این پاسخ نشان میدهد ۹ نفر مدیر نیستند!
ادامه مطلبSET PAUSE ON SET PAUSE 'Press Return to Continue' SET PAGESIZE 60 SET LINESIZE 300 COLUMN sql_text FORMAT A120 COLUMN sql_id FORMAT A13 COLUMN bind_name FORMAT A10 COLUMN bind_value FORMAT A26 SELECT sql_id, t.sql_text sql_text, b.name bind_name, b.value_string bind_value FROM v$sql t JOIN v$sql_bind_capture b using (sql_id) WHERE b.value_string is not null AND sql_id='&sqlid' /
مثال 1 : فرض کنید 1000000 کارمند وجود دارند و از بین آنها میخواهیم فردی را انتخاب کنیم که دارای حقوق 20 میلیون تومان میباشد . در صورتی که تنها یک نفر این حقوق را دریافت کند ،
Selectivity ما برابر با 1 تقسیم بر 1000000 میباشد که بسیار نزدیک به صفر است .
Cardinality برابر است با تعداد کل رکورد ها ضربدر Selectivity .
در این مثال Cardinality=1 میباشد.
;Select * from Employee where salary=20000000
ادامه مطلب1- اگر در محیط عملیاتی اقدام به ساخت ایندکس میکنید حتما از حالت Online استفاده کنید تا کاربران دچار Lock Conflict نشوند . همچنین جهت تسریع در ساخت ایندکس میتوان درجه Parallel را تنظیم نمود(معمولاً بیش از 8 توصیه نمیشود).دقت شود که پس از ساخت ایندکس حتما Degree آن برداشته شود .
2- سعی کنید TBS محل ذخیره ایندکس ها جدا از TBS دیتاها باشد.
3- در صورت امکان دیتافایلهای محل ذخیره ایندکس ها را بر روی هارد های SSD قرار دهید . تا
کمترین Latency را در I/O داشته باشید.
ادامه مطلب
گاهی اوقات نیاز است به دلایل امنیتی ارتباط بین دیتابیس و نرم افزار را رمز نگاری کرد . یکی از بهترین روشها استفاده از SSL در ارتباطات TNS و LISTENER است . در این مقاله به پیاده سازی این راهکار خواهیم پرداخت.
با دنبال کردن مراحل زیر میتوان ارتباط بین برنامه و دیتابیس را ایجاد کرد:
در این مستند فرض را بر این گرفته که server با نام ol7-121.localdomain بوده و client یک سیستم ویندوزی با نام "my-computer" میباشد و oracle client بر روی آن نصب میباشد.
ایجاد wallet بر روی سرور:
1- ساخت wallet بصورت auto_login بر روی سرور
$ mkdir -p /u01/app/oracle/wallet
$ orapki wallet create -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 -auto_login_local
2- ساخت certificate بصورت self-signed و load به wallet
$ orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 -dn "CN=`hostname`" -keysize 1024 -self_signed -validity 3650
ادامه مطلب
ASMبه عنوان جایگزین مستقیم برای RAID در نظر گرفته نمیشود، اگرچه با ASM Mirroring عملکرد مشابهی به وجود خواهد آمد. این موضوع به شدت به نیازهای شما، بودجه شما، پیکربندی فعلی دیسکهای شما و راحتی در مدیریت هرکدام وابسته است.
برای بیان نکات کلیدی به صورت کاملا ساده شما میتوانید کلا 4 پیکره بندی مختلف پیاده سازی بکنید:
(ASM (External Redundancy) and Disk (non-RAID
در صورتی که تعهد حداکثر پایداری برای سیستمی داده اید، بهتر است از این پیکره بندی استفاده نکنید. در صورتی که ASM بر رویExternal تنظیم شود و هیچ Redundancy نرم افزاری نیز وجود نداشته باشد و دیسکها نیز عضو RAID نباشند، از بین رفتن هر دیسکی منجر به از دست رفتن دیتا از ASM Diskgroup میشود. (نگارنده اشاره کرده است که این حالت را حتی در محیط تستی نیز پیاده نمیکند اما به هر حال این حالت ممکن است)
(ASM (Normal/High Redundancy) and Disk (non-RAID
به DBA اجازه میدهد تا Failure Groupها و File Protection را به کمک ASM مدیریت کند که این موضوع میتواند در شرایطی که سازمان مدیریت SAN ندارد دارایی با ارزشی باشد، اما به هر حال DBA مسئول پیکره بندی صحیح برای جلوگیری از قطعی سیستم در حین failureها و از آن مهمتر مسئول پایش failure groupها برای اطمینان از وجود فضای کافی برای failureهاست.
بار mirorring دست نرم افزار و به تبع آن پردازشگر سرورهاست.
از دست رفت دیسک به ASM (و همچنین پیکره بندی Diskgroup/File Protection مناسب) وابسته است و امکان پردازش متوالی/بدون قطعی وجود دارد. (با این فرض که Failure Group روی همان دستگاه فیزیکی وجود ندارد.)
میتوان از ظرفیت ماکزیمم استفاده نمود و وما I/O زیاد نمیشود.
صورت مسئله :
بدلیل حساس بودن دیتای موجود در یک ستون خاص ، میخواهیم کاری کنیم که در صورتی که تنها کاربران دارای مجوز مشاهده آن ستون به دیتابیس لاگین نمودند توانایی دیدن محتوای ستون مورد نظر را داشته باشند .
مراحل کار :
1- ایجاد یک تابع جهت تعریف کاربران مجاز
گاهی اوقات نیاز است که کاربر نتواند اقدام به ALTER نمودن جداول نماید . در مثال زیر تمامی دسترسیهای کاربر به جز دستور TRUNCATE گرفته میشود.
درباره این سایت