Oracle SQL Select ve Kısa Bilgiler

Tek satır yorum satırı için "--" çok satır için "/* */" kullanılır. Yorum satırlarını yazdığımız sql ifadeleri için açıklama ve yorum için kullanırız. Bu satırlar çalıştırılamaz.
-- bu tek satır yorum örneğidir.
/*
çoklu satır
yorum örneği
*/

select ifadesi ile kolonların seçilmesine projection, satırların seçilmesine selection denir.
sql ifadesi case insensitivedir.
sql ifadesi bir veya daha fazla satırda yazılabilir.
Anahtar kelimeler ve kolonlar arasına birşey yazılamaz. "se lect" gibi bir ifadede arada boşluk olduğundan hata verir.
Best practice olarak her anahtar ifade bir satırda yazılır. select birinci satır from ikinci satır where üçüncü satırda yazılır.
Satır başı (indent) kullanılması okunaklığı arttırır.
select firstname,last_name
depertment_id, salary
from employees; --depertment_id den önce indent kullanıldı.
sql ifadelerinin sonunda noktalı virgül kullanılır. tek sql için zorunlu değildir ama birden fazla sql için sql ifadelerin ayrılması için zorunludur. sql plus için sql ifadesinin bittiğini anlaması için noktalı virgül zorunludur.

select * from employees; --tüm satırları ve kolonları seçer. * ifadesi tüm kolonları ifade eder. Bazı kolonları (col1,col2) ve belli satırları getirmek için where ifadesi kullanılır.
select ifadesinde select ve from ifadesi zorunludur. Oracle tarafından özel kelimelerdir. Bunlar tablo adı değişken adında kullanılamaz. Sql developer üzerindeki ifadelerde özel kelimler mavi olarak gözükür.
select ifadesinde ve oracle'da varsayılan olarak tablo adları, kolon adları büyük yazılır. sql ifadeleri büyük küçük harfe duyarsızdır (case insensitive)

select içinde aritmetik ifadeleri kullanabiliriz.
select employe_id, first_name, salary, salaray + (salary*0.1) from employees; -- maaşların %10 zamlı gösterilmesi
null değeri sıfır veya boşluk demek değildir. null değeri bu alana değer girilmediğini gösterir. özel bir değerdir. null value ile aritmetik ifade kullanıldığında sonuç daima null olur.
select commmision_pct+10 from employess; -- commission_pct null olan kolonlar 10 ile toplandığından geriye null döner. null olmayan değerlere 10 eklenip döner.

select içindeki kolonlar için alias kullanarak yeniden adlandırabiliriz. AS kullanımı zorunlu değildir istenirse kullanılır, kullanılırsa okunaklığı arttırır. Yeni kolon adı çift tırnak içine yazılırsa kolon adı case sensitive yani küçük büyük harfe duyarlı olur nasıl yazıldıysa öyle gözükür ve kolon adı için boşluk vs kullanılabilir.
select last_name, last_name AS LNAME, first_name FNAME, last_name " LaST NaMe" from employees; -- kolon isimlendirme örnekleri

Concatenation operatörü || ile string ifadeler birleştirilir.
select first_name || ' ' || last_name "full name" from employees; --iki kolon boşluk ile birleştirildi bir kolon yapıldı
select first_name || ' çalıştığı birim: ' || depertment_id from employees;
string ifadeler tek tırnak içinde yazılır. tek tırnak karakterinin yerine q'[ ifadesi de kullanılabilir. Yani 'abc' ile q'[abc]' aynı şeydir. Böylece köşeli parentez içinde tek tırnak karakteri de kullanılabilir.
select first_name || q'[ çalıştığı birim: ]' || depertment_id from employees; yukarıdaki sql ile aynı sonucu döner.

distinct ifadesi ile tekrar eden değerler tekilleştirilir.
select distinct depertment_id from employees; -- çalışanların olduğu birimler tekilleştirilir. birden fazla kişi çalışsa bile o depertment_id bir kere listelenir.
distinct ifadesi birden fazla kolon için de kullanılabilir.
select distinct depertment_id, job_id from employees; --iki kolonu dikkate alarak distinct yapar

describe ile bir tablonun yapısı görebiliriz. kolon adları, tipleri ve null değer alabilir mi bakılır.
describe employees; veya kısaca desc employees; yazılabilir.
spacer

HR Kullanıcılı Yeni Bir Pluggable Database Kurma

Oracle 12c kurulduğu halde hr olan bir database yoksa bunu aşağıdaki adımlarla kurabilirsiniz.
Öncelikle aşağıdaki sorgu ile orclpdb vb gibi bir database olmadığıdan emin olun. Sadece PDB$SEED gözüküyorsa pluggable database kurulmamıştır.
select name, con_id from v$pdbs;
Computer Start Menu kısmında "DBCA" enter basıp Database Configurastion Assistant (DBCA) çalıştırıyoruz.
Database Operation: Manage Pluggable database seçip devam ediyoruz
Manage Pluggable Databases: Create a Pluggable database
Select Database: ORCL seçiyoruz. Hangi root database altına pluggable database create edilecekse o seçilmeli. Username ve Password girilmesine gerek yok.
PDB Identification: Create a new Pluggable database from PDB seed
Pluggable Database Options: orclpdb1 Administrator user name: orclpdb1 şifre girilir devam edilir
PDB Storage Options: Ekrana gelend efault alanlar devam edilir ve finish denilir.

ORCLPDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orclpdb1)
)
)

tnsnames.ora dosyasına yeni database entry eklenir. ve hr kullanıcısı unlock yapılıp login olabilir.
spacer

ORA-01033 oracle initialization or shutdown in progress Hatası



Oracle kurulu olan makine kapanıp yeniden açıldığında pluggable database kapalı gelir. Yani kapalı olan bir database'e bağlantı kurmak istediğinizde bu hatayı alırsınız.
SQL Plus üzerinden sys as sysdba; komutu ile bağlanıyoruz.
alter pluggable database orclpdb open; -- komutu ile orclpdb plugabble database açıyoruz.
alter pluggable database all open; -- komutu ile tüm pluggable databaseleri de açabiliriz.
spacer

Oracle HR Kullanıcısını Unlock Yapma

Oracle kurulduğunda HR kullancısı CDB olan orcl'in altındaki orclpdb içinde yüklü gelir ancak bu kullanıcının hesabı kilitlidir. Kullanılması için kilidinin açılması gerekir. Kilit açmak için databasede yetkili olan SYS kullanıcısını kullanacağız.
SQL Plus veya SQL Developer ile sysdba olarak login oluyoruz.
show con_name; --CDB$ROOT görülür
select name, con_id from v$pdbs; --Oracle objectlerinin bilgilerini içeren dictionary view tablolarıdan v$pdbs tablosundan mevcut pluggable database listelenir. PDB$SEED ve ORCLPDB adında iki database görülür.
alter session set container = orclpdb; --komutu ile sessiondaki bağlı olan database orclpdb olsun diyoruz ve bu database'e geçiyoruz.
show con_name; --ORCLPDB olduğundan emin oluyoruz
select name, open_mode from v$pdbs; --orclpdb nin durumu ilk kurulduğu zaman mounted olarak gelir. onu open yapmalıyız.
alter pluggable database open; -- bağlı olduğumuz pluggable databasei open yapıyoruz.
select * from all_users; --orclpdb databaseinde olan tüm kullanıcılar listelenir.
alter user hr identified by 123 account unlock; --hr kullanıcısının şifresini 123 olarak güncelleyip unlock yapıyoruz.

tnsnames dosyasına hr için bir entry ekliyoruz.

ORCLPDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orclpdb)
)
)

Artık SQL Developer kısmından TNS için ORCLPDB seçerek hr kullanıcısı ve 123 şifresi ile giriş yapabiliriz.
spacer

SYS ile SQL Plus veya SQL Developer ile Veritabanına Bağlanmak

SQL Plus ve SQL Developer Oracle'ın kendi veritabanlarına bağlanmak için sunduğu uygulamalardır.
SQL Plus siyah konsol ekrandır ve daha çok adminler tarafından kullanılır. SQL Developer arayüzü olması ve daha kolay kullanıldığı için daha çok geliştiriciler tarafından kullanılır.
SYS kullanıcısı veritabanındaki tüm yetkilere sahip en üst admindir.
Programlar > Oracle kısmında SQL Plus'ı çalıştırıyoruz.
"sys as sysdba" komutu ile veritabanına sys kullanıcı adı ve sysdba olarak bağlanmak istiyoruz. Sonra şifre girip entera basıyoruz. Bağlantımız gerçekleşiyor ve bize bağlandığımız sunucunun "Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64 Bit" bilgisi geliyor. Artık SQL komutlarını yazabiliriz.
SQL> show con_name --komutu mevcut bağlı olduğumuz connection bilgisini gösterir. 12c'de başlangıçta en üst seviyede master container yani CDB$ROOT olduğunu söylemiştik. Bunu sorgulayarak görebiliyoruz. Container içinde herhangi bir object, application olmadığını biliyoruz. SYS kullanıcısı her zaman önce root database olan CDB'ye bağlanır daha sonra pluggable database PDBlere geçiş yapar.

Aynı işlemi Programlar > SQL Developer çalıştırarak da yapabiliriz. Sol tarafta "Connections" kısmından bağlantı bilgilerini girmeliyiz. Burada bilmemiz gereken tnsnames.ora dosyası var. Bu dosya veritabanına bağlanabilmemiz için oracle tarafından connection konfigürasyon bilgilerinin tutulduğu dosyadır. Bu dosya databasein kurulduğu yerde app>username>product>12.2.0>dbhome_1>network>admin>tnsnames.ora dizinindedir. Bu dosya açılıp incelenir. Oracle kurulduğunda bu dosya otomatik oluşturulur. Bu dosyadaki ORCL bizim bağlandığımız container database bilgilerini içerir. ORCL connection adıdır buraya herhangi bir şey yazılabilir. ADRESS alanı hangi protokol ile hangi hosta ve hangi porttan bağlanılacağını gösterir. Aynı bilgisayara kurulum yapıldıysa host kısmı localhost olur veya bilgisayar adı yazılır. Gerçek hayatta bu kısıma bağlanacağımız server ip adresi yazılır. Birden fazla bağlantı için bu dosyaya manuel entryler eklenir. Service_name kısmı %99 database adı ile aynı olur. Genellikle db adı büyük harflerle service adı küçük harflerle yazılır.

SQL Develoepr da yeni connection ile açılan ekranda aşağıdaki bilgiler ile bağlantı kuracağız.
Connection Name: Herhangi bir şey yazılabilir. Ben orcl yazıyorum.
Username: sys as sysdba
Password: şifre giriyoruz ve Save Password seçiyoruz.
Connection Type: TNS
Network Alias: ORCL (tnsnames.ora dosyasındaki entrylerden gelir)


ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
spacer

Oracle 12c İndirilmesi ve Windows 7, 8, 10 Üzerinde Kurulumu



Oracle Web Site adresine gidilir. Bu sayfada Oracle'ın işletim sistemlerine göre son versiyonları olan veritabanı kurulum dosyaları listelenir. Standart Edition ve Enterprise Edition paketleri vardır. Standart edition daha küçük kuruluşlar için kullanılırken Enterprise Edition büyük kurumlar ve kuruluşlar için tercih edilir. 12c Release 1 için Standart ve Enterprise kurulum dosyaları ayrılmışken 12c Release 2 için tek bir kurulum dosyası vardır. 12c R2 kurulum aşamasında bu sorulacaktır. Oracle Database'in bu sürümleri ücretlidir. Ücretsiz ve lisans ücreti olmadan bir projede Oracle Database kullanmak için Express Edition kullanabilirsiniz. Accept License Agreement seçerek uygun olanı indirebilirsiniz.


İndirilen zip dosyası unzip ile bir klasöre çıkarılır. setup.exe ile kurulum başlatılır. Oracle kurulum adımları şöyledir:

Configure Security Update: Bu aşama lisanslı olanlar için gereçlidir. Support Password girilerek destek alınacak email adresi belirtilir. Biz email boş bırakıp check işaretini kaldırıyoruz. Herhangi bir uyarı verirse Yes ile devam ediyoruz.
Installation Option: Bu aşamda üç seçenek var. Yeni bir database kur ve konfigür et, sadece yazılımı yükle ve var olan database, upgrade et. Biz Create and configure database ile devam ediyoruz.
System Class: İki seçenek var. Büyük bir veri merkezi için kurulum veya basit işler için kolay konfigürasyon olan Desktop class. Biz desktop ile devam ediyoruz.
Oracle Home User: Oracle virtual account veya yeni windows kullanıcı oluşturarak devam etmeyi tavsiye ediyor. Var olan windows kullanıcıları da seçilebilir ancak biz database işlemleri için bir kullanıcı create ediyoruz.
Typical Installation: Oracle'ın kurulacağı dizinler girilecek. Oracle widnows kurulu olmadığı C 'nin dışında bir yere kurmanızı tavsiye ederim. Database Edition bu aşamada seçilir. Character set seçilir. Global yani Container database adı girilir. Biz orcl giriyoruz. Şifre beliritlir. Pluggable database adı girilir. Biz orclpdb giriyoruz. Oracle standartlara uygun şifre girmediniz derse eminim ignore et deyip Yes ile devam ediyoruz.
Prerequisite Checks: Bazı kontroller yapılır.
Summary: Girilen bilgiler özet olarak sunulur.
Install Product: Kurulum aşamasıdır.
Finish: Kurulum tamamlanır.



Oracle web sitesi üzerinden kurulum hakkında daha detaylı bilgi alabilirsiniz.
spacer

Oracle Live SQL ile Kurulum Yapmadan SQL Yazma



Çoğu zaman Oracle'ı kurmak zahmetli bir hal alabiliyor. Basit bazı şeyler için Oracle kurmak yerine herhangi bir kurulum yapmadan Oracle'ın web tabanlı bize sunduğu ve sql yazmamızı sağlayan Oracle Live SQL kullanılabilir.
Oracle Live SQL adresinde herhangi bir kurulum yapmadan cloud üzerinde sorgular yazabiliriz. Bu hizmeti kullanabilmek için oracle username ve password ile giriş yapmalısınız. Hesabınız yoksa hemen oluşturabilirsiniz.

Giriş yapınca oracle herhangi bir objecti olmayan geçici bir user verecek. Veritabanı user ve schema ayn şey demektir. Bize verilen user için "My Schema" scheması oluşturulur. Bu user ile giriş yaptıktan sonra SQL Worksheet alanında Select, DML, DDL ve transaction language yazılabilir. Schema alanında object create edilebilir, veya varolan objectler upload edilebilir. Oracle üzerinde çalışmamız için Human Resources, Sales History ve daha fazla schemayı bize read only yani sadece select ile kullanabileceğimiz bir yapıda sunuyor. Bu schemalarda table, procedure, sequence, view gibi birçok object bulunmaktadır. Schema adı ön eki ile bunlara erişebiliriz.

select * from hr.employees; ile sorgumuzu yazazarak "run" butonu ile çalıştırıp sonuçları görebiliriz.
spacer

Oracle Human Resources (HR) Schema İnceliyoruz



Oracle örnek objectlerin ve dataların olduğu Human Resources (HR) schema'sını geliştiriceler için hazır sunuyor. Bu schemayı incelediğimizde Employees, Departments, Locations, Countries, Regions, Jobs ve Job_History tablolarının olduğunu görüyoruz. Employees tablosu Departments tablosu ile, Departments tablosu Locations tablosu ile, Locations tablosu Countries ile, Countries tablosu Regions ile, Employees tablosunun kendisi ile, Employees ve Departments tablosunun Job_History ile ilişkili olduğunu görüyoruz.

Bu diagram üzerinden mavi olarak belirtilen kolonlar Primary Key olan kolonlardır. Primary Key olan kolon unique ve not null'dır. Job_History tablosunda iki kolon birden Primary Key için kullanılmıştır. Buna composit pk denir. Employees tablosundaki manager_id kolonu self joi ile yine Employees tablosundaki employee_id kolonunu referans almıştır. Employees tablosu Departments tablosundaki department_id ile Fk, Departments tablosu Locations tablosundaki location_id ile Fk, Locations tablosu Countries tablosundaki country_id ile Fk ve Countries tablosu Regions tablosundaki region_id ile Fk ilişkilidir. Genellikle FK olan bir kolon başka bir tablodaki PK kolonunu referans alır.
spacer

Oracle 12c Mimarisi



Oracle 12c ile cloud teknolojisine geçmiştir. Bu yüzden c kullanılmıştır.
Temelde container database (CDB) bunun altında pluggable database (PDBs) vardır. Her PDB kendi objelerini, uygulamalarını ve kullanıcılarını içerir. CDB root database olarak geçer ve herhangi bir object, uygulama içermez.

Önceki versiyonlarda birçok database vardı ve her database'in kendi serveri ve dba vardır. Yeni mimari ile bir tane server bir tane master database ve master DBA kavramları geldi. Bu server üzerinde farklı PDBler ve pdb dba olabilir. CDB Administrator ve PDB Administrator aynı veya farklı biri olabilir. Oracel 12c ile yönetim kolaylaştı ve maliyet azaldı.


spacer

Primary Key ve Foreign Key

Bir tabloda her satırı diğerlerinden ayırt etmek için kullanılan tekil anahtara Priamry Key denir. Employoees tablosunda employees_id, Departments tablosunda department_id primary keydir. PK unique ve not null constraintlerini içerir.
Tablolar veya kolonlar arası ilişkileri kullanmak için foreign key kullanılır. Employees tablosundaki department_id değeri bu personelin çalıştığı birimi niteler. Bu birimin bilgileri ise Departments tablosundan bakılır. Departments tablosundaki department_id PK iken Employees tablosundaki department_id foreign keydir. Foreign key kolonundaki değer referans aldığı tablodaki kolonda değer olarak karşılık bulmalıdır. Referans alınan kolon PK veya Unique olmalıdır. FK kolonu NULL olabilir.
spacer

Sistem, Proje Geliştirme Yaşam Döngüsü ve Veritabanı Tasarımı

Bir proje veya sistem geliştirirken genel olarak 5 adımda gerçekleştirilir. Birçok farklı metodoloji ve yöntem vardır fakat bunları 5 basamakta sınıflandırabiliriz.
Analiz, Strajeti ve Planlama > Tasarım > Geliştirme > Test, Güncelleme ve Bakım > Sistem
Analiz, Strajeti ve Planlama aşamasında iş gereksinimleri, nasıl bir ürün istendiğinin üzerinde çalışılır. Ne zaman, ne kadar kişiyle, hangi teçhizatlarla, nerede, kimlerle bu sistem geliştirilecek planlamalar yapılır.
Tasarım aşamasında istenen bu gereksinimler için tasarımlar oluşturulur. Bu aşamada veritabanı tasarımı çok önemlidir. Sistem mimarisi oluşturulur ve ER diyagramları gibi toollar ile tasarım yapılır.
Geliştirme aşamasında tasarımı oluşturulan sistemin prototipi yapılır. Tablolar, Objectler, kodlar, kullanıcı rolleri üzerinde çalışır.
Test, Güncelleme ve Bakım aşamasında yapılan sistem istenen gereksinimleri karşılıyor mu veya zaman içinde ortaya çıkan yeni gereksinimler üzerinde durulur.
Sistem aşamasında ise artık oluşturulan sistem kullanıma açılır ve bu aşamalar ihtiyaçlar dahilinde bir döngü şeklinde yürütülür.

Veri anlam ifade etmeyen bilgidir. Bilgi ise verinin anlam kazanmış işlenmiş halidir.
Veritabanı organize edilmiş bilgi topluluğudur. Veritabanı yönetim sistemi ise verilerin kaydedildiği, değiştirildiği, kullanıldığı ve yönetildiği veritabanı sistemleridir. RDBMS (Relation Database Management System) verilerin birbirleri ile ilişkilendirildiği ilişkisel veritabanı yönetim sistemleridir.

Tablo RDBMS'de verilerin depolandığı temel yapılara denir. Verilerden tablolar, tablolardan veritabanları oluşturulur.

İlişkisel veritabanları için ERM (entitiy relation model) kullanılır. ERM üç şeyden oluşur. Bunlar Entity, Attributes ve Relationshiptir. Entity gerçek dünyadaki nesnelere karşılık gelir. Okul veritabanı için öğrenciler, dersler, sınıflar birer entittydir. Entitiy'nin veritabanı karşılığı tablodur. Attributes entity'e ait özelliklerdir. Öğrenci entitysi için adı,soyadı, numarası,yaşı gibi özellikler attributedür. Atrributes'ün veritabanı karşılığı kolonlardır. Relationship entityler arasındaki ilişkilerdir. Öğrenci ve sınıf arasında öğrencinin hangi sınıfta olduğuna dair bir ilişki vardır. Relationship'in veritabanı karşılığı foreign keydir.

Tablolar arasında bire bir,bire çok, çoka çok ilişki olabilir. Bir çalışanın bir yöneticisi vardır(1-1 employees tablosu), bir departmanda birden fazla kişi çalışabilir(1-n employees tablosu), bir çalışan birden fazla departmanda daha önce çalışmış olabilir ve bir departmanda daha önce birden fazla kişi çalışmış olabilir(n-n job history tablosu).

SQL yapısal sorgulama dilidir. Veritabanına erişerek tablolara veri eklemek, güncellemek, silmek ve verileri çekmek için sql kullanılır. SQL*Plus ve SQL Developer Oracle'ın sql ürünleridir. Oracle serverda olan bir kullanıcı adı ve şifre ile SQL Plus veya SQL Developer kullanılarak bir sorgu yazılır. Bu sorgu oracle serverda çalıştırılır ve sonuç getirilir.

4 çeşit SQL tipi vardır. DML, DDL, DCL ve Transaction control.
Data Manipulation Language (DML): Select, Insert, Update, Delete ve Merge komutlarıdır. Veriler üzerinde değişiklik yapılır.
Data Definition Language (DDL): Create, Alter, Drop, Rename, Truncate ve Comment komutlarıdır. Objectler üzerinde değişiklik yapılır.
Data Control Language (DCL): Grant ve Revoke komutlarıdır. Yetki işlemleri için kullanılır. DBA tarafından kullanılır.
Transaction Control: Commit, Rollback ve Savepoint komutlarıdır.
spacer

View Sorgularken "ORA-01031 insufficient privileges" Hatasını Almak



Merhaba,

Geçen garip bir durumla karşılaştım. Belki sizde karşılaşırsınız diye paylaşmak istiyorum. a kullanıcısının viewı için b kullanıcısına yetki verdiniz diyelim. b kullanıcısı select çektiğinde normalde çalışır değil mi? Ama ilginçtir b kullanıcısı "ORA-01031" hatası alıyor. Oysa yetki vermiştiniz. Aşağıdaki sorgu ile gerçekten bu view üzerinde yetkisi olduğuna bakın.

select * from role_tab_privs;

Sorgu ile yetki olduğuna baktık. Hata aldığını ve sorgulayamadığını gördük. Viewin sql cümlesini inceliyoruz. Başka bir c kullanıcısına ait bir tablo içeriyor. b kullanıcısının bu tabloya erişim yetkisi yok. Yani b kullanıcısı c kullanıcısına ait tablo üzerinde izni olmadan a kullanıcısına ait viewi sorgulayamıyor. Çözüm için ne yapıyoruz c kullanıcısının tablosu için b ye yetki veriyoruz.

grant select on a.view1 to b;
grant select on c.table1 to b;
spacer