دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
توابع مقایسه ای در پایگاه داده اوراکل
1403/07/14 -
توابع تاریخ در پایگاه داده اوراکل
1403/07/12 -
توابع ریاضی در پایگاه داده اوراکل
1403/07/11 -
توابع رشته ای در پایگاه داده اوراکل
1403/07/10 -
مدیریت زمانبندی (Job) در پایگاه داده اوراکل
1403/07/09 -
مدیریت Trigger در پایگاه داده اوراکل
1403/07/08
مدیریت Sequence در پایگاه داده اوراکل
مدیریت Sequence در پایگاه داده اوراکل
مدیریت Sequence در پایگاه داده اوراکل ، یا توالی یکی از مهمترین ابزارها برای تولید اعداد یکتا و متوالی است که در بسیاری از کاربردهای پایگاه دادهها مورد استفاده قرار میگیرد.
توالیها برای تولید شناسههای یکتا (Unique Identifiers) بهویژه در جداولی که نیاز به کلید اولیه (Primary Key) خودکار دارند، بسیار مفید هستند.
به کمک Sequenceها، میتوان بهصورت کارآمد و با کمترین برخورد یا تکرار اعداد، این شناسهها را ایجاد کرد.
در این مقاله، به بررسی مفاهیم، روش ایجاد، استفاده و مدیریت Sequenceها در پایگاه داده اوراکل میپردازیم و انواع کاربردهای آن را با مثالهای کاربردی توضیح میدهیم.
مفاهیم اولیه Sequence در پایگاه داده اوراکل
یک Sequence در پایگاه داده اوراکل، ابزاری برای تولید خودکار یک دنباله از اعداد است.
این دنباله میتواند بهصورت افزایشی (صعودی) یا کاهشی (نزولی) باشد و میتوان آن را مطابق با نیازهای خاص تنظیم کرد.
توالیها معمولاً برای تولید کلیدهای یکتا (مانند شمارههای شناسایی) به کار میروند، اما میتوان از آنها در هر جایی که به تولید یک سری از اعداد نیاز است، استفاده کرد.
مزایای استفاده از Sequence در پایگاه داده اوراکل
استفاده از Sequenceها در پایگاه داده اوراکل دارای مزایای زیر است:
-
تولید خودکار اعداد یکتا
Sequenceها بهصورت خودکار و بدون دخالت دستی، اعداد یکتا تولید میکنند که میتوانند بهعنوان کلیدهای اولیه یا سایر شناسههای یکتا در جداول استفاده شوند. -
کارآیی بالا
توالیها بهطور خاص برای تولید اعداد یکتا بهینه شدهاند و در محیطهای با بار کاری بالا کارآیی بالایی دارند. -
مدیریت ساده
ایجاد، تغییر و حذف Sequenceها بسیار ساده است و اوراکل ابزارهای مناسبی برای مدیریت آنها فراهم میکند. -
پشتیبانی از پردازش موازی
Sequenceها حتی در شرایط پردازش موازی نیز بهصورت ایمن و کارآمد عمل میکنند، بدون اینکه به برخوردهای رقابتی (Race Conditions) دچار شوند.
ایجاد Sequence در پایگاه داده اوراکل
برای ایجاد یک Sequence در پایگاه داده اوراکل، از دستور CREATE SEQUENCE استفاده میشود.
این دستور امکان تعریف یک توالی جدید با پارامترهای دلخواه را فراهم میکند.
نحو (Syntax) ایجاد Sequence:
CREATE SEQUENCE sequence_name
[START WITH start_value]
[INCREMENT BY increment_value]
[MAXVALUE max_value | NOMAXVALUE]
[MINVALUE min_value | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE cache_value | NOCACHE]
[ORDER | NOORDER];
توضیح پارامترها:
-
sequence_name: نام Sequence که باید یکتا باشد.
-
START WITH: عددی که Sequence از آن شروع میشود. مقدار پیشفرض 1 است.
-
INCREMENT BY: مقدار افزایشی یا کاهشی در هر فراخوانی Sequence. مقدار پیشفرض 1 است.
-
MAXVALUE: حداکثر مقدار مجاز Sequence.
-
MINVALUE: حداقل مقدار مجاز Sequence.
-
CYCLE: مشخص میکند که پس از رسیدن به حداکثر یا حداقل مقدار، Sequence دوباره از ابتدا شروع شود یا خیر.
-
CACHE: تعداد اعدادی که در حافظه نگهداری میشوند تا کارآیی بهتری در فراخوانیهای بعدی داشته باشند.
-
ORDER: تضمین میکند که اعداد Sequence به ترتیب درخواست داده شدهاند.
مثال ایجاد یک Sequence ساده:
CREATE SEQUENCE employee_seq
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
در این مثال، یک Sequence به نام employee_seq ایجاد شده که از 1 شروع میشود، بهازای هر فراخوانی یک واحد به آن اضافه میشود، هیچ مقداری در حافظه ذخیره نمیشود و پس از رسیدن به حداکثر مقدار (که بهصورت پیشفرض تعریف نشده است)، دوباره از ابتدا شروع نمیشود.
نحوه استفاده از Sequence در پایگاه داده اوراکل
پس از ایجاد یک Sequence، میتوان از آن برای تولید اعداد یکتا در جداول مختلف استفاده کرد.
برای فراخوانی یک مقدار جدید از Sequence از دو دستور زیر استفاده میشود:
-
NEXTVAL
این دستور عدد بعدی را از Sequence میگیرد و Sequence را یک واحد به جلو میبرد. -
CURRVAL
این دستور مقدار فعلی Sequence را بدون تغییر آن برمیگرداند.
نحو استفاده از NEXTVAL و CURRVAL:
sequence_name.NEXTVAL
sequence_name.CURRVAL
مثال استفاده از Sequence در INSERT:
فرض کنید یک جدول employees داریم و میخواهیم هنگام وارد کردن اطلاعات جدید، از Sequence برای تولید شناسه یکتا استفاده کنیم:
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (employee_seq.NEXTVAL, 'John', 'Doe');
در این مثال، مقدار employee_id بهصورت خودکار از Sequence employee_seq گرفته میشود و دیگر نیازی به وارد کردن دستی آن نیست.
مشاهده مقدار فعلی Sequence:
SELECT employee_seq.CURRVAL FROM dual;
تنظیمات پیشرفته Sequence در پایگاه داده اوراکل
Sequenceها را میتوان به روشهای مختلف تنظیم کرد تا نیازهای خاص کاربران را برآورده کنند. برخی از تنظیمات مهم شامل موارد زیر هستند:
-
تنظیم مقدار شروع (START WITH)
هنگام ایجاد Sequence میتوان تعیین کرد که از چه عددی شروع به تولید اعداد کند. بهطور پیشفرض Sequence از 1 شروع میشود، اما میتوان آن را تغییر داد.
مثال:
CREATE SEQUENCE order_seq
START WITH 1000
INCREMENT BY 1;
در این مثال، Sequence order_seq از عدد 1000 شروع میشود.
-
تنظیم مقدار افزایشی (INCREMENT BY)
این گزینه تعیین میکند که بهازای هر بار فراخوانی Sequence، مقدار آن چقدر افزایش یا کاهش یابد. اگر بخواهیم Sequence بهصورت نزولی عمل کند، میتوان از عدد منفی در INCREMENT BY استفاده کرد.
مثال:
CREATE SEQUENCE reverse_seq
START WITH 1000
INCREMENT BY -1;
در این مثال، Sequence از 1000 شروع میشود و در هر بار فراخوانی یک واحد کاهش مییابد.
-
تنظیم حداقل و حداکثر مقدار (MINVALUE و MAXVALUE)
با استفاده از این دو گزینه میتوان حداقل و حداکثر مقدار مجاز Sequence را تعیین کرد. پس از رسیدن به این مقادیر، اگر گزینه CYCLE فعال نباشد، Sequence متوقف میشود.
مثال:
CREATE SEQUENCE limited_seq
START WITH 1
INCREMENT BY 1
MAXVALUE 100
MINVALUE 1
NOCYCLE;
در این مثال، Sequence تنها اعدادی بین 1 تا 100 تولید میکند و پس از رسیدن به عدد 100 متوقف میشود.
-
چرخهپذیری (CYCLE)
با استفاده از گزینه CYCLE میتوان تعیین کرد که پس از رسیدن به حداکثر یا حداقل مقدار، Sequence دوباره از ابتدا شروع به تولید اعداد کند.
مثال:
CREATE SEQUENCE cycle_seq
START WITH 1
INCREMENT BY 1
MAXVALUE 10
CYCLE;
در این مثال، Sequence پس از رسیدن به عدد 10 دوباره از 1 شروع میشود.
-
استفاده از Cache
Sequenceها میتوانند مقداری از اعداد تولیدی را در حافظه پنهان (Cache) کنند تا دسترسی به آنها سریعتر انجام شود. این ویژگی برای بهبود کارآیی در محیطهایی که نیاز به تولید سریع اعداد یکتا دارند، مفید است. با استفاده از گزینه CACHE میتوان تعداد اعداد ذخیرهشده در حافظه را تعیین کرد.
مثال:
CREATE SEQUENCE cached_seq
START WITH 1
INCREMENT BY 1
CACHE 20;
در این مثال، Sequence cached_seq اولین 20 مقدار را در حافظه ذخیره میکند تا در فراخوانیهای بعدی سریعتر به آنها دسترسی داشته باشد.
بهروزرسانی Sequence در پایگاه داده اوراکل
پس از ایجاد یک Sequence، ممکن است بخواهید پارامترهای آن را تغییر دهید. برای این کار باید از دستور ALTER SEQUENCE استفاده کنید.
نحو (Syntax) تغییر Sequence:
ALTER SEQUENCE sequence_name
[INCREMENT BY increment_value]
[MAXVALUE max_value | NOMAXVALUE]
[MINVALUE min_value | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE cache_value | NOCACHE]
[ORDER | NOORDER];
مثال:
ALTER SEQUENCE employee_seq
INCREMENT BY 5
MAXVALUE 5000;
در این مثال، Sequence employee_seq بهروزرسانی شده و مقدار افزایشی آن به 5 تغییر میکند و حداکثر مقدار به 5000 محدود میشود.
حذف Sequence در پایگاه داده اوراکل
اگر دیگر نیازی به Sequence ندارید، میتوانید آن را با استفاده از دستور DROP SEQUENCE حذف کنید.
نحو (Syntax):
DROP SEQUENCE sequence_name;
مثال:
DROP SEQUENCE employee_seq;
نکات مهم در مورد Sequenceها
-
نکات امنیتی
Sequenceها بهصورت همزمان توسط چندین کاربر قابل استفاده هستند و از نظر امنیتی در برابر مشکلات رقابتی مانند تکرار اعداد مقاوم هستند.
بنابراین، در سیستمهای چندکاربره از کارآیی بالایی برخوردارند. -
Sequenceهای بدون گپ (Gapless)
بهطور پیشفرض Sequenceها ممکن است دارای گپ (فاصله) بین مقادیر تولید شده باشند، مخصوصاً در مواردی که تراکنشها برگشت داده میشوند.
اگر نیاز به Sequence بدون گپ دارید، باید از روشهای خاصی مانند مدیریت دستی Sequence یا استفاده از Sequenceهای پیوسته استفاده کنید.
دوره های مرتبط
اموزش پایگاه داده اوراکل Oracle
در دوره آموزش پایگاه داده اوراکل اصول ، مفاهیم ، طراحی ، پیادهسازی و مدیریت پایگاه داده را به صورت جامع آموزش می دهیم .