基本命令
PLSQL
在菜單help--support Info中可以看到
1-TNS File的配置路徑 D:\app\administrator\product\11.2.0\client_1\Network\Admin\tnsnames.ora
orcl =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP) (HOST =10.8.1.1) (PORT=1521)
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
2-安裝plsql后還需要安裝oracle的客戶(hù)端配置tns,才可以用plsql登陸
3-固定tool--windows list的方法是贡避,在window--save layout
su - oracle
sqlplus / as sysdba
開(kāi)啟:startup mount; 關(guān)閉:shutdown immediate;
sqlplus / as sysdba ---------以sys登陸 超級(jí)用戶(hù)(sysdba)
alter user 用戶(hù)名 account unlock; --------- 解除鎖定(必須帶“;”號(hào))
alter user 用戶(hù)名 identified 密碼; -------------修改密碼
alter database open; 開(kāi)啟數(shù)據(jù)庫(kù)操作
alter user scott account unlock;
alter user scott identified by oracle_4U
conn scott/oracle_4U;
show parameter name; 查看實(shí)例名稱(chēng)
lsnrctl start; 登陸linux服務(wù)器開(kāi)啟監(jiān)聽(tīng)
lsnrctl status; 查看監(jiān)聽(tīng)狀態(tài)
在PLSQL Developer這款工具里自帶有查看sql歷史的快捷鍵:ctrl+E
oracle有三個(gè)默認(rèn)的用戶(hù)名和密碼~
1.用戶(hù)名:sys密碼:change_on_install
2.用戶(hù)名:system密碼:manager
3.用戶(hù)名:scott密碼:tiger
基本的select查詢(xún)語(yǔ)句
select * from ename,(sal+200)*1.2 as salnew from emp; 通過(guò)別名
select * from emp where sal between 2000 and 3000; 通過(guò)between和and
select * from emp where sal in (2000,3000,5000); 通過(guò)in 鎖定范圍信息
select ename,sal from emp where ename like 'A%'; 模式匹配
select ename,sal from emp where ename like '_A%'; like的模式匹配
select * from emp where comm is null; 使用null 條件
select * from emp where comm is not null; 使用null 條件
select ename,sal,deptno form emp where sal >1500 or ename like '%A%' or
deptno in(20,30); 使用or運(yùn)算符
select ename,sal from emp order by sal; 使用order by 子句可對(duì)檢索進(jìn)行排序,ASC 升序(默認(rèn)是升序) DESC 降序
select ename,sal from emp order by sal desc; 降序來(lái)排列
select ename,sal,deptno from emp order by 3,2; 通過(guò)第三行闪朱,第二行來(lái)排序順序
select distinct deptno from emp; 使用distinct來(lái)去重
select count(distinct deptno) as new from emp;
select deptno,job,avg(sal) from emp group bu deptno,job order by deptno; 分組并且按照deptno進(jìn)行相關(guān)的排序
基本函數(shù)查詢(xún)語(yǔ)句
select lower('SQL COURSER') from dual; 將大寫(xiě)轉(zhuǎn)換為小寫(xiě)
select upper('sql courser') from dual; 將小寫(xiě)轉(zhuǎn)換為大寫(xiě)
select initcap('SQL Course') from dual; 將每個(gè)字母的第一個(gè)字母變成大寫(xiě)
select round(123.45678,2) test from dual; 取小數(shù)點(diǎn)后兩位
select sum(sal),avg(sal),min(sal),max(sal) from emp; 總和最大平均最小
select count(*) from emp; 查看所有的emp的數(shù)量大小
select count(comm) from emp; 查看emp中comm的個(gè)數(shù)是多少
條件查詢(xún)語(yǔ)句
1-使用 case when 來(lái)判斷刷選
select ename,deptno,sal case deptno when 10 then sal*1.1 when 20 then sal*1.2 else sal end newsal from emp; newsal作為新的資金儲(chǔ)存
2-使用 where 或者使用 having:
WHERE語(yǔ)句在GROUP BY語(yǔ)句之前薛匪;SQL會(huì)在分組之前計(jì)算WHERE語(yǔ)句皇帮。
HAVING語(yǔ)句在GROUP BY語(yǔ)句之后;SQL會(huì)在分組之后計(jì)算HAVING語(yǔ)句蛋辈。
select deptno,job,max(sal) from emp group by deptno,job having max(sal) > 2000 order by max(sal)
select deptno,job,max(sal) from emp where deptno=30 group by deptno,job;
使用聯(lián)接顯示多個(gè)表中的數(shù)據(jù)
內(nèi)聯(lián)接
自然連接是在兩張表中尋找那些數(shù)據(jù)類(lèi)型和列名都相同的字段,
然后自動(dòng)地將他們連接起來(lái)将谊,并返回所有符合條件按的結(jié)果
select * from emp;
select * from dept;
oracle使用using關(guān)鍵字
sql/92標(biāo)準(zhǔn)可以使用using關(guān)鍵字來(lái)簡(jiǎn)化連接查詢(xún)冷溶,但是只是在查詢(xún)滿(mǎn)足下面兩個(gè)條件時(shí),才能使
用using關(guān)鍵字進(jìn)行簡(jiǎn)化尊浓。
1.查詢(xún)必須是等值連接逞频。
2.等值連接中的列必須具有相同的名稱(chēng)和數(shù)據(jù)類(lèi)型。
select ename,deptno from dept natural join emp;
select ename,deptno from dept join emp using(deptno);
在兩個(gè)表聯(lián)接時(shí)才用on的栋齿,所以在一個(gè)表的時(shí)候苗胀,就剩下where跟having比較了。
select e.ename,e.sal,d.deptno from emp e join dept d on (e.deptno=d.deptno)
select w.enam,m.ename from emp w join emp m on(w.mgr=m.empno);
外聯(lián)接
Oracle 外連接(OUTER JOIN)包括以下:
左外連接(左邊的表不加限制)
右外連接(右邊的表不加限制)
全外連接(左右兩表都不加限制)
create table deptnew as select * from emp;
insert into empnew(ename,deptno) values('HANFEI',50)
select e.ename,e.deptno from empnew e left join deptnew1 d on(e.deptno=d.deptno) ;左聯(lián)接 左表empnew的值不變匹配右表合適的
select e.ename,e.deptno from empnew e right join deptnew d on(e.deptno=d.deptno); 右聯(lián)接 右表deptnew的值不變匹配左表合適的
全聯(lián)接 full join
select e.ename,e.deptno,d.dname from empnew e full join deptnew d on(e.deptno=d.deptno); 全聯(lián)接
笛卡爾積 交叉聯(lián)接 列數(shù)不變瓦堵,行數(shù)相乘
select e.ename,d.deptno from dept d cross join emp e;
使用子查詢(xún)來(lái)解決查詢(xún)
執(zhí)行單行子查詢(xún)·
select ename,sal from emp where sal>=(select sal from emp where ename='SCOTT');
select ename,sal from emp where sal>=(select avg(sal) from emp);
select ename,sal,deptno from emp where sal>=(select avg(sal) from emp) and deptno=(select deptno from emp where ename='SCOTT');
select deptno,min(sal) from emp group by deptno having min(sal)>(select min(sal) from emp where deptno=30);
使用子查詢(xún)來(lái)解決查詢(xún)
- 定義子查詢(xún)
- 了解子查詢(xún)的類(lèi)型
- 編寫(xiě)單行和多行子查詢(xún)
使用any運(yùn)算符
>any大于查詢(xún)出來(lái)的任一返回值(大于最小值)
<any小于查詢(xún)出來(lái)的任一返回值(小于最大值)
=any和in相同
<>any和基协!=any相同,即返回不等于查詢(xún)?nèi)我恢?select ename,sal,deptno from emp where sal > any(select sal from emp where deptno=30);
select ename,sal,deptno from emp where sal < any(select sal from emp where deptno=30);
>all大于查詢(xún)出來(lái)的最大返回值(大于最大值)
<ally小于查詢(xún)出來(lái)的最小返回值(小于最小值)
=all等于查詢(xún)結(jié)果中的所有值
<>和菇用!=不等于查詢(xún)結(jié)果中的所有值
select ename,sal,deptno from emp where sal<all(select sal from emp where deptno=30);
select ename,sal,deptno from emp where sal>all(select sal from emp where deptno=30);
select e.name from emp e where e.empno not in (select m.empno from emp m);
使用集合運(yùn)算符
- 描述集合運(yùn)算符
- 使用集合運(yùn)算符將多個(gè)查詢(xún)組成一個(gè)查詢(xún)
- 控制返回行的順序
create table dept1 as select * from dept;
create table dept2(dno number(2),dnm varchar2(14),address varchar2(13));
insert into dept1 values(50,'TEACH','SHANCHAT')
Insert into dept2(dno,dnm,address) select deptno,dname,loc from dept;
insert into dept2 values(60,'sale','beijing')
select * from dept1
使用Union 和 Union all 集合運(yùn)算符
Union:對(duì)兩個(gè)結(jié)果集進(jìn)行并集操作澜驮,不包括重復(fù)行,同時(shí)進(jìn)行默認(rèn)規(guī)則的排序惋鸥;
Union All:對(duì)兩個(gè)結(jié)果集進(jìn)行并集操作杂穷,包括重復(fù)行,不進(jìn)行排序卦绣;
select deptno,dname from dept1 union select dno,dname from dept2;
select deptno,dname from dept1 union all select dno,dnm from dept2;
使用intersect運(yùn)算符
UNION 是聯(lián)集耐量,而 INTERSECT 是交集
select deptno,dname from dept1 intersect select dno,dnm from dept2;
使用minus模式是差集合的模式
select deptno,dname from dept1 minus select dno,dnm from dept2;
select deptno,dname,loc from dept1 minus select dno,dnm,to_char(null)
from dept2;
處理數(shù)據(jù)
- 在表中插入行
- 更新表中的行
- 從表中刪除行
- 控制事務(wù)處理
drop table 表名;
drop table commodity滤港;
注意:
1.用drop刪除表數(shù)據(jù)廊蜒,不但會(huì)刪除表中的數(shù)據(jù),連表結(jié)構(gòu)也被刪除了溅漾!
truncate table 表名劲藐;
truncate table commodity;
注意:
1.用truncate刪除表數(shù)據(jù)樟凄,只是刪除表中的數(shù)據(jù)聘芜,表結(jié)構(gòu)不會(huì)被刪除!
2.刪除整個(gè)表的數(shù)據(jù)時(shí),過(guò)程是系統(tǒng)一次性刪除數(shù)據(jù),效率比較高
3.truncate刪除釋放空間
delete 表名缝龄;
delete commodity汰现;
注意:
1.用delete刪除表數(shù)據(jù)挂谍,只是刪除表中的數(shù)據(jù),表結(jié)構(gòu)不會(huì)被刪除瞎饲!
2.雖然也是刪除整個(gè)表的數(shù)據(jù),但是過(guò)程是系統(tǒng)一行一行地刪,效率比truncate低
3.delete刪除是不釋放空間的
區(qū)別:
TRUNCATE 只能對(duì)TABLE口叙;
DELETE可以是table和view
create table deptnew as select * from dept;
select * from deptnew;
insert into deptnew values(50,'TEACH,'SH');
insert into deptnew(deptno,loc,dname) values(60,'BJ','SALE');
insert into deptnew(deptno,dname) values(70,'abc') 帶有空值的行或者是
insert into deptnew(deptno,dname,loc) values(80,'xyz',null) 或者這種方法
insert into empnew(ename,hiredate,sal) values('HANFEI',sysdate,2500);
從其他表中復(fù)制行
create table d30(name char(20),sal int); 表名為d30,列為name和sal 類(lèi)型為char和int
insert into d30(name,sal) select ename,sal from emp where deptno=30;
更改表中的數(shù)據(jù)
update empnew set sal=3000 where ename='SCOTT'; 注意區(qū)分大小寫(xiě)才可以
update empnew set deptno=(select deptno from empnew where ename='SCOTT'),sal=(select sal from empnew where ename='SCOTT') where ename='HANFEI'
select * from d30;
delete from d30 where sal=1250; 從表中刪除行
delete d30 刪除所有的行
detele empnew where deptno=(selete deptno from empnew where ename='SCOTT');
selete * from empnew;
事務(wù)處理
使用plsql 中增刪改嗅战,涉及到數(shù)據(jù)的操作妄田,如果通過(guò)SQL window進(jìn)行操作的,一定要加上commit;
才可以真正的寫(xiě)到庫(kù)里面
通過(guò) command windows 來(lái)進(jìn)行操作
create table test as select * from dept;
select * from test;
commit;
delete test where deptno=40;
select * from test;
rollback;
select * from test;
commit;
可以看到之前刪除的表又恢復(fù)回來(lái)了
或者設(shè)立 savepoint點(diǎn)進(jìn)行恢復(fù)
delete test where deptno=40;
select * from test;
savepoint a;
delete test where deptno=30;
select * from test;
savepoint b;
rollback to a;
select * from test;
數(shù)據(jù)庫(kù)備份
從物理與邏輯的驮捍,備份可以分為物理備份和邏輯備份疟呐。
物理備份:對(duì)數(shù)據(jù)庫(kù)操作系統(tǒng)的物理文件(數(shù)據(jù)文件,控制文件和日志文件)的備份东且。物理備份又可以分為脫機(jī)備份(冷備份)和聯(lián)機(jī)備份(熱備份)启具,前者是在關(guān)閉數(shù)據(jù)庫(kù)的時(shí)候進(jìn)行的,后者是以歸檔日志的方式對(duì)運(yùn)行的數(shù)據(jù)庫(kù)進(jìn)行備份珊泳÷撤耄可以使用oracle的恢復(fù)管理器(RMAN)或操作系統(tǒng)命令進(jìn)行數(shù)據(jù)庫(kù)的物理備份。
邏輯備份:對(duì)數(shù)據(jù)庫(kù)邏輯組件(如表和存儲(chǔ)過(guò)程等數(shù)據(jù)庫(kù)對(duì)象)的備份色查。邏輯備份的手段很多薯演,如傳統(tǒng)的EXP,數(shù)據(jù)泵(EXPDP)秧了,數(shù)據(jù)庫(kù)閃回技術(shù)等第三方工具涣仿,都可以進(jìn)行數(shù)據(jù)庫(kù)的邏輯備份
- 從數(shù)據(jù)庫(kù)的備份角度分類(lèi):
從數(shù)據(jù)庫(kù)的備份角度,備份可以分為完全備份和增量備份和差異備份
完全備份:每次對(duì)數(shù)據(jù)庫(kù)進(jìn)行完整備份示惊,當(dāng)發(fā)生數(shù)據(jù)丟失的災(zāi)難時(shí)好港,完全備份無(wú)需依賴(lài)其他信息即可實(shí)現(xiàn)100%的數(shù)據(jù)恢復(fù),其恢復(fù)時(shí)間最短且操作最方便米罚。
增量備份:只有那些在上次完全備份或增量備份后被修改的文件才會(huì)被備份钧汹。優(yōu)點(diǎn)是備份數(shù)據(jù)量小,需要的時(shí)間短录择,缺點(diǎn)是恢復(fù)的時(shí)候需要依賴(lài)以前備份記錄拔莱,出問(wèn)題的風(fēng)險(xiǎn)較大。
差異備份:備份那些自從上次完全備份之后被修改過(guò)的文件隘竭。從差異備份中恢復(fù)數(shù)據(jù)的時(shí)間較短塘秦,因此只需要兩份數(shù)據(jù)---最后一次完整備份和最后一次差異備份,缺點(diǎn)是每次備份需要的時(shí)間較長(zhǎng)动看。
1尊剔、Rman(物理備份):針對(duì) 數(shù)據(jù)庫(kù),表空間菱皆,數(shù)據(jù)文件须误,數(shù)據(jù)塊挨稿,這種方案?jìng)浞莸乃俣群苈MǔT趥浞輸?shù)據(jù)時(shí)候不建議備份在線(xiàn)日志文件京痢,其他文件都可以備份
2奶甘、exp,expdp(邏輯備份):針對(duì) 用戶(hù),數(shù)據(jù)庫(kù)對(duì)象(表祭椰,分區(qū)...)臭家,這種備份方案對(duì)數(shù)據(jù)的完整性保證不是很好
1-rman
一、首先做數(shù)據(jù)庫(kù)的歸檔操作(只需歸檔一次):
1方淤、sqlplus sys/密碼 as sysdba;
2钉赁、關(guān)閉數(shù)據(jù)庫(kù),開(kāi)啟成mount模式:
shutdown immediate;
startup mount;
3臣淤、開(kāi)啟日志歸檔,并且開(kāi)庫(kù)后啟用自動(dòng)歸檔:
alter database archivelog;
alter database open;
alter system archive log start;
4窃爷、可以查看歸檔路徑:show parameter DB_RECOVERY_FILE_DEST;
5邑蒋、查看歸檔狀態(tài):archive log list
6、歸檔狀態(tài)中archivelog:有enable就說(shuō)明設(shè)置成功
7按厘、Exit医吊;退出sys模式
8、默認(rèn)的存檔空間是2G逮京;
查看存檔空間大星涮谩:show parameter db_recovery_file_dest;
修改大小:alter system set db_recovery_file_dest_size=100G;
二懒棉、注意:已經(jīng)設(shè)置好歸檔后每次備份從這里開(kāi)始草描。
Rman;
connect target sys/密碼
backup database;
2-export
備份:export 用戶(hù)名/密碼 file=用戶(hù)名.dmp 導(dǎo)出該用戶(hù)下的所有表
恢復(fù): import 用戶(hù)名/密碼 file=用戶(hù)名.dmp full=y(表示全部導(dǎo)入)
import 用戶(hù)名/密碼 file=用戶(hù)名.dmp tables=tt(表示導(dǎo)入tt表)