۵ مطلب با موضوع «Programming :: Oracle Technology :: Oracle PL/SQL» ثبت شده است

نحوه پیدا کردن سایز دیسک های سیستم عامل از طریق PL/SQL

برای اینکار هیچ پکیج PL/SQl از قبل نوشته شده ای وجود نداره برای رسیدن به نتیجه باید یک external table ساخت و با استفاده از یک pre-processor اطلاعات مورد نیاز رو برگردوند متاسفانه این pre-processor ما براساس پلتفرم کار میکنه

برای سیستم عاملهای یونیکس بیس و خانواده لینوکس

step0:

[oracle@localhost]$ df -B 1 /usr
Filesystem 1B-blocks Used Available Use% Mounted on
/dev/sda3 24770654208 22113492992 1398870016 95% /
step1: 

[oracle@localhost ~]$ cat /tmp/demo/demo.dat
/usr
step2: 

[oracle@localhost ~]$ cat /tmp/demo/df.sh
#!/bin/bash
/bin/df -B 1 `/bin/cat ${1}` | /bin/awk 'NR == 2 {print $4}'
step3: 

create or replace directory DEMO as '/tmp/demo'
step4: 

CREATE TABLE
df
(
free NUMBER
)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY DEMO
ACCESS PARAMETERS
(
RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252
NOBADFILE
NOLOGFILE
PREPROCESSOR demo:'df.sh'
FIELDS TERMINATED BY "|" LDRTRIM
REJECT ROWS WITH ALL NULL FIELDS
(
free CHAR
)
)
LOCATION
(
'demo.dat'
)
)
REJECT LIMIT UNLIMITED
;
step5: 

SQL> select * from df;

FREE
----------
1398870016

فقط نکته‌ای که داره اینه که سایز پارتیشن‌ها رو براساس نقاط مانت شده درمیاره و اون نقطه مانت شده ای که میدید حتما باید رو یه پارتیشن جدا باشه تا سایزش رو نشون بده و اگه اون نقطه زیرمجموعه یه نقظه دیگه باشه حتما باید نقطه اصلی رو بدید تا سایز اون پارتیشن رو بفهمید

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

اجرای trigger همزمان با logon به سیستم

میخوام یه trigger بنویسم که با login هر کاربر اجرا بشه و مثلاً نام کاربر رو ذخیره کنه:

CREATE OR REPLACE TRIGGER logonauditing
AFTER LOGON ON application.schema
DECLARE
machinename VARCHAR2(64);
osuserid VARCHAR2(30);
session_id_part1 NUMBER;
session_id_part2 NUMBER;
CURSOR c1 IS
SELECT osuser, machine, sid, serial#
FROM v$session WHERE audsid = userenv( 'sessionid' );
BEGIN
OPEN c1;
FETCH c1 INTO osuserid, machinename, session_id_part1, session_id_part2;
INSERT INTO LOGON_table(osuser, machine, logon_time, session_id_1, session_id_2)
VALUES ( osuserid, machinename, sysdate,session_id_part1, session_id_part2);
CLOSE c1;
COMMIT;
END;

نکته: میشه از AUDIT CONNECT به جای trigger استفاده کرد (اوراکل فعالیت‌های ورود و خروج رو تو audit trail ذخیره می‌کنه)، می‌تونید پیشنهاد تام در این باره رو از اینجا ببینید.

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

PL/SQL در مقابل SQLj: مقایسه‌ی سرعت در عملیات‌های ریاضی

اوراکل از زمان اوراکل 8i یک ماشین مجازی جاوا را به عنوان بخشی از پایگاه داده‌اش منتشر کرده است. خاطرم هست که چند سال پیش از کسی شنیدم که می‌گفت JVM اوراکل از PL/SQL در اجرای عملیات‌های ریاضی سریع‌تر است، اما هیچوقت به این گفته به شکل جدی نگاه نکردم. در این نوشته من یک مقایسه‌ی تطبیقی بر مبنای چند عملیات ریاضی پایه میان JVM اوراکل و PL/SQL انجام می‌دهم.
توجه کنید که من یک برنامه‌نویس PL/SQL هستم و از همین دید به قضیه نگاه می‌کنم. دلیل اینکه تمام آزمایش‌ها هم از PL/SQL فراخوانده شده‌اند همین است.

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

FTP از PL/SQL

گاهی اوقات بهتر است که کارهای FTP را بجای تکیه‌کردن بر بروی CRON یا AT، مستقیما از PL/SQL آغاز کنید.

شل اسکریپت

روش اول بر روی فرآیندی بر پایه‌ی جاوا اتکا دارد که می‌تواند برای آغاز کردن یک شل اسکریپت، و به طبع آن اجرا کردن فرآیندی انتقالی، به‌کار گرفته شود. این روش در دستورهای شل از  PL/SQL توضیح داده شده است. شل اسکریپت ممکن است شبیه چیزی باشد که به دنبال می‌آید:

#! /bin/ksh

# Move to appropriate directory on local server
cd /extracts

# FTP all files in directory
ftp -inv ftp.company.com <<EOF
user ftpuser ftppassword
# Move to appropriate directory on remote server.
cd /loads
ascii
mput *.*
bye
EOF

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

نحوه اختصاص‌دادن مستقیم role‌ها به برنامه‌های PL/SQL در اوراکل ۱۲c

کنترل دسترسی به شکل کد-مبنا (CBAC):

اختصاص‌دادن نقش به واحدهای برنامه‌نویسی PL/SQL در پایگاه داده‌ اوراکل 12.1

به طور پیش‌فرض: واحدهای برنامه‌نویسی PL/SQL با استفاده از اختیارات تعریف‌کننده‌ها ساخته می‌شوند و به همین خاطر هم با تمام اجازه‌ای که دارند، مستقیما به کاربری که آن‌ها را به‌وجود آورده، داده می‌شوند. چنین چیزی در زمانی که می‌خواهید کاری با اجازه بالا را به کاربری با اجازه پایین واگذار کنید، بسیار مفید خواهد بود. در این مواقع می‌توان کارها را در لفاف یه واحد برنامه‌ای PL/SQL پوشاند، و همراه با آن، اجازه اجراکردن آن را به کاربری با اجازه پایین اختصاص‌داد. مشکل تعریف‌کننده‌های اختیارات این است که خیلی ساده می‌توان اجازه‌ی بیش از حد به یک کاربر اختصاص‌داد.

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