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

نحوه برطرف کردن خطای ORA-12560

برای رفع خطای زیر:

ORA-12560: TNS:protocol adapter error

ابتدا:

  1. با استفاده از run در ویندوز برنامه مدیریت سرویس‌ها را باز کنید: Services.msc
  2. با جستجو در سرویس‌ها، سرویس OracleServiceORCL را پیدا و اگر سرویس stop بود با کلیک بر روی start آن را اجرا نمایید
  3. با زدن دستور زیر در cmd از عملکرد سرویس اوراکل مطمئن شوید:
tnsping < tnsalias >

یافتن tnsalias

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

F:\app\Mahdi\product\12.1.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora

با بازکردن این فایل، پیکربندی‌های مربوط به شبکه را باید مانند زیر ببینید:

# tnsnames.ora Network Configuration File: F:\app\Mahdi\product\12.1.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)

ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mghaffari)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

عبارت جلوی HOST همان آدرس سرور اوراکل شماست.
نکته: اگر مقادیر موردنظر را در این فایل نمی‌بینید با استفاده از این نوشته listener را دوباره کانفیگ نمایید.

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

C:\Users\Mahdi>tnsping ORCL

TNS Ping Utility for 64-bit Windows: Version 12.1.0.1.0 - Production on 16-SEP-2
014 18:22:38

Copyright (c) 1997, 2013, Oracle. All rights reserved.

Used parameter files:
F:\app\Mahdi\product\12.1.0\dbhome_1\network\admin\sqlnet.ora

Used EZCONNECT adapter to resolve the alias
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTO
COL=TCP)(HOST=fe80::d11c:66bf:7c73:17c0%8)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HO​
ST=fe80::d11c:66bf:7c73:17c0%8)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=169.254.​
23.192)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=169.254.23.192)(PORT=1521))(ADDR​
ESS=(PROTOCOL=TCP)(HOST=192.168.1.6)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=192​
.168.1.6)(PORT=1521)))
OK (0 msec)

C:\Users\Mahdi>
۰۸ ارديبهشت ۹۴ ، ۲۰:۵۱ ۳ نظر
مهدی غفاری

Stop-Start سرویس‌های ویندوزی با استفاده از کاربر محدود شده

بدون شرح

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

نمایش لیست تمام کاربران

برای نمایش لیست تمام کاربران می‌توانید از کوئری زیر استفاده کنید:

select * from all_users;

و برای لیست کردن تمام یوزرهای بانک‌اطلاعاتی از جدول dba_users کوئری بگیرید:

select * from dba_users;
۰۸ ارديبهشت ۹۴ ، ۲۰:۳۵ ۰ نظر
مهدی غفاری

نحوه بک‌آپ گیری با RMAN به صورت TimeBase

برای بک‌آپ گیری با RMAN ابتدا باید محل ذخیره‌سازی پیش‌فرض فایل‌های بک‌آپ رو مشخص کنیم.

مرحله اول

دایرکتوری مورد نظر رو ایجاد می‌کنیم:

C:\Users\Mahdi>md F:\app\Backup

C:\Users\Mahdi>dir F:\app
Volume in drive F has no label.
Volume Serial Number is 76E1-CF78

Directory of F:\app

09/18/2014 01:31 AM <DIR> .
09/18/2014 01:31 AM <DIR> ..
09/14/2014 08:19 PM <DIR> Backup
09/12/2014 06:41 AM <DIR> Mahdi
0 File(s) 0 bytes
4 Dir(s) 304,982,249,472 bytes free

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

رفع مشکل IO ERROR در SQL Developer

اگر بعد از اجرای SQL Developer هنگام اتصال به اوراکل به پیغام خطای زیر برخوردید مراحل را دنبال کنید:

An error was encountered performing the requested operation:

IO ERROR: The Network Adapter could not establish the connection.

Vendor code 17002

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

جستجوی انعطاف‌پذیر

نکته: دیتابیس اوراکل قابلیت PREPARE STATEMENT رو ساپورت میکنه

هرگاه بخواهیم در دستور SELECT خود، از کاربر ورودی دریافت نماییم، از & استفاده می‌کنیم. برای این مثال، از جدول PERSON استفاده خواهیم‌کرد.

دستور زیر تمام رکورد‌های جدول PERSON را به شرطی که فیلد NAME آن مساوی با ورودی کاربر باشد لیست می‌کند. دقت داشته باشید، بعد از اجرای کوئری پایگاه‌داده از شما مقدار ورودی را خواهد پرسید، به دستور زیر توجه کنید:

در پرس‌وجوی فوق از کاربر ورودی گرفته می‌شود، سپس جستجو در جدول PERSON آغاز می‌گردد و در انتها خروجی را به کاربر نمایش می‌دهد:

SELECT * FROM T5 WHERE AGE = &PLEASE_ENTER_YOUR_AGE;
ENTER VALUE FOR PLEASE_ENTER_YOUR_AGE: 10
AGE NAME
---- ------------
10 HOSSEIN

حالا می‌خوام INJECT کنم، می‌بینید که INJECT را قبول میکنه!!

SELECT * FROM T5 WHERE AGE = &PLEASE_ENTER_YOUR_AGE;
ENTER VALUE FOR PLEASE_ENTER_YOUR_AGE: 10 OR 1=1
AGE NAME
---- ----------
50 HAMID
20 AKBAR
10 HOSSEIN
30 HOSSEIN
15 AKBAR

در حقیقت عمل prepare statement‌ هم همینه یعنی پارامترها جدا میره سمت دیتابیس و دستور sql جدا میره سمت دیتابیس

نکته: من از قصد علامت & رو گذاشتم تا SQL INJECT رو قبول کنه ولی در فصل‌های آینده به این موضوع می‌رسیم که چجوری جلوی INJECT را در PREPARE STATEMENT بگیریم و دیگه دستور SQL رو به عنوان ورودی نگیره(پشت & یه علامت دیگه می‌ذاریم):

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

نحوه ذخیره تاریخ و زمان در جدول

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

SQL> CREATE TABLE MYDATE(BIRTHDATE DATE);
Table created.
SQL> INSERT INTO MYDATE VALUES (TO_DATE('22/09/14','DD/MM/YY'));
1 row created.
SQL> SELECT * FROM MYDATE;
BD
-------
22-SEP-14
SQL> ALTER SESSION SET NLS_CALENDAR='PERSIAN';
session altered
SQL> SELECT * FROM MYDATE;
BIRTHDATE
------------------
31 SHAHRIVAR 1393

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

توابع تاریخ و زمان

خیلی خوشحال می‌شدم تو این نوشته‌ها یه جاوای درست و حسابی هم میگفتم که باهم وارد jdbc بشیم و برخورد jdbc با type date رو بررسی کنیم. چون همیشه تو برنامه‌نویسی جاوا برنامه‌نویس‌ها تاریخ و زمان رو یا string می‌گیرن یا long، همیشه هم تو سطح اوراکل همه چیز رو اونجوری که دوست دارن می‌گیرن (البته اگه دیتابیس دست خودشون باشه)، به هر حال یه نقطه‌ای باید باشه که این ۲ تا رو به طور صحیح به هم وصل کنه.

جدول زیر در این پست مفروض است:

END_DATE START_DATE
02-May-90 02-May-89
10-May-89 04-May-89
10-May-90 04-May-89
04-Apr-89 04-Apr-89
04-May-89 04-Apr-89
10-May-89 04-Apr-89
10-May-91 04-Apr-89

این جدول T_DATE نام دارد. نوع داده‌های این جدول شامل موارد زیر می‌باشد.

  • فیلد START_DATE از نوع DATE
  • فیلد END_ DATE از نوع DATE

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

جدول DUAL

DUAL جدولی مجازی است که یک فیلد به نام DUMMY دارد. در هر کجا اگر جدول خاصی برای انتخاب وجود نداشته باشد، شما می‌توانید از جدول DUAL استفاده کنید.

به جای استفاده از جدول DUAL می‌توان از جدول‌های دیگه هم استفاده کرد(هر جدولی که دارای رکورد باشه) به طور دقیق هم همون کار DUAL را برای ما انجام می‌دهد ولی برای کارهای موقتی بهتره از جدول DUAL استفاده شود(شما می‌توانید خودتان هم به طور دستی یک جدول با یک فیلد برای کارهای TMP بسازید)

SELECT 2+2 FROM DUAL;

همان‌طور که در زیر می‌بینید جوابی که از این جدول مجازی یا هر جدول دیگری برای کارهای موقت ما بدست می‌آید 4 است.

2+2
----------
4
۰۱ ارديبهشت ۹۴ ، ۱۴:۴۰ ۰ نظر
مهدی غفاری

توابع پردازش رشته - LENGTH

این تابع طول یک رشته را بر می‌گرداند. به مثال زیر توجه نمایید.

SELECT NAME, LENGTH(NAME) FROM PERSON;

در دستور فوق بوسیله‌ی تابع LENGTH، طول داده‌های فیلد NAME از جدول PERSON را به دست می‌آوریم. پاسخ را در زیر مشاهده می‌کنید.

NAME     LENGTH(NAME)
-------- -------------
MOHAMMAD 8
MAHDI 5
MOHSEN 6
FARZAD 6
EHSAN 5

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