ওরাকল ডাটাবেজে অনেক ভাবেই ডাটা র্যাঙ্কিং করা যায়। সবচেয়ে সহজ সমাধান হল Aggregate functions ব্যাবহার করে। কিন্তু এ ধরনের ফাংশনে নন গ্রুপ কলাম সিলেক্ট করা যায় না। এর সহজ সমাধান হল এ ক্ষেত্রে Analytics functions ব্যাবহার করে ডাটা র্যাঙ্কিং করা। Continue reading Row ranking tips using RANK, DENSE_RANK and ROW_NUMBER
Category: SQL
Tips and Tricks – 1
1. Create unique case-insensitive constraint on a column.
Solution: Add function level unique index, example –
CREATE UNIQUE INDEX index_name on table_name (UPPER(Column_Name));
2. Cannot create service/sid using ORADIM (DIM-00019: create service error O/S-Error: (OS 5) Access is denied.)
Solution: Make sure your oracle service is running. then create instance.
To create instance- Open CMD (command prompt) with admin privilege. the type the following then hit enter.
ORADIM -NEW -SID SID_NAME
continue…
Random Tips
Note: Throughout this course, the words keyword, clause, and statement are used as follows:
- A keyword refers to an individual SQL element. For example, SELECT and FROM are keywords.
- A clause is a part of a SQL statement. For example, SELECT employee_id, last_name, … is a clause.
- A statement is a combination of two or more clauses. For example, SELECT * FROM employees is a SQL statement.
Arithmetic with Dates
Operation | Result | Description |
---|---|---|
date + number | Date | Adds a number of days to a date |
date – number | Date | Subtracts a number of days from a date |
date – date | Number of days | Subtracts one date from another |
date + number/24 | Date | Adds a number of hours to a date |
Using Date Functions
Assume SYSDATE = ’25-JUL-03′
Function | Result |
---|---|
ROUND(SYSDATE,’MONTH’) | 01-AUG-03 |
ROUND(SYSDATE ,’YEAR’) | 01-JAN-04 |
TRUNC(SYSDATE ,’MONTH’) | 01-JUL-03 |
TRUNC(SYSDATE ,’YEAR’) | 01-JAN-03 |
MONTHS_BETWEEN (’01-SEP-95′,’11-JAN-94′) | 19.6774194 |
ADD_MONTHS (’11-JAN-94′,6) | ’11-JUL-94′ |
NEXT_DAY (’01-SEP-95′,’FRIDAY’) | ’08-SEP-95′ |
LAST_DAY (’01-FEB-95′) | ’28-FEB-95′ |
General Function
- NVL Converts a null value to an actual value. Example: NVL(number_column,9), NVL(date_column, ’01-JAN-95′), NVL(character_column, ‘Unavailable’)
- NVL2 If expr1 is not null, NVL2 returns expr2. If expr1 is null, NVL2 returns expr3. The argument expr1 can have any data type. Example: NVL2(commission_pct, ‘SAL+COMM’, ‘SAL’)
continue…
Oracle Database : User access control – 2
Object Privilege: কোন অবজেক্ট এর উপর বিশেষ কর্ম সম্পাদনের জন্য যে অধিকার দেওয়া হয় তাকে Object Privilege বলে। নিচের টেবিলে বিভিন্ন Object Privilege এর
জন্য প্রদত্ত প্রিভিলেজ এর তালিকা দেওয়া হল……
জন্য প্রদত্ত প্রিভিলেজ এর তালিকা দেওয়া হল……
Object Privilege
|
Table
|
View
|
Sequence
|
Procedure
|
ALTER
|
*
|
*
|
||
DELETE
|
*
|
*
|
||
EXECUTE
|
*
|
|||
INDEX
|
*
|
|||
INSERT
|
*
|
*
|
||
REFERENCES
|
*
|
|||
SELECT
|
*
|
*
|
*
|
|
UPDATE
|
*
|
*
|
[একটি অবজেক্ট এর যে সকল প্রিভিলেজ কাজ করে সে গুলো এস্টারিস্ট মার্ক দিয়ে দেখান হয়েছে]
Syntax: GRANT object_priv [(columns)]
ON object
TO {user|role|PUBLIC}
[WITH GRANT OPTION];
উদাহরণঃ GRANT লিখে প্রিভিলেজ এর নাম, On লিখে অবজেক্ট এর নাম এবং To এর পর যে ইউজার কে দিব তার নাম দিতে হবে। কোন নির্দিষ্ট কলামের উপরে দিতে চাইলে প্রিভিলেজ এর পর কলামের নাম উল্লেখ করে দিতে হবে। যেমন……
GRANT update (department_name, location_id)
ON departments
TO scott, manager;
Passing Privilege: একটি Object এর উপর কোন ইউজারকে দেওয়া প্রিভিলেজ অন্য কোন ইউজারকে দেওয়ার প্রয়োজন হতে পারে। অর্থাৎ আমাকে দেওয়া প্রিভিলেজ যখন অন্য কাওকে আমি দিব এইটাই হল Passing Privilege। এটা আমি কোন নির্দিষ্ট ইউজারকে দিতে পারি আবার সবাইকে (Public) দিতে পারি। প্রিভিলেজ Passing এর সময় WITH GRANT OPTION এবং PUBLIC এই দুটি কিওয়ার্ড ব্যাবহার করা হয়।
WITH GRANT OPTION: কোন অবজেক্ট এর উপর ইউজারকে প্রিভিলেজ দেবার সময় অনুরুপ প্রিভিলেজ অন্য ইউজারকে দেবার জন্য WITH GRANT OPTION ব্যবহার করা হয়।
যেমনঃ GRANT select, insert
ON departments
TO scott
WITH GRANT OPTION;
এখানে scott কে departments টেবিলের উপরselect এবং insert প্রিভিলেজ দেওয়া হয়েছে। WITH GRANT OPTION দেবার ফলেscott অনুরুপ প্রিভিলেজ অন্যান্য ইউজার কে দিতে পারবে।
PUBLIC: একই সাথে সকল ইউজারকে প্রিভিলেজ দেবার জন্য PUBLIC কিওয়ার্ড ব্যবহার করা হয়।
যেমনঃ GRANT select
ON alice.departments
TO PUBLIC;
এখানে alice ইউজারের departments টেবিলে সবাইকেselect করার প্রিভিলেজ দেওয়া হয়েছে।
Dictionary View থেকে প্রিভিলেজ দেখাঃ Session Privs থেকে কোন ইউজারকে দেওয়া সমস্ত প্রিভিলেজ দেখা যায়। যেমন HR এ কানেক্ট থাকা অবস্থায় এর প্রিভিলেজ দেখার জন্য……
select * from session_privs;
Role View: কোন ইউজারকে দেওয়া রোল দেখার জন্য……
select * from user_role_privs;
Privilege View: রোল এবং System Privilege দেখার জন্য………
select * from role_sys_privs;
রোল এবং Object Privilege দেখার জন্য………
select * from role_tab_privs;
Revoke: কোন ইউজারের কাছ থেকে প্রিভিলেজ প্রত্যাহার করে নেওয়া হল Revoke।
Syntax: REVOKE {privilege [, privilege…]|ALL}
ON object
FROM {user[, user…]|role|PUBLIC}
[CASCADE CONSTRAINTS];
Example: Revoke System Privilege-
REVOKE CREATE USER, CREATE SESSION
FROM scott;
Example: Revoke Object Privilege-
REVOKE select, insert
ON departments
FROM scott;
……………………End……………………
Oracle Database: User access control – 1
আজ কে যা শিখবঃ
- User Privilege এবং System Privilege
- কোন টেবিলকে Privilege প্রদান
- Data Dictionary থেকে Privilege দেখা
- Role তৈরি এবং প্রদান
- Role এবং Privilege এর পার্থক্য
Privilege: কোন বিশেষ এসকিউএল স্টেটমেন্ট চালানোর অধিকারকে Privilege বলা হয়। Privilege দুই ধরণের- ১. System Privilege এবং ২. Object Privilege
System Privilege: ডাটাবেজের সাথে সম্পর্কিত Privilege গুলো হল System Privilege। ওরাকল ডাটাবেজে একশর বেশী Privilege রয়েছে। মূলত ডাটাবেজ Administrator প্রিভিলেজ গুলো দিয়ে থাকে। নিম্নে System Privilege এর একটি তালিকা দেওয়া হলো…
System Privilege
Privilege
|
Description
|
DBA
|
Grantee can Database Administrator
|
Grantee can create other Oracle users.
|
|
Grantee can drop another user.
|
|
Enables a user to alter any index in the database.
Note: There is no ALTER INDEX statement.
|
|
Enables a user to alter any materialized view in the database.
Note: There is no ALTER MATERIALIZED VIEW statement.
|
|
Enables a user to alter any PL/SQL procedure, function or package in the database.
|
|
Enables a user to alter any sequence in the database.
Note: There is no ALTER SEQUENCE statement.
|
|
Enables a user to alter any table in the database.
|
|
Enables a user to alter any view in the database.
Note: There is no ALTER VIEW statement.
|
|
Enables a user to perform operations related to cache groups.
|
|
Enables a user to create a cache group owned by any user in the database.
|
|
Enables a user to create an index on any table or materialized view in the database.
|
|
Enables a user to create a materialized view owned by any user in the database.
|
|
Enables a user to create a PL/SQL procedure, function or package owned by any user in the database.
|
|
Enables a user to create a sequence owned by any user in the database.
|
|
Enables a user to create a private synonym owned by any user in the database.
|
|
Enables a user to create a table owned by any user in the database.
|
|
Enables a user to create a view owned by any user in the database.
|
|
Enables a user to create a cache group owned by that user.
|
|
Enables a user to create a materialized view owned by that user.
|
|
Enables a user to create a PL/SQL procedure, function or package owned by that user.
|
|
Enables a user to create a public synonym.
|
|
Enables a user to create a sequence owned by that user.
|
|
Enables a user to create a connection to the database.
|
|
Enables a user to create a private synonym.
|
|
Enables a user to create a table owned by that user.
|
|
Enables a user to create a view owned by that user.
|
|
Enables a user to delete from any table in the database.
|
|
Enables a user to drop any cache group in the database.
|
|
Enables a user to drop any index in the database.
|
|
Enables a user to drop any materialized view in the database.
|
|
Enables a user to drop any PL/SQL procedure, function or package in the database.
|
|
Enables a user to drop any sequence in the database.
|
|
Enables a user to drop a synonym owned by any user in the database.
|
|
Enables a user to drop any table in the database.
|
|
Enables a user to drop any view in the database.
|
|
Enables a user to drop a public synonym.
|
|
Enables a user to execute any PL/SQL procedure, function or package in the database.
|
|
Enables a user to flush any cache group in the database.
|
|
Enables a user to insert into any table in the database. It also enables the user to insert into any table using the synonym, public or private, to that table.
|
|
Enables a user to load any cache group in the database.
|
|
Enables a user to flush any cache group in the database.
|
|
Enables a user to select from any sequence or synonym on a sequence in the database.
|
|
Enables a user to select from any table, view, materialized view, or synonym in the database.
|
|
Enables a user to unload any cache group in the database.
|
|
Enables a user to update any table, or synonym in the database.
|
|
Enables a user to connect to a database as an XLA reader.
|
User তৈরি করাঃ ডিবিএ এবং যে সকল User কে Create User প্রিভিলেজ দেওয়া আছে শুধুমাত্র তারাই ইউজার তৈরি করতে পারবে।
Syntax: Create User user
Identified by password;
Example: Create User emp
Identified by 123;
ইউজার এর পাসওয়ার্ড পরিবর্তন করাঃAlter User লিখে User এর নাম এবং শেষে নতুন পাসওয়ার্ড দিতে হবে।
Example: ALTER USER HR
IDENTIFIED BY employ;
প্রিভিলেজ প্রদানঃ কোন ইউজারকে ডাটাবেজে কানেক্ট করার জন্য Create Session প্রিভিলেজ দেওয়া হয়। তাই প্রথমে ইউজারকে আমরা Create Session প্রিভিলেজ দিব। এবং এর মাধ্যমে কোন ইউজারকে প্রিভিলেজ কিভাবে দেওয়া হয় তা শিখব।
Syntax: GRANT privilege [, privilege…]
TO user [, user| role, PUBLIC…];
Example: GRANT create session
TO scott;
Role: Role হল অনেক গুলো প্রিভিলেজ এর একটি গ্রুপ। যদি কোন ডাটাবেজ এ অনেক ইউজার থাকে তাহলে প্রত্যেককে আলাদা ভাবে একই প্রিভিলেজ প্রদান করা বেশ সময় সাপেক্ষ ব্যাপার। তাই রিলেটেড প্রিভিলেজ গুলকে নিয়ে একটি রোল তৈরি করে তা ইউজারকে প্রদান করা হয়।
Role তৈরিঃ CREATE ROLE লিখে তারপর রোলের নাম দিতে হবে……
Example: CREATE ROLE manager;
Role কে প্রিভিলেজ দেওয়াঃ GRANT লিখে প্রিভিলেজ গুলোর নাম দিতে হবে এবং শেষে যে রোলকে দিব তার নাম দিতে হবে……
Example: GRANT create table, create view
TO manager;
কোন ইউজারকে রোল প্রদানঃ GRANT লিখে রোলের নাম তারপর যে সকল ইউজারকে দিব তার নাম……
Example: GRANT manager TO DE HAAN, KOCHHAR;
চলবে………