15天的OCP培訓筆記

第一天

7月13日OCP筆記:

Oracle Ocp11g準備資料:

OracleFundmentals 書

管理1 書

管理2 書

?

光盤下載:otn.oracle.com

文檔下載:docs.oracle.com

虛擬機配置:1cpu/2G RAM/OracleLinux/網絡HostOnly/40G SATA。安裝OracleEnterpriseLinux5.4,Oracle11gR2 11.2.0.1合武。E盤沒還原卡庐橙。

操作系統(tǒng):語言選英文(免環(huán)境變量NLS_LANG)靜態(tài)IP:200.100.50.13/24独撇,主機名server13.example。時區(qū):上海,不用UTC。密碼codecraft损趋。軟件全選。關閉防火墻椅寺,SELinux禁用浑槽。Kdump內核轉儲不選蒋失。不創(chuàng)建帳戶。分辨率1024*758(系統(tǒng)-管理-顯示-硬件-LCD-1024*768,首頁也要改桐玻,改后重啟)篙挽。

?

裝Oracle11gR2:

建組 oinstall dba oper 用戶oracle/密碼oracle1158

建目錄/u01/app/oracle,改所有者畸冲,改權限775

加環(huán)境變量:

umask 022

export TMP=/tmp

export TMPDIR=/tmp

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

export ORACLE_SID=orcl

export PATH=.:$ORACLE_HOME/bin:$PATH

安裝包拷到/tmp目錄下嫉髓。進oracle帳戶,執(zhí)行xhost+邑闲,$cd /;./runInstaller;

Create and configure the database

Server Class

單實例single Instance

裝包 包在Linux光盤的Server目錄

?

?

?

SQL語句:

查詢 SELECT

數據維護DML INSERT UPDATE DELETE

數據定義DDL CREATE ALTER DROP TRUNCATE

數據控制DCL GRANT REVOKE

事務控制TCL COMMIT ROLLBACK SAVEPOINT

?

解鎖用來學習Oracle的hr帳戶:

SQL>alter user hr identified by "hr" account unlock;

查書《SQL Language Reference》

?

進入sqldeveloper:

#xhost +

#su - oracle

$ORACLE_HOME/sqldeveloper/sqldeveloper.sh

設置:連接名hr,用戶名hr梧油,密碼hr苫耸,SID為orcl。測試應該狀態(tài)成功儡陨。

按F9執(zhí)行sql語句褪子。Sqldeveloper命令可修改,帶Tab自動補齊和Ctrl+BackSpace刪單詞使用更方便骗村。

?

顯示用戶:

>show user

不同帳戶有不同的表嫌褪,只有hr帳戶有employess表,而sysdba中沒有胚股。

用數據字典顯示所有的表:

>select table_name from dba_tables;//管理員的擁有表

>select table_name from user_tables;//用戶的擁有表

查看表結構(相看表有哪些列):

>desc 表名

相看表內容:

>select語句

?

關鍵字和對象名不區(qū)分大小寫笼痛,換分是任意的。

?

查詢:

>select 列|表達式 from 表;//表達式不影響原表

查詢的列別名AS "別名":解

>select first_name,last_name,salary*12 as "nianxin" from employees;

一般表達式都是加別名便于理琅拌。別名可以不加引號缨伊,但有空格的別名必須加引號。

查詢的去重復行:

>select distinct department_id from employees;

注意:表達式中與NULL有關的任何計算均為NULL进宝。

?

雙堅線字符串連接用雙堅線||

當字符串間中單引號刻坊,使用q'[]'括起字符串。

每課的練習只有英文版中才有党晋。作業(yè)為Practice for lesson1谭胚。

?

第二天

7月14日OCP筆記:

數據類型:NUMBER DATE VARCHAR2

DATE要求單引號界定,大小寫區(qū)分未玻,格式滿足要求灾而。

?

ORA-27300錯誤導致無法啟動數據庫,需要修改內核參數#vim /etc/sysctl.conf加入kernel.sem=250 32000 100 128完成深胳。

關鍵字绰疤、表名、列名都不區(qū)分大小寫舞终。

?

選92年之后進公司的:(使用日期)

>select first_name,last_name,salary from employees where hire_date='01-JAN=92';

查看沒有提成的:(IS NULL篩選)

>select first_name,last_name,salary from employees where commission_pct IS NULL;

按薪水排序:

>select first_name,last_name,salary from employees order by salary desc;

查詢名字中第2個字母為a的員工:

>... where last_name like '_a%';

IN關鍵字與OR功能有重復:

>salary IN(5000,6000,7000)同salary=5000 OR salary=6000 OR salary=7000

&變量替換可以替換列名或表達式

>select first_name,last_name,&v1 from employees where hire_date>'01-JAN-92' order by &v2 desc;

?

PL/SQL最常用功能:條件判斷轻庆,循還癣猾。還有函數,存儲過程余爆,包纷宇,觸發(fā)器。

單行函數蛾方,轉換函數像捶,組函數可以無需PL/SQL編程,直接實現(xiàn)常用功能桩砰。

單行函數單進單出拓春,多行函數則是多入單出。功能在SQL Language Reference中的Function查詢亚隅。

?

虛擬表dual用于構造完整語句:

>select upper('abcdefg') from dual;

?

年YYYY硼莽,而年縮寫YY/RR不易用不建議使用。

加月:

>select add_month(sysdate 1) from dual;

下周五:

>select next_day(sysdate 'FRIDAY') from dual;

月份最后一天:

>select last_day(sysdate) from dual;

日期四舍五入:

>select round(sysdate,'YEAR') from dual;

>select trunc(sysdate,'MONTH') from dual;

?

Sqlplus保存文件:(需要創(chuàng)建目錄)

>save /test.sql;不填路徑默認存在/home/oracle路徑下煮纵。

運行Sqlplus:

>@/test.sql;

編緝.sql文件用VIM編緝器懂鸵,另存為方式如下:

Shift+:w /test2.sql

?

答疑:

字串中有'用其它引號運算符q'[]'。字串行疏、日期用單引號方庭,列別名用雙引號秽五。篩選%和_用逃脫轉義符like '%Smi\_th%' ESCAPE '\'景馁。

使用sys用戶登sqldeveloper需將Role換為sysdba扮饶。

?

顯示轉換:

>select 123+'234' from dual;//相當于123+to_number('234')

顯示轉換自定義日期格式:

select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;

顯示轉換區(qū)分大小寫,以下兩條語句不同:

>select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS YEAR') from dual;

>select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS Year') from dual;

自定義的字符串放到日期格式之間用""

>select to_char(sysdate,'YYYY-MM-DD "of" HH24:MI:SS') from dual;

格式ddspth货葬,dd數字日期采幌,sp拼寫,th排序:

>...

使用fm刪除前導空格:

>...

?

數字顯示轉換為字符:

>select to_char(12345678,'$99,999.00') from dual;

注意任意長度數字占位小于數字將無法顯示。

to_number幾乎不用震桶。

to_date使用:隱式轉換可能報錯休傍,因而最好加上。

>...where hire_date

?

nvl(exp1,exp2)當表達式1不為空返表達式exp2:

nvl2(exp1,exp2,exp3)當表達式1不為空返表達式exp2蹲姐,為空返表達式exp3:

nullif(exp1,exp2)比較兩個表達式磨取,不等返回表達式1,相等返回空柴墩。

coalesce(exp1,exp2,exp3)返回第一個非空值忙厌。

?

CASE條件表達式:

>select lst_name,salary,CASE department_id WHEN 10 THEN salary+1000 WHEN 20 salary+2000 WHEN 30 salary+3000 ELSE salary+500 END AS "New Salary" from employees;

DECODE條件表達式:

>select lst_name,salary,decode department_id,10,salary+1000,20,salary+2000,30,salary+3000,salary+500 as "NewSalary" from employees;

第三天

7月15日OCP筆記:

?

子查詢內容:

查詢員工名字,工資(比Jones低的):

>select last_name,salary from employees where salary<(select salary from employees where last_name='Jones');

在查詢的結果中再進行查詢江咳。單行子查詢的結果是一行一列逢净,多行子查詢的結果是多行一列。多列結果只能分割為一列。

?

子查詢用途1:放到比較條件中,單行子查詢常配合組函數使用爹土。

單行比較運算符:> < >= <=

多行比較運算符:>ALL ANY大于最小

子查詢用途2:放在被查詢表處

select last_name,salary from (select last_name,salary from employees);

?

集合運算符:UNION/UNION ALL;INTERSECT;MINUS

例子:

>create table a (id number,name char(10));

>create table b (id number,name char(10));

>insert into a values(10,'aa');

>insert into a values(20,'bb');

>insert into b values(10,'aa');

>insert into b values(30,'cc');

>select * from a union select * from b;

?

處理數據包括: DML數據操作語句和TCL事務處理語句甥雕。

create table 表/列,insert into 表/值,update表set的列賦值胀茵,delete表/條件社露。建表的表名和列名加與不加空格都可以。insert into表列行用于添加缺少部分列信息的行琼娘,也可以在VALUES子句中填NULL峭弟。

表中插入單行:

>desc table1;//先查詢表結構,再方便插入行數據脱拼。

>insert into employees values(行值);

些語法一次只能插入一行瞒瘸。列名是可選參數一般不填,空值填NULL熄浓。

?

創(chuàng)建一個同結構的空表:

>create table emp as select * from employees where 1=2;

表中一次插入多行挨务,也就是將子查詢結果插入到表中:

>insert into emp select * from employees where department_id=50;

子查詢結果的結構要與被錄入表的結構一致。若只錄入前10前:where rollnum<11;

?

修改數據:

>update emp set salary=10000,comission_pct=0.1;

刪除數據:

>delete emp where salary>5000;

清空表玉组。刪除所有表內容,表還在:

>delete emp;刪除表內容的DML語句

>truncate table emp;//此為DDL語句

?

?

DDL語句:truncate;create;alter;drop;

DC語句:grant;revoke;

TCL事務控制語句:commit;rollback;savepoint;select for update;

事務特征ACID:原子性丁侄,一致性惯雳,隔離性,持久性鸿摇。多條DML都是一個事務石景、一條DDL、一條DCL拙吉。也就是說DDL潮孽、DCL語句自動提交(隱式提交)。正常退出也會自動提交筷黔。系統(tǒng)崩潰則回滾rollback往史。

select for update;鎖定被修改的行直到commit或update才釋放。

?

模擬崩潰:

#ps ef|grep oracleorcl;//查看進程號

#kill -9 進程號;

練習:建表佛舱,錄入10行椎例,試下不同的提交方式。

?

標記保存點:

>savepoint p1;

回滾到保存點:

>rollback p1;

?

利用偽列選擇前10行:

>select * from employees where rownum<11;

?

只有提交的數據才能被其它用戶可見请祖。修改的未提交數據订歪,其它用戶不可修改,只能訪問修改前的數據肆捕。

讀一致性:讀取的數據為查詢命令的執(zhí)行時間的數據刷晋。在數據區(qū)實現(xiàn)修改,修改前數據通過構造CR塊實現(xiàn)。

SELECT是無鎖眼虱,DML會產生鎖,鎖為行鎖喻奥。commit將釋放行鎖。

?

DDL語句蒙幻。

命名規(guī)則:30個字符以內映凳,同一用戶不能重名,只含字母數字_#$邮破,首不為數诈豌,不含保留字。

?

查看用戶:

>desc dba_users;//要求SYSDBA權限

>select username from dba_users;

?

查看保留字:

>desc v$reserved_words;//要求SYSDBA權限

>select * from v$reserved_words where reserved='Y';//保留字多數是關鍵字

?

建表抒和,要求有存儲空間和權限:

>create table hr.students (stu_id number,stu_name varchar2(20),stu_sex char(1) DEFAULT 'M');

DEFAULT參數填入默認值矫渔。

?

數據類型:number date 定長char(2000Byte) 可變字串varchar2(4000Byte) CLOB(charactor larger object 約4Gbyte)。

查看塊大写菝А:

>show parameter db_block_size;

時間間隔的數據類型:INTERVAL YEAR TO MONTH庙洼;INTERVAL DAY TO SECOND

?

添加列:格式(alter table 表 add 表)

>alter table students add resume clob;

>desc students;

?

建表約束條件,用于建表的列名后:constraint+約束名+約束類型

NOT NULL不空

UNIQUE不重镊辕,允許為空

PRIMARY KEY不重不空

FOREIGN KEY外鍵的值只能為參考主鍵值或NULL

CHECK自定義檢查

約束用于限制表中數據的有效性油够。

?

NOT NULL約束:(NOT NULL約束直接附在列名后)

>create table t1(id number NOT NULL,name char(10));

>create table t2(id number,name char(10));

>alter table t2 modify id number NOT NULL;

UNIQUE約束:

>create table t3 (id number constraint t3_id_un UNIQUE,name char(10));

>create table t4 (id number name char(10));

>alter table t4 add constraint t4_id_un UNIQUE(id);

主鍵約束用法:(建表的constraint+約束條件名+約束類型,改表的constraint+約束條件名+x約束類型括進列名)

>create table t5 (id number constraint t5_id_pk primary key,name char(10));

>create table t6 (id number,name char(10));

>alter table t6 add constraint t6_id_pk primary key(id);

外鍵約束用法:(constraint+約束條件名+references+主鍵表(主鍵列))

>cerate table classes (id number constraint class_id_pk primary key,class_name char(10));

>drop table students

>create table sutdents (stu_id number,stu_name char(10),class_id number constraint stu_classid_fk references classes(class_id));//建表外鍵約束寫在內部

>create table sutdents (stu_id number,stu_name char(10),class_id number,constraint stu_classid_fk foreign key(class_id) references classes(class_id));//建表外鍵約束寫在外部

>create table students1 (stu_id_number,stu_name char(10),class_id number);

>alter table students1 add constraint stu1_classid_fk foreign key(class_id) references classes(class_id);

注意建表外鍵約束寫在外部同修表形式征懈,若寫在內部不能加數據類型和foreign key關鍵字石咬。否則將出現(xiàn)ora-02253錯誤,“這里不允許限制聲明”卖哎。

教材31頁可以練習創(chuàng)建主外鍵的關系鬼悠。

檢查約束:

>alter table students add stu_age number(2);

>alter table students add constraint ck_age CHECK(stu_age between 12 AND 18);

>alter table students add stu_sex char(1) constraint ck_sex CHECK (stu_sex IN('M','F','m','f'));

復合主鍵:

>create table t8 (id2 number,name char(10) constraint t8_pk primary key(id1,id2));

?

用數據字典查看表的主外鍵關系:

>select table_name from user_tables;//查看表名

>select constraint_name,constraint_type from user_constraints where table_name='classes';//查看約束關系

第四天

160718第四天OCP筆記

?

ON DELETE CASCADE參數,聯(lián)動修改亏娜,刪除主鍵相關行同時刪除外鍵相關行:

SQL> alter table students drop constraint STU_CLASSID_FK;

SQL> alter table students add constraint STU_CLASSID_FK foreign key(class_id) references classes(class_id) on delete cascade;

?

ON DELETE SET NULL參數焕窝,聯(lián)動修改,刪除主鍵相關行同時將外鍵相關行置NULL:

SQL> alter table students drop constraint STU_CLASSID_FK;

SQL> alter table students add constraint STU_CLASSID_FK foreign key(class_id) references classes(class_id) on delete set null;

?

添加列:

>alter table students add resume clob;

刪除列:

>alter table students drop resume;

重命名列:

>alter table students rename resume resume1

修改列定義:

>alter table students modify resume varchar2(4000);

修改列默認值维贺、列約束條件的內容前面講過它掂。

?

創(chuàng)建視圖:

>create view v1 as select * from employees;

視圖本質上就是封閉一條查詢語句。視圖也可也像表那樣用select desc幸缕。

視圖不能刪除群发,只能刪除再創(chuàng)建:(兩種方法)

>drop view v1;

>create view v1 as select * from employees;//方法1

>create or replace as ...;//方法2

創(chuàng)建視圖問題:

>create or replace v1 as select * from employees;

WITH CHECK OPTION子句,對視圖的DML操作限定在視圖范圍內,超出范圍將被拒絕:

>create or replace v1 as select last_name,salary from employees where salary>15000 with check option;

>update v1 set sal=12000 where last_name='Kochhar';//若不加with check option參數发乔,修改后值將不可見熟妓,添加此參數將拒絕修改。

創(chuàng)建只讀視圖:

>create or replace v1 as select last_name,salary from employees where salary>15000 with read only;

刪除視圖:

>drop view v1;

?

簡單視圖的基表只能是1個栏尚,不包含函數起愈,不分組。

視圖包含以下內容不能刪除行:DISTINCT、偽列rownum抬虽、組函數官觅。

視圖包含以下內容不能修改行:DISTINCT、偽列rownum阐污、組函數以及表達式定義的列休涤。例如salary*12為表達式定義的列。

視圖包含以下內容不能添加行:DISTINCT笛辟、偽列rownum功氨、組函數、表達式定義的列以及沒有包含NOT NULL列手幢。

?

SEQUENCE序列捷凄。

>create sequence seq1 increment by 3 start with 0 maxvalue 50 cycle cache 10;//參數cache指一次算10個,供后面使用围来。

>create table test001(id int);

>insert into test001 values(id,sql.nextval);

>使用數據字典user_sequence查看sequence當前值

?

索引跺涤。

索引可以自動創(chuàng)建或手動創(chuàng)建,自動使用监透。全內存數據庫不需要創(chuàng)建索引桶错。且索引增加DML負擔,浪費系統(tǒng)資源胀蛮。

數據庫查詢有全表掃描和索引掃描牛曹,等方式。Oracle根據執(zhí)行計劃進行成本判斷決定是否使用索引醇滥。當具有索引且索引有助于(執(zhí)行方案選優(yōu))查詢才使用索引。

例如select count(*) from t1;是用全表掃描的超营,當有where條件時可能用索引鸳玩。

以某一列創(chuàng)建索引:

>create index inx_test001_id on test_001(id);

創(chuàng)建索引的情況:列值范圍很廣,列中包含大量的空值演闭,在where子句頻繁用表的列尤其是多表聯(lián)接的等值聯(lián)接條件不跟,表很大(萬行以上)卻查詢結果小于4%。

OLPT系統(tǒng)改的多查的少米碰,一般不建索引窝革。

upper(last_name)='SMITH'代替last_name='Smith'會解決輸入大小寫的問題,但不再使用索引吕座。

?

同義詞:

>create synonym emp for employees;

>create pulbic synonym e1 for hr.employees;//需要sysdba權限虐译,創(chuàng)建所有人都可以使用的同義詞。

?

第一章 了解Oracle體系結構

Oracle Server=Oracle Instance(運行時)+Oracle Database(存儲上)

Oracle Instance=Processes+Memory

Processes=ServerProcess+BackgrountProcess吴趴。服務進程為用戶所擁有

?

查看Oracle服務進程:

>ps -ef|grep|oracleorcl

查看后臺進程:

>ps -ef|grep ora_

?

研究5個關鍵的后臺進程:

Process Monitor ? ?? 即ora_pmon_orcl 作用:注冊服務器漆诽、回收資源

System Monitor ? ? ? 即ora_smon_orcl 作用:實例恢復,合并空間

Database Writer ? ?? 即ora_dbw0_orcl 作用:將內存中的數據寫回磁盤

Log Writer ? ? ? ? ? 即ora_lgwr_orcl 作用:將內存中的日志寫回磁盤

Checkpoint ? ? ? ? ? 即ora_ckpt_orcl 作用:同步數據文件、日志文件厢拭、控制文件兰英,使數據庫達到一致性。

?

Memory:一個共享區(qū)域(System Global Area SGA)和N個私有區(qū)域(Progrram Global Area PGA)供鸠。

SGA劃分:database buffer cache畦贸、redo log buffer、shared pool楞捂、java pool薄坏、stream pool、large pool泡一。

large pool用于支持備份恢復颤殴、數據裝載、數據導入導出鼻忠、并行查詢或DML操作涵但。

java pool用于支持java虛擬機。

streams pool支持流服務帖蔓。

PGA用于存放會話信息矮瘟、權限、變量塑娇、堆棧澈侠。

?

存儲:filesystem/ASM裸設備/RAW/NFS/NAS/SAN...

數據庫文件:數據文件、日志文件埋酬、控制文件哨啃、參數文件。歸檔日志文件写妥、備份文件拳球、口令文件、

?

參數文件存放位置:

$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora珍特。用于啟動Oracle Instance祝峻。

數據文件存放位置:

>select name from v$datafile;

>select name from v$tempfile;

日志文件存放位置:

>select nember from v$logfile;

控制文件:

>select name from v$controlfile;

口令文件:

$ORACLE_HOME/dbs/orapworcl.ora;

進程跟蹤及預警文件:

/u01/app/oracle/diag/rdbms/orcl/orcl/trace;//進程跟蹤文件

/u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log;//預警文件

?

實施ASM存儲后性能和容錯性會提升。

安裝獨立于服務器的Oracle Grid Infrastructor:

安裝Linux

創(chuàng)建組:asmadmin asmdba asmoper oinstall dba oper

創(chuàng)建帳號:#useradd grid -g oinstall -G asmadmin,asmdba,asmoper,dba;useradd oracle -g oinstall -G asmdba,dba,oper

(注意用戶組要加對扎筒,否則無法添加ASM磁盤組莱找,id grid;id oracle查組,usermod -a G dba grid添加組)

建目錄:/u01/app/grid;/u01/app/oracle嗜桌。擁有者:grid:oinstall /u01;oracle:oinstall /u01/app/oracle奥溺。權限:775。

環(huán)境變量修改部分:export $ORACLE_BASE=/u01/app/grid;export $ORACLE_HOME=/u01/app/grid/product/11.2.0/gridhome_1;ORACLE_SID=+ASM

?

準備ASM磁盤:40G骨宠,平均分11個區(qū)谚赎。

查看Linux內核版本:#uname -r

安裝ASMLib:#rpm -ivh /光盤目錄/*;

配置ASMLib服務:#/etc/init.d/oraleasm configure; 參數:grid/asmadmin/y/y淫僻。注意當前目錄執(zhí)行要用./oracleasm configure;

轉化為ASM磁盤:#/etc/init.d/oraleasm createdisk asmdisk01 /dev/sdb1;//注意sdb4分區(qū)是擴展區(qū)不能使用,注意是ROOT用戶

asmdisk01 /dev/sdb1

asmdisk02 /dev/sdb2

asmdisk03 /dev/sdb3

asmdisk04 /dev/sdb5

asmdisk05 /dev/sdb6

...

asmdisk10 /dev/sdb11

查看ASM磁盤:#/etc/init.d/oraleasm listdisks;

刪除ASM磁盤#/etc/init.d/oracleasm deletedisk asmdisk18

DATA Normal asmdisk01-04

FRA External asmdisk05-08

?

安裝grid軟件:

#su - grid

$.../clusterware/Disk1/runInstaller;//執(zhí)行安裝

選:Install and Configure Grid Infrastructor for a Standalone Server;數據磁盤選DATA Normal;口令;其它同Oracle安裝

用grid帳戶執(zhí)行$asmca;把5-8磁盤選成FRA壶唤。

($sqlplus / as asmdba;>startup;//啟動ASM實例)

?

安裝OracleDatabase軟件:

Oracle用戶下運行./runInstaller,只安裝不建庫雳灵,單實例數據庫(不選RAC,real application cluster),執(zhí)行腳本參數為缺省的不覆蓋闸盔。

?

建庫:

$dbca悯辙,General模板(General為OLPT模板,DATA為倉庫模板)迎吵。全局數據庫名任意起名躲撰,SID與環(huán)境變量一致。EM用database control(不用grid control)击费。密碼拢蛋。

Storage Tyep用ASM,Darabase Area用+DATA蔫巩,ASM口令谆棱。recovery option的flash recovery area設置為FRA(主要用來放備份文件),不選EnableArchiving圆仔。

勾選Samples垃瞧,內存(默認)、進程數(默認)坪郭、字符集(AL32UTF8)个从、ConnectionMode(默認)。

勾選建庫歪沃,存模板嗦锐,存建庫腳本。EM解鎖沪曙。

第五天

160719第五天OCP筆記

?

init.ohasd(包裝進程):實現(xiàn)自動啟動監(jiān)聽意推、ASM實例、數據庫實例珊蟀。

數據庫邏輯結構:數據庫-表空間-段-區(qū)-塊。段是空間分配單元外驱。表不夠用時育灸,以區(qū)為單位擴展。一般SYSTEM昵宇、SYSTEMAUX不用來存數據磅崭。

?

查看表空間名:

>select tablespace_name from dba_tablespaces;//需要SYSDBA權限

查看表空間名及文件名:

>select tablespace_name,file_name from dba_data_files;

向指定表空間建表:

>create table test (id number,name varchar(10)) tablespace users;

修改表的列寬

>col segment_name for a10;

查看表所在表空間、表瓦哎、段砸喻、區(qū)柔逼、塊:(表空間是users,而所有者是SYS)

>select tablespace_name,segment_name,blocks,extents,bytes/1024/1024 from dba_segments where owner='SYS' and segment_name='TEST';//注意SYS大寫割岛,表名也必需大寫愉适,不能用通配符?

?

循還錄入數據(注意加/執(zhí)行):

>begin

for i in 1..1000 loop

insert into test values(i,'aa');

end loop;

commit;

end;

/

?

?

啟動監(jiān)聽:無GI用oracle帳號 lnsrctl start癣漆,有GI用grid帳號维咸。再啟數據庫、EM(EM啟動需要創(chuàng)建安全例外)惠爽。

執(zhí)行腳本:>sqlplus hr/hr@scripts.sql

?

數據庫分階段診斷啟動:過程instance started;database mounted;database open;

>start nomount;//若執(zhí)行startup mount直接執(zhí)行到第2階段

>alter database mount;

>alter database open;

?

數據庫4種關閉方式癌蓖。生產環(huán)境多用shutdown transactional。shutdown abort則再啟動由SMON實例恢復婚肆。

命令startup force=shutdown abort+startup

?

?

參數含義查看文檔租副,改參數:

>alter system set sga_max_size=800M scope=both;//scope值memory、spfile较性、both

查看內存參數:

>show parameter sga_max_size;

查看磁盤參數文件:

#strings $ORACLE_HOME/dbs/spfileorcl.ora;//文件系統(tǒng)

#strings +DATA/orcl/spfileorcl.ora;//ASM設備

其中sp指separate physical

?

SQL清屏:

>!clear;

?

Oracle運維需要查看:

1用僧、預警文件 ? ? ?? 運行常規(guī)信息

1、進程跟蹤文件 ?? 各類進程两残,用地排錯

3永毅、動態(tài)性能視圖 ?? 日常性能監(jiān)控 內存表的視圖

4蜕窿、數據字典視圖 ?? 數據庫的物理和邏輯信息 數據字典的視圖

從References 的PartIII Dynamic Performance View

?

動態(tài)性能視圖:

用v$sql保存最近執(zhí)行的SQL語句:

>select sql_text,executions from v$sql where cpu_time>200000;

用v$session查看登錄的會話:

用v$lock查詢鎖信息:

>select sid,ctime from v$lock where block>0;

?

數據字典視圖(都是復數):

查看用戶擁有的表:

>select table_name from user_tables;

>select table_name from dba_tables;//查看所有用戶擁有的表

其它表dba_users混槐、all_sequences、dba_indexes呕童。

查看預警文件:EM-AlertHistory崔赌。

?

/*--------------------------------------------------------------------------------------------------------------------

ASM的磁盤組在數據庫建立之前用命令行管理意蛀,數據庫建立之后用EM或SQLPLUS管理。

實例管理ASM磁盤組(SQLPLUS):

grid帳號運行sqlplus / as asmdba;

用v$asmdisk v$asm_diskgroup查看ASM磁盤使用情況:

>select group_number,name from asm$disk;

建磁盤組(4塊):

>create diskgroup DG1 normal redundancy disk 'asmdisk09','asmdisk10','asmdisk11','asmdisk12';//redundancy指冗余

再次查看磁盤組:

>select group_number,name from asm$disk;

添加/刪除磁盤組:

>alter diskgroup dg1 add/drop disk 'asmdisk13';

同時添加刪除磁盤(經常用于換盤健芭,用一條執(zhí)行的更快):

>alter diskgroup DG1 add disk 'asmdisk14' drop disk 'asmdisk12';

刪除磁盤組:

>drop diskgroup dg1;

?

實例管理ASM磁盤組(EM):

進入General下的ASM县钥,刪除ASM磁盤要force。

創(chuàng)建磁盤組參數:

Redundancy冗余參數有high(至少三塊磁盤)慈迈、normal(至少兩塊磁盤)若贮、external(不冗余至少一塊磁盤)

Allocation Unit分配單元

?

創(chuàng)建故障組(EM):選若干塊磁盤,F(xiàn)ailureGroup起相同的名字痒留。

創(chuàng)建故障組(SQLPLUS):

>create diskgroup dg normal redundancy failgroup f1 disk 'asmdisk09','asmdisk10';

>create diskgroup dg normal redundancy failgroup f2 disk 'asmdisk10','asmdisk11';

區(qū)映射:只了解谴麦。

?

ASM磁盤組的兼容性:DATA/FRA/DG磁盤組由“ASM實例-Grid”管理,由“數據庫實例-OracleDatabase”使用伸头。

創(chuàng)建磁盤組時OracleDatabase版本<'compatible.rdbms'<'compatible.asm'<=Grid版本匾效。兼容版本越低性能越差。

?

重平衡REBALANCE恤磷,數據平均分配到磁盤上面哼。

創(chuàng)建表空間

>create tablespace tbs1 datafile '+FRA';

?

刪除磁盤后每個磁盤內容變多:

>alter diskgroup FRA drop disk 'asmdisk08';

ASM快速鏡像重新同步:當磁盤離線

?

實例管理ASM磁盤組(命令行)(在數據庫建立之前使用):

grid$asmca;

grid$asmcmd;

課后練習5.1野宜。需要將Oracle安裝光盤的labs目錄下。

第六天

160720第六天OCP筆記

?

/*網絡配置-------------------------------------------------------------------------------------------------------------------------------------------------

netmgr中的名字解釋:HostName主機名魔策、ServiceName數據庫全局服務名匈子、SID為$ORACLE_SID。

對于單實例數據庫代乃,Oracle Server旬牲、Oracle Listener在同一臺服務器。

listener.ora提供以下信息:監(jiān)聽器名搁吓、IP原茅、端口、數據庫服務名堕仔。

?

生成監(jiān)聽listener.ora:無GI用orcle有GI用grid帳戶擂橘。$netmgr;添加Listeners,主機IP(用靜態(tài)加快訪問速度)摩骨、端口通贞、GlobalDatabaseName填數據庫全局名、填$ORACLE_SID恼五。

注意監(jiān)聽配好后要啟動監(jiān)聽昌罩,多監(jiān)聽啟動要指定監(jiān)聽名。

生成tnsnames.ora:無GI有GI用oracle帳戶灾馒。$netmgr;添加Service Naming茎用,NetServiceName填網絡服務名,主機IP睬罗,端口號轨功,ServiceName填數據庫全局名。

注意listener.ora的參數要與已配好監(jiān)聽相同容达。

文本編緝監(jiān)聽器$vim $ORACLE_HOME/network/admin/listener.ora;$vim $ORACLE_HOME/network/admin/tnsnames.ora;有GI與無GI的區(qū)別是$ORACLE_HOME不同古涧。

文本編緝第2個監(jiān)聽器的名字不同、端口號不同花盐、去掉IPC通訊的一行(第一個監(jiān)聽器IPC保留)羡滑,其它的相同。由Process Monitor提供注冊服務算芯。

?

查數據庫全局名>show parameter service_names

顯示$ORACLE_HOME:echo $ORACLE_HOME

顯示$ORACLE_SID:echo $ORACLE_SID

查看監(jiān)聽是否提供服務:$lsnrctl status listener2;

?

通過進程間通信而不通過網絡訪問數據庫:

$sqlplus hr/hr;

$sqlplus / as sysdba;

?

使用監(jiān)聽訪問數據庫(簡單訪問):

$sqlplus hr/hr@IP:1521/orcl

$sqlplus sys/oracle@IP:端口/數據庫全局服務名 as sysdba;

通過使用不同的端口使用不同的監(jiān)聽器柒昏。

?

使用監(jiān)聽和tnsnames.ora訪問數據庫():

$sqlplus hr/hr@網絡服務名;

$sqlplus sys/oracle@網絡服務名 as sysdba;

?

專用服務器進程:

?

查看服務器進程:

>show parameter processes;//查看全部進程

>ps -ef|grep ora_;//查看后臺進程

?

設置共享服務器進程(服務端):

>alter system set shared_servers=25;//設置共享服務的進程數

>alter system set shared_server_sessions=100;//設置共享服務的用戶數

>alter system set dispatchers='(protocol=tcp)(dispatchers=1)';//拿出一個進程作排號器,注意dispatchers參數加引號

設置共享服務器進程(客戶端):

編緝tnsnames.ora將server=dedicated改為server=shared//將dispatchers注冊到默認監(jiān)聽器也祠。

用lsnrctl;services是否是dispatcher,約等5分鐘才顯示近速。dispatcher分配器诈嘿。

?

對于共享服務器進程堪旧,當用戶請求時,監(jiān)聽將不返回server process地址奖亚,而是返回dispatcher序列號淳梦。

以下操作不被共享服務器進程:管理、備份還原昔字、裝載爆袍、導入導出、并行作郭。如shutdown immediate;

對于共享服務器進程陨囊,SGA要增,PGA(用戶獨有)要減夹攒。

?

/*存儲結構-------------------------------------------------------------------------------------------------------------------------------------------------

查詢表空間及文件:

>select tablespace_name,files from dba_data_files;

創(chuàng)建表空間:

>create tablespace tbs1 datafile '+DATA' size 20M;//若文件系統(tǒng)datafile的參數'/u01/app/oracle/oradata/orcl/tbs2.dbf'

>create tablespace tbs2 datafile '+DATA' size 20M,'+FRA' size 20M;//此命令創(chuàng)建2個數據文件蜘醋,小表空間最多1024個文件,大表空間(32T-128T)只有1個數據文件

>create tablespace tbs3 datafile '+DATA' size 20M,autoextend on next 10M maxsize 10G,'+FRA' size 20M autoextend on next 5M maxsize unlimited;

刪除表空間:

>drop tablespace tbs4;

EM圖形界面管理表空間:略

?

段 區(qū)對應關系:

1M 64K

1-64M 1M

64M- 8M

區(qū)是最小的分配單位咏尝,塊是最小的I/O單位压语。

?

?

?

數據由OMF管理的數據文件,在表空間刪除會由oracle自動刪除對應文件编检。????

刪除表空間:

>drop tablespace tbs4 INCLUDING CONTENTS;

>show parameter db_create_file_dest;

>alter system set db_create_file_dest='/u01/app/oracle/oradata';

?

擴大數據庫胎食。

顯示文件編號:

>select file# from v$datafile;

設置數據庫文件大小:

>alter database datafile 9 resize 40M;

數據庫文件大自動擴展:

>alter database datafile 10 autoextend on next 10M maxsize 10G;

表空間大小自動擴展:

>alter tablespace tbs3 add datafile '+DATA' size 10M autoextend on next 10M maxsize10G;

?

/*用戶管理-------------------------------------------------------------------------------------------------------------------------------------------------

建帳戶:

>create user jack identified by jack123;//需要SYSDBA權限允懂,密碼不加引號

?

系統(tǒng)權限厕怜。

用DCL語句(grant revoke)進行授予登錄權限:

>grant create session to jack;

授予建表權限:

>grant create table to jack;

授予用戶其它權限:

>grant create sequence,create synonym,create view to jack;

撤消權限:

>revoke create session from jack;

?

對象權限的撤消是級聯(lián)的,系統(tǒng)權限的撤消是不級聯(lián)的累驮。

授予級聯(lián)系統(tǒng)權限:

>grant create table to jack with admin option;

撤銷級聯(lián)系統(tǒng)權限:

>revoke create table from jack;

EM圖形界面:Database-Users-填用戶名酣倾,密碼,系統(tǒng)權限

?

對象權限谤专。對象權限為grant+權限+on表+to用戶躁锡。

>grant select on hr.jobs to jack;

>revoke select on hr.jobs from jack;

>grant select on hr.jobs from jack with grant option;

>revoke select on hr.jobs from jack;//對象權限的撤銷是級聯(lián)的

級聯(lián)?置侍?映之?

>grant insert,update,delete on hr.jobs to jack;

?

角色使用:

>create role r1;

>grant select any table,create any table to r1;

>create role r2;

>grant all on hr.employees to r2;

>grant r1,r2 to jack;//把角色當作權限授權給用戶

?

概要文件對應EM中的profile。用于資源控制和口令安全性蜡坊。如:限制連接時間杠输、空閑多長時間斷開、每個用戶限制的會話數秕衙。

EM中設置概要:Server-Security-Profiles-蠢甲。

資源限制開啟:

>alter system set

通過函數限制口令復雜度:要么用PL/SQL編。要么$ORACLE_OME/rdbms/admin/utlpwdmg.sql腳本据忘,以SYS用戶執(zhí)行此腳本鹦牛,就可以在"ComplexityFuntion"填入函數名搞糕。

?

配額:

alter user jack quota 20M on users;

alter user jack quota unlimited on example;

grant unlimited tablespace to jack;

?

/*并發(fā)訪問-------------------------------------------------------------------------------------------------------------------------------------------------

復習:鎖機制,行鎖曼追、表鎖窍仰、事務鎖。鎖的并發(fā)性和兼容性礼殊。

事務結束釋放行鎖和表鎖驹吮。

?

查看某用戶的事務信息SID:

>select sid from v$session where username='HR';//注意用戶名要大寫。

獲取事務SID的鎖類型晶伦、鎖級別碟狞、請求的鎖、阻斷時間(s):

>select sid,type,lmode,request,ctime from v$lock where type in ('TM','TX') and sid in(事務號1坝辫,事務號2);

3級鎖較溫和篷就,6級是排它鎖。

?

EM圖形界面:Performance-BlockingSessions近忙。

看書只看收集命令竭业。教材學生指導書只有大綱的作用,寫的不細致及舍。

第七天

160721第七天OCP筆記

?

TM鎖-DML enqueue

TX鎖-Transaction enqueue

?

LMODE:

0 none

1 null

2 row-S(SS) RowShare

3 row-X(SX) RowExclusive

4 share(S)

5 share row exclusive(SRX)

6 exclusive(X)

鎖的排他性:X鎖全排他未辆,RS鎖除了X鎖全兼容,RX鎖锯玛、S鎖咐柜、SRX鎖只兼容RS鎖,SRX鎖攘残、X鎖自斥拙友。

DML加RX鎖,select for update加RS鎖歼郭,DDL遗契、DCL加X鎖。鎖的兼容會導致等待病曾。

兼容的鎖加鎖后牍蜂,一個會話解鎖后只解其會話的鎖。

用EM查看鎖等待隊列:Performance-InstanceLocks泰涂。

?

分別對第一個用戶鲫竞,第二個用戶加鎖:

>lock table jobs in row share mode;//能加上鎖,說明二級鎖是不排它的逼蒙。

解鎖:

>commit;

?

找到長期占有鎖的會話:

>select sid,ctime from v$lock where block>=1;//查找超過1秒的阻斷从绘。

>select serial# from v$session where sid=上條命令進到的;

結束長期占有鎖的會話:

>alter system kill session 填SerialNumber immediate;

死鎖由Orcle自動撤銷產生死鎖的語句。

?

EM管理undo表空間:Server-AutomaticUndoManagement:

>create undo tablespace undotbs2 data '+DATA' autoextend on next 10M maxsize 10G;

Oracle只能用一個undo_tablespace,由此語句設置undo表空間:

>alter system set undo_tablespace='UNDOTBS1';

顯示undo表空間的自動管理僵井、保留時間赁还、強制保留:

>show parameter undo_;//undo_retention在事務完成之后開始記時,

設置undo_retention:

>alter system set undo_retention=900;單位秒

從EM獲取undo表空間設置建議:

RelatedLinks-AdvisorCenter指導中心-AutomaticUndoManagement-RunAnalysis計算保留時間與undo表空間大小的對應關系驹沿。

?

用as of timestamp(to_timestamp(時間))查詢還原數據:

>select * from employees as of timestamp(to_timestamp('2016-07-13 11:00:00','yyyy-mm-dd hh24:mm:ss')) ;

?

/*數據庫審計-----------------------------------------------------------------------------------------------------

審計包括:強制審計、sysdba審計蹈胡、標準審計渊季、FGA細粒度審計、基于值的審計罚渐。

授予用戶sysdba權限:

>grant sysdba to hr;//

?

強制審計只審計管理員用戶的登錄行為却汉。

查找強制性審計的進程號(由sid找paddr到spid):

>select spid from v$process where addr=(select paddr from v$session where sid=(select distinct sid from v$mystat));//注意v$process中的列名為addr

顯示審計文件位置:

>show parameter audit_file_dest;//默認在$ORACLE_BASE/admin/orcl/adump;由上面的進程號找到審計文件位置

$進目錄

$more orcl_ora_進程號.aud;

?

標準審記審計非sys用記的行為:

>show parameter audit_trail;

若audit_trail=DB則審計信息保存在數據字典aud$。若audit_trail=OS則審計信息存放在audit文件目錄荷并。

?

標準審計的具體內容:

審計范圍-session(默認)合砂、access

審計類型-默認成功失敗都記錄

審計用戶-默認所有人

審計內空-執(zhí)行語句、使用系統(tǒng)權限源织、使用對象權限翩伪。

?

啟用審計:

>audit unlimited tablespace by hr;//啟用無限表空間的審計

用表dba_auti_trail查詢標準審計

>col obj_name for a10;

>select username,obj_name,action_name from dba_audit_trail where username='用戶名HR' and obj_name='表名T1';

關閉審計:

>noaudit create sequence by hr;//關閉建序列的審計

審計的圖形界面:Serer-Security-AuditSettings。

?

FGA細粒度審計谈息,可以查看用戶發(fā)出語句的詳細信息缘屹。通過包DBS_FGA實現(xiàn)。

查文檔:MasterBookList-PL/SQL Packages and Types Reference-DBMS_FGA侠仇。

語法如下:

DBMS_FGA.ADD_POLICY(

? object_schema ? ?? VARCHAR2,

? object_name ? ? ?? VARCHAR2,

? policy_name ? ? ?? VARCHAR2,

? audit_condition ?? VARCHAR2,

? audit_column ? ? ? VARCHAR2,

? handler_schema ? ? VARCHAR2,

? handler_module ? ? VARCHAR2,

? enable ? ? ? ? ? ? BOOLEAN,

? statement_types ?? VARCHAR2,

? audit_trail ? ? ?? BINARY_INTEGER IN DEFAULT,

? audit_column_opts? BINARY_INTEGER IN DEFAULT);

?

添加審計查看轻姿、修改50部門員工工資:

begin

DBMS_FGA.ADD_POLICY(

? object_schema? => ?? 'hr',

? object_name ?? => ?? 'employees',

? policy_name ?? => ?? 'audit_50_sail',

? audit_condition=> ?? 'department_id=50',

? audit_column ? => ?? 'salary',

? handler_schema => ?? VARCHAR2,

? handler_module => ?? VARCHAR2,

? enable ? ? ? ? => ?? true,

? statement_types=> ?? 'select,update');

end;//注意包參數用=>,無效參數要去掉逻炊,end結尾加分號和/互亮。

?

由數據字典查看dba_fga_audit_trail審計:

>select sql_text from dba_fga_audit_trail;

禁用審計:

DBMS_FGA.ADD_POLICY換為DBMS_FGA.DISABLE_POLICY

啟用審計:

DBMS_FGA.ADD_POLICY換為DBMS_FGA.ENABLE_POLICY

刪除審計:

DBMS_FGA.ADD_POLICY換為DBMS_FGA.DROP_POLICY

?

基于值的審計,可以看出值的變化余素。通過觸發(fā)器記錄信息豹休,信息必需記錄在自定義的表中。

?

sysdba審計溺森。

開啟sysdba審計:

>show parameter audit_sys_operations;

>alter system set audit_sys_operations=true scope=spfile;//此參數不能直接修改慕爬,需要重啟數據庫

>shutdown immediate;

>startup;

?

/*試用以下腳本不記錄----------

scott.emp ? sal? 的變化記錄下來

create table audit_emp_change(name varchar2(10),oldsal number,newsal number,time date);

?

create or replace trigger tr_sal_change

after update of sal ON emp

for each row

declare

v_temp int;

begin

select count(*) into v_temp from audit_emp_change

where name=:old.ename;

if v_temp=0

then

insert into audit_emp_change values(:old.ename,:old.sal,:new.sal,sysdate);

else

update audit_emp_change set oldsal=:old.sal,newsal=:new.sal,time=sysdate

where name=:old.ename;

end if;

end;

/

/*----------

?

sysdba審計記錄位置,再通過查進程號確定哪個文件:

>show parameter audit_file_dest;

?

/*數據庫維護-----------------------------------------------------------------------------------------------------

由于sql語句處理成ExcutionPlans需要消耗系統(tǒng)資源屏积。由優(yōu)化程序統(tǒng)計信息可以獲得較好的執(zhí)行計劃医窿。

?

查詢執(zhí)行計劃:

>set autotrace on;

>select sql_text,?? from v$sql;

由GATHER_DATABASE_STATUS Procedures包控制。

EM中查看統(tǒng)計信息:Server-QueryOptimizer-ManageOptimizerStatistics-GatherOptimizerStatistics炊林。

?

由數據字典查看表的最后收集時間的表行數姥卢,用于優(yōu)化執(zhí)行計劃。

>select num_rows,to_char(last_analyzed,'yyyy-mm-dd hh24:mm:ss') from dba_tables where owner='HR' and table_name='EMPLOYEES';

?

用GATHER_TABLE_STATUS Procedures包手動進行統(tǒng)計信息收集:

DBMS_STATS.GATHER_TABLE_STATS(

ownname=>'hr',

tabname=>'employees',

cascade=>true

第八天

160722第八天OCP筆記

?

性能管理:內存、I/O独榴、應用程序(SQL PL/SQL)僧叉、資源爭用(鎖、閂棺榔、互斥Lock latch mutex)瓶堕、網絡

等待事件 v$event

?

查詢等待事件:

>select distinct wait_class from v$event_name;

>select name from v$event_name;

?

查詢等待事件(阻斷)的SID:

>select sid from v$lock block=1;

?

等待事件相關的動態(tài)性能視圖:系統(tǒng)v$sysstat v$system_event 會話v$sesstat v$session_event 特定服務v$service_stats v$service_event。從asktom.orale.com網站上找腳本症歇。

?

內在優(yōu)化由oracle 11g AMM Automatic Memiry Management自動管理郎笆。只需指定memory_target=內存大小,由MMAN進程通過AWR快照調整內存忘晤,每10分鐘檢測一次宛蚓。

OLPT系統(tǒng)DB80%和OS20%,Oracle通過指導中心的內存指導報告內存设塔。Oracle11g將sga_target設為0凄吏、pga_aggregate_target設為0(自動),只設置memory_target即可闰蛔。

?

OLAP/DSS在線分析系統(tǒng)痕钢,即用作數據倉庫時PGA大些 SGA50%/PGA50%。

?

驗證索引對性能提升:

設置跟蹤:

>set autotrace on;//需要SYSDBA權限

>create table hr.test200 tablespace users as select * from dba_objects;//建表

>create index hr.ind_test200 on hr.test200(object_id);//建索引

執(zhí)行查詢:

>select * from hr.test200 where object_id=1000;

將表移動,將使索引失效:

>alter table hr.test200 move tablespace example;

查索引是否失效:

>select status from dba_indexes where owner='HR' and index_name='IND_TEST200';

解決只需重建索引:

>alter index hr.ind_test200 rebuild;

?

刪除索引:

>drop index hr.ind_test200;

?

/*備份恢復的概念---------------------------------------------------------------------

故障現(xiàn)象:語句失敗序六、用戶進程失敗盖喷、網絡故障、用戶錯誤难咕、實例故障课梳、介質故障。只有介質故障通過"備份和恢復"余佃。

復用文件一般3個暮刃,太多影響性能”粒控制文件椭懊、日志文件、歸檔日志可以復用步势,數據文件不復用氧猬。全數據庫、數據文件坏瘩、歸檔日志盅抚、控制文件、參數文件可以備份倔矾。

?

復用控制文件:

>select name from v$controlfile;//查看現(xiàn)有控制文件

>asmcmd拷貝控制文件(注意需要關閉文件進行控制文件拷貝妄均,否則容易出現(xiàn)數據庫版本不一致)

>alter system set control_files='控制文件1','控制文件2','控制文件3' scope=spfile;//注意ASM存儲中.后面的文件名不填柱锹。control_files只能改參數文件

注意:控制文件掛多個只是方便查詢復用的位置,而只有一個生效丰包。

>重啟數據庫

?

ASM中拷貝文件:

$su - grid

$asmcmd

>cd;ls進目錄

>cp 被拷文件 拷貝到

ASM常用命令:cd ..進入根目錄禁熏,lsdg列出磁盤組,lsdsk列出磁盤邑彪。

?

復用日志文件:

>col member for a50;

>select group#,member from v$logfile;

>alter database add logfile member '+DG' to group 1;//文件系統(tǒng)填路徑

>alter database add logfile member '+DG' to group 2;

>alter database add logfile member '+DG' to group 3;

切進日志直到消除invalid狀態(tài):

>alter system switch logfile;

>select group#,member,status from v$logfile;

?

復用歸檔日志(歸檔日志是組內鏡像瞧毙,組間同步)。

設置歸檔路徑:

$mkdir -p /u01/arch01;

$mkdir -p /u01/arch02;

>alter system set log_archive_dest_1='location=/u01/arch01';//ASM為'location=+FRA'

查看歸檔路徑:

>show parameter log_archive_dest;//顯示歸檔路徑

>show parameter db_recovery_file_dest;//默認歸檔路徑

>關數據庫寄症,再啟到mount模式startup mount

開啟歸檔:

>alter database archivelog;

#ps -ef|grep ora_arc;//查看進程

檢查歸檔開啟:

>desc v$database;//找到log_mode

>select log_mode from v$database;

?

備份工具RecoveryManager可用于在線備份升筏。

數據庫必需先歸檔后備份,歸檔過程為:建目錄瘸爽,設置歸檔路徑(檢查設置),在數據庫掛載狀態(tài)開啟歸檔(檢查進程)铅忿,切換以使用歸檔剪决。

先刪除表空間方便實驗:

>drop tablespace 表空間名;

>drop datafile 文件名

$su - oracle

$rman target /

備份全數據庫:

>backup database;

備份表空間:

>col tablespace_name for a30;

>select tablespace_name,file_name,file_id from dba_data_files;

>backup tablespace users,example;

備份數據文件:

>backup datafile 4,5 format '/u01/backup/f4_5.bak';

備份控制文件:

>backup current controlfile;

備份參數文件:

backup spfile;

備份歸檔日志

backup archivelog all;

查文檔:backup & recovery;backup & recovery user guides

?

控制文件壞了只能啟動到實例檀训。

查控制文件目錄:

>select name from v$controlfile;

$關閉數據庫柑潦,刪除控制文件,再啟動數據庫;ASM存儲需要先關閉數據庫才能刪除控制文件

運行一條語句峻凫,再查日志找到控制文件的報告:

$tail -20 $ORACLE_BASE/diag/rdbms/orcl/orcl/trace/alert_orcl.log;

設置control_files修復:

>alter system set control_files=沒壞的文件;

也可以拷貝修復:

$關閉數據庫渗鬼,拷貝控制文件,再重啟數據庫荧琼。

注意:ASM會刪除空目錄譬胎,是OMF的特征。建目錄mkdir +FRA/orcl/controlfile/命锄。

?

日志文件損壞修復堰乔。日志文件只添加無需拷貝。

先切換日志以啟用日志:

>alter system switch logfile;//切換日志去掉INVALIDATE

>select group#,member,status from v$logfile;

>刪除部分日志文件模擬損壞,ASM需要關閉數據庫才能刪除文件脐恩,查看預警日志文件镐侯。

$tail -20 $ORACLE_BASE/diag/rdbms//orcl/orcl/trace/alert_orcl.log;

通過刪除損壞的日志組成員來修復:

>alter database drop logfile member '日志文件路徑';

若無法刪除,說明為當前日志組成員驶冒,使用alter system switch logfile;切換掉苟翻。

重加日志組成員,還原復用結構:

>alter database add logfile member '日志文件路徑' to group 組號;

?

臨時文件損壞骗污。臨時文件用于存放臨時表和磁盤排序崇猫。

查臨時文件位置:

>select name from v$tempfile;

查臨時表空間名:

>select tablespace_name from dba_tablespaces where contents='TEMPORARY';

刪除臨時文件模擬損壞:ASM刪除文件需要關閉數據庫

添加臨時文件:

>alter tablespace temp add tempfile '$ORACLE_BASE/oradata/orcl/tmp02.db' size 20M autoextend on next 20M maxsize 10G;//注意不要漏掉容量

刪除損壞文件:

>alter tablespace temp drop tempfile '$ORACLE_BASE/oradata/orcl/tmp01.db';

若在關閉期間損壞臨時表空間文件,則數據庫自動重建需忿。

?

口令文件的損壞玄糟,口令損壞將導致遠程登錄無法使用。

刪除口令文件:

$rm $ORACLE_HOME/dbs/orapworcl;

重建口令文件:

$orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle;

?

數據文件損壞(非關鍵數據USERS)腕铸。

>alter system flush buffer_cache;

>select tablespace_name,file_name,file_id from dba_data_files;

查看備份文件:

$rman

RMAN>list backup;

損壞文件離線:

RMAN>sql 'alter database datafile 4,5 offline';

還原文件:

RMAN>restore datafile 4,5;

恢復文件(跑日志):

RMAN>recover datafile 4,5;

文件上線:

RMAN>sql 'alter database datafile 4,5 online';

?

?

數據文件損壞(關鍵數據SYSTEM/SYSAUX)嫌拣,需要關閉數據庫進行恢復。

RMAN>run{

startup mount;

restore datafile 1,2,3,4,5;

recover datafile 1,2,3,4,5;

alter database open;

}

?

5劲适、丟失所有日志組成員(上節(jié)課講過丟失部分日志組成員)

INACTIVE非當前(已寫回磁盤的日志,做日志恢復操作無需該組操作) ACTIVE非當前(此組日志對應的數據沒有完全被刷新回磁盤,做數據庫恢復需要該組中的日志信息) CURRENT(當前正在被使用的日志組)

先查看日志組成員:

>select group#,sequence#,status from v$log;

切換日志:

>alter system switch archivelog;

執(zhí)行檢查點景鼠,將所有日志對應的數據寫回磁盤:(全部成為INACTIVE)

>alter system checkpoint;

破壞:刪除INACTIVE的日志文件:

INACTIVE日志修復,不丟失數據痹扇,修復方法為:

>alter database clear logfile group 2;

第九天

160723第九天OCP筆記

?

參數文件的損壞铛漓。參數文件損壞將無法啟動和寫參數,已運行數據庫可以使用鲫构。

指定文件備份路徑:

>backup spfile format '/u01/sp.bak';

>list backup;

破壞參數文件:

$rm $ORACLE_HOME/dbs/spfileorcl.ora;//ASM的控制文件在+DATA/orcl/spfileorcl.ora

關閉數據庫:

>shutdown immediate;

RMAN的數據庫服務器至少到開啟至實例狀態(tài)浓恶,而缺少參數文件將無法啟動至實例狀態(tài)。解決辦法是用RMAN內置實例啟動數據庫:

RMAN>start nomount;

用RMAN修復:

RMAN>restore spfile from 'u01/sp.bak';

RMAN中重啟數據庫:

RMAN>startup force;同startup abort+startup;

常見問題:若出現(xiàn)NO LOGON结笨,是由于關閉時間過長包晰,可以結束進程強制關閉數據庫。

?

RMAN的設置炕吸。

查看所有的配置項:

RMAN>show all;

修改參數:

RMAN>參數;

刪除備份:

RMAN>delete backup;不能在ASM中刪除否則將不能同步日志伐憾,RMAN會誤認為備份存在

備份參數有:控制文件自動備份、備份冗余赫模、優(yōu)化树肃、加密、類型瀑罗。

?

RMAN中只用分號查詢命令幫助胸嘴。查文檔

configure control file auto backup啟用控制文件自動備份。

configure retention policy to redundency 1備份冗余量斩祭,1為保留最近一次冗余量筛谚,2為保留最近兩次冗余量。

configure retention policy to recovery window of 7 days備份保留天數停忿。

cofigure backup optimization on備份優(yōu)化以節(jié)約磁盤(恢復時間更長)驾讲,一般不開。

configure encryption for database off開啟加密席赂。

configure encryption algorithm 'AES128'開啟加密算法吮铭。

configure device type disk paralielism 1 backup type to backset備份類型:backup set備份集即空塊不備份、image copy拷貝即和原始文件一樣颅停。

>backup database;

>backup as backupset database;

>backup as compressed backupset database;

>backup as copy database;

?

完全備份backup database谓晌,增量備份backup incremantal level 0 database。增量備份從0級開始癞揉。累積增量備份backup incremental level 1 cumulative database;

>delete backup;

>delete copy;

?

恢復控制文件數據庫纸肉。

非本機登錄RMAN:

$rman target sys/oracle@orcl;

備份共備份了:備份數據和備份原數據溺欧。備份原數據在控制文件當中。

?

通常建立目錄數據庫建立備份元數據-catalog database柏肪。丟失全部控制文件時就需要用catlog姐刁。

建立catlog過程:建庫、建表空間烦味、建用戶聂使、授權、創(chuàng)建catlog谬俄、注冊catlog柏靶、同步catlog。

#xhost +

#su - oracle

$export $ORACLE_SID=catdb;

$dbca;不需要EM溃论、不用自動管理屎蜓、存儲用文件系統(tǒng)、字符集AL32UTF8钥勋。(建庫dbca時會自動在tnsnames.ora建立網絡服務名)

>show parameter db_name;

建表空間用于存放元數據:

>create tablespace cats datafile '$ORACLE_BASE/oradata/catdb/cats.dbf' size 20M autoextend on;

建一個帳戶用于管理元數據:

>create user catu identified by "catu" default tablespace cats temporary tablespace temp quota unlimited on cats;

授權:

>grant connect,resource,recovery_catalog_owner to catu;

創(chuàng)建catlog:

$rman target / catalog catu/catu@catdb

$rman target sys/oracle@orcl catalog catu/catu@catdb;//命令含義同上條

RMAN>create catalog;

注冊catlog:

RMAN>register database;(否則將出現(xiàn)target database not found錯誤)

rman target /的備份同步到catlog:

>resync catalog;

修改之前的筆記炬转,在grid帳戶下配監(jiān)聽。

?

數據庫的不完全恢復:主動/被動笔诵。

1、基于時間點的數據庫不完全恢復姑子。例如對DDL語句的恢復乎婿。

查看備份:>report need backup;//查看現(xiàn)有備份

$export NLS_LANG=american_america

$export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'

$rman target /

RMAN>run {

startup force mount;//恢復需要在mount模式下進行

set util time='2016-07-20 01:36:00';

restore database;

recover database;

alter database open resetlogs;//數據庫恢復之后必需以重置日志的方式打開一次

}

?

查看日志序號:

>archive log list;

刪除之前日志:

>delete noprompt backup;

>delete noprompt copy;

進行第一次增量備份

>backup incremental level 0 database;

設置:

>sql 'alter system archive log current';

同步catalog:

>resync catalog;

?

?

2、使用SCN號進行數據恢復:

查SCN號:

>select current_scn from v$database;

恢復:

RMAN>run {

startup force mount;//恢復需要在mount模式下進行

set util scn=填SCN號;

restore database;

recover database;

alter database open resetlogs;//數據庫恢復之后必需以重置日志的方式打開一次

}

?

3街佑、基于SEQUENCE日志序號的數據恢復谢翎。

日志歸檔要復用,且放在不同磁盤上:

備份:

>delete noprompt backup;

>delete noprompt copy;

>archive log list;

>backup incremental level 0 database;

>sql 'alter system archive log current';

>resync catalog;

查日志的序號:

>desc v$log;

>select group#,sequence#,status from v$log;//序號為current為當前沐旨,

先進行表的添行DML語句森逮,再切日志以增加日志序號:

>alter system switch logfile;

恢復:

RMAN>run {

startup force mount;

set util sequence=6;//恢復到第5組日志

restore database;

recover database;

alter database open resetlogs;

}

?

4、所有控制文件損壞:

備份:

>delete noprompt backup;

>delete noprompt copy;

>archive log list;

>backup incremental level 0 database;

>sql 'alter system archive log current';磁携?褒侧?含義

>resync catalog;

查看目前控制文件:

>select name from v$controlfile;

>shutdown abort;

>刪除控制文件

啟動到nomount并用RMAN進行恢復:

>startup nomount;

RMAN>configure control file auto backup;

RMAN>restore controlfile from autobackup;

RMAN>alter database mount;

RMAN>recover database;//文件不同步,仍要進行recover

RMAN>alter database open resetlogs;

再進行數據庫備份:

?

5谊迄、

>select group#,sequence#,status from v$log;

>create table test100(id int);

>insert into test100 values(1);

>commit;

>alter system switch logfile;

>insert into test100 values(2);

>commit;

>alter system switch logfile;

>select group#,sequence#,status from v$log;

?

rman target / catalog catu/catu@catdb

startup mount;

restore database;

recover database until cancel;參數AUTO

recover database until cancel;參數CANCEL

alter database open resetlogs;

第十天

160724第十天OCP筆記

?

備份腳本:

run{

>delete noprompt backup;

>delete noprompt copy;

>archive log list;

>backup incremental level 0 database;

>sql 'alter system archive log current';

>resync catalog;

}

?

?

&災難恢復闷供。災難恢復不含跟蹤文件、預警文件统诺、口令文件歪脏。

?

日常維護--

RMAN中啟用控制文件自動備份configure control file auto backup

建立catalog

?

檢查備份--

$rman target / catalog catu/catu@catdb

RMAN>list backup;

檢查備份內容是否好:

RMAN>crosscheck backup;

?

破壞--

用聯(lián)合查詢查出控制文件、數據文件粮呢、日志文件:

>select name from v$datafile union select name from v$tempfile union select name from v$controlfile union select member from v$logfile;

>關閉數據庫

asmcmd>刪除以上文件

查參數文件并刪除:

asmcmd>rm +DATA/orcl/spfileorcl.ora

查口令文件并刪除:

$rm $ORACLE_BASE/dbs/orapworcl;

?

恢復--

恢復順序:參數文件婿失、控制文件钞艇、數據日志文件、口令文件豪硅。

文件損壞只參啟到實例:

RMAN>startup nomount;//注意文件未損壞哩照,要刪除。否則會調用錯誤的參數文件而無法恢復

恢復參數文件:

RMAN>restore spfile from autobackup;//默認備份目錄+FRA/ORCL/AUTOBACKUP/以日期命名的目錄/舟误。若無法恢復則用完全路徑

RMAN>shutdown immediate;

RMAN>startup nomount;

恢復控制文件后可以掛載啟動:

RMAN>restore? controlfile from autobackup;

RMAN>shutdown immediate;

RMAN>startup mount;

恢復數據文件:

RMAN>restore database;

SQL>recover database until cancel using backup controlfile;//葡秒。注意恢復日志文件的跑日志要在SQLPlus中,填參數為先AUTO嵌溢、后CANCEL眯牧。???

恢復日志和臨時文件:

SQL>alter database open resetlogs;//也可以在RMAN中執(zhí)行

創(chuàng)建口令文件:

$orapwd file=%ORACLE_HOME/dbs/orapworcl password=oracle;

刪除備份并重新備份:

?

&災難恢復需要換設備,不能恢復到原始設備上的問題處理赖草。

建目錄:

$mkdir -p /u01/app/oracle/oradata/bak/;

查文件位置:

>select name from v$datafile;

確認備份:

RMAN>list backup;

恢復腳本:(添加了set newname,switch datafile)

run{

sql 'alter database datafile 4,5 offline';

startup mount;

set newname for datafile 4 to '/u01/app/oracle/oradata/bak/users01.dbf';//項ASM磁盤組則換為'+DG'学少,DG為換上的新磁盤組。

set newname for datafile 5 to '/u01/app/oracle/oradata/bak/examples01.dbf';

restore datafile 4,5;

switch datafile 4;

switch datafile 5;

recover datafile 4,5;

sql 'alter database datafile 4,5 online';

}

?

&ASM的遷移秧骑。

?

創(chuàng)建一個非ASM的表空間--

$mkdir -p $ORACLE_BASE/oradata/orcl/

>create tablespace tbs10 datafile '/u01/app/oracle/oradata/orcl/tbs10.dbf' size 20M autoextend on;

>create table sys.test10 tablespace tbs10 as select * from dba_objects;

>select name,file# from v$datafile;

?

將非ASM表空間遷移到ASM--

查看未備份項:

RMAN>report need backup;

拷貝備份到指定磁盤組:

RMAN>backup as copy datafile 6 format '+DATA';

RMAN>sql 'alter database datafile 6 offline';

切換文件名:

RMAN>switch datafile 6 to copy;//遷移地址可以簡寫為copy

由于操作延遲版确,將文件前滾一點:

RMAN>recover datafile 6;

RMAN>sql 'alter database datafile 6 online';

?

&Blobk塊的損壞。

開啟校驗

物理校驗db_block_checksum=TYPICAL 耗CPU2~3%

邏輯校驗db_block_checking=MEDIUM 耗CPU1-10%

物理校驗在塊頭寫入校驗信息乎折,邏輯校驗校驗段頭塊和段之間的關系绒疗。校驗只能預防壞塊。

文檔

?

創(chuàng)建表空間tbs20并加表test20--

查看表的塊信息:

>select header_file,header_block,blocks from dba_segments where segment_name='TEST20' and owner='HR';

?

備份--

RMAN>report need backup;

RMAN>backup datafile 7;//7是新建的表空間對應文件

?

破壞塊--

#dd dd of=/u01/app/oracle/oradata/orcl/tbs20.dbf bs=8192 conv=notrunc seek=200<

>任意填覆蓋信息

>EOF;//結束

?

制造查詢出錯骂澄,報錯為第一個壞塊--

>alter system flush buffer_cache;

>exit;

$sqlplus hr/hr

>select count(*) from sys.test20;

?

修復壞塊--

#su - oracle

找到所有壞塊:

$dbv file=$ORACLE_BASE/oradata/orcl/tbs20.dbf blocksize=8192;

用RMAN修復壞塊:

RMAN>recover datafile 7 block 壞塊序號用逗號隔開;

?

附dd命令:

將指定的文件寫入到指定的輸出文件:

#dd if=boot.bin of=orange.img bs=512 count=1 conv=notrunc;

?

&Oracle11g新特性DRA Database Recovery Advisor數據恢復顧問

使用DRA用來修復壞塊--

發(fā)現(xiàn)錯誤:

RMAN>list failure detail;

修復建議:

RMAN>advice failure 錯誤號;

修復錯誤:

RMAN>repair failure;

?

&閃回技術

閃回刪除 ? ? ? ? ?? 回收站

閃回查詢 ? ? ? ? ?? UNDO表空間

閃回事務 ? ? ? ? ?? redo log

閃回數據庫 ? ? ? ?? 數據庫的閃回日志

Tocal Recall ? ? ?? 閃回歸檔

?

1吓蘑、閃回刪除

drop table并沒有刪除而是放到回收站。每個表空間有獨立的回收站坟冲,除了SYSTEM表空間磨镶。

?

開啟回收站:

>show parameter recyclebin

>alter system set recyclebin on;

?

實驗--

>create table hr.t1 tablespace system as select * from dba_objects where rownum<10001;

>create table hr.t2 tablespace system as select * from dba_objects where rownum<10001;

>c/2/3;把2換成3再創(chuàng)建張表

>create index hr.idx_t1 on hr.t1(object_id) tablespace system;

>create index hr.idx_t2 on hr.t1(object_id) tablespace system;

>create index hr.idx_t3 on hr.t1(object_id) tablespace system;

>drop table hr.t1;//刪除表會自動刪除索引

>drop table hr.t2;

>drop index hr.inx_t3;

>drop table hr.t3;

顯示回收站內容:

>show recyclebin;

加收站中的名稱較長,用數據字典查其原名user_recyclebin或dba_recycle_bin:

>select object_name,original_name,type from user_recyclebin;

回收站中的數據可以查詢SELECT健提,而不可以DML/DDL操作琳猫。表的刪除其索引也被附帶刪除。

閃回:

>flashback table t2 to before drop;(閃回表的相關索引同時閃回)

若回收站中有重名私痹,需使用回收站中的名稱脐嫂,需用雙引號界定,并重命名:

>flashback table "回收站中的名稱" to before drop rename to t2_other;

?

以下兩種情況表刪除不經過回收站:drop table t1 purge;、表經過virtual personal database(VPD)加密紊遵。

當有空間壓力時雹锣,回收站中的內容會自動清空。自動擴展的表空間有空間壓力也要先清空回收站癞蚕。

>purge table t2;

>purge index t1_idx;

清空回收站:

>purge user_recycle_bin;purge dba_recycle_bin;

>purge tablespace users USER hr;

?

2蕊爵、閃回查詢

undo_tablespace=undotbs1;

undo_management=auto;

undo_retention=900;

用于已提交DML的閃回查詢。

?

>select salary from employees where employee_id=196;

>update employees set salary=13100 where employee_id=196;

>commit;

閃回查詢:

>select salary from employees as of timestamp(to_timestamp('2016-07-20 01:00:00','YYYY-MM-DD HH24:MI:SS')) where employee_id=196;

用子查詢查閃回值:

>update employees set salary=(select salary from employees as of timestamp(to_timestamp('2016-07-20 01:00:00','YYYY-MM-DD HH24:MI:SS')) where employee_id=196)? where employee_id=196;

?

將表閃回到過去的時間點:

>alter table employees row movement;//開啟行遷移功能

>flashback table employees to timestamp(to_timestamp('2016-07-20 01:00:00','YYYY-MM-DD HH24:MI:SS'));

?

通過偽列(versions_starttime versions_endtime)看列具體的時間:

>select salary,versions_starttime,versions_endtime from employees versions BETWEEN to_timestamp('2016-07-20 01:00:00','YYYY-MM-DD HH24:MI:SS') AND to_timestamp('2016-07-20 02:00:00','YYYY-MM-DD HH24:MI:SS')? where employee_id=196;

?

3桦山、閃回事務 Redo Log

開啟補充日志:

>alter database add supplemental log data;

>alter database add supplemental log data(primary key) columns;//需要SYSDBA權限

DML:

>update hr.employees set salary=8100 where employees_id=196;

查看閃回事務:

>select undo_sql from flashback_saction_query where table_name='EMPLOYEES' and TABLE_OWNER='HR';//需要SYSDBA權限

>update "HR" ."EMPLOYEES" set "SALARY"='6100' where rowid='閃回事務的rowid';

?

4攒射、閃回數據庫--數據庫閃回日志

?

前提要先啟用歸檔模式

>shutdown immediate;

>startup mount;

啟用數據庫閃回功能:

>alter database flash on;

檢查已開啟閃回功能:

>select flashback_on from v$database;

#ps -ef|grep ora_rvwr

查看閃回日志位置:

>show parameter db_recover_file_dest;

設置閃回日志保留時間:

>alter system set db_flashback_retention_target;

?

誤操作truncate table的解決:

RMAN>startup force mount;

RMAN>flahsback database to time="to_date('2016-07-20 11:57:00','YYYY-MM-DD HH24:MI:SS')";//注意time時間賦值加引號

RMAN>alter database open resetlogs;

?

RMAN>flahsback database to SCN=值;

RMAN>flahsback database to SEQUENCE=值;

?

用還原點還原--

>create restore point aaa;

>truncate table hr.t2;

>starup force mount;

>flashback database to restore point aaa;

>alter database open resetlogs;

?

閃回的限制:

1醋旦、控制文件重新建立過或者還原過:

2、刪除過表空間会放;

3饲齐、收縮過數據文件;

這些情況只能數據庫的不完全恢復來解決咧最。

?

5捂人、閃回歸檔Total Recal,用于閃回查詢的UNDO表空間限制undo_retention

?

>create tablespace recall datafile '+DATA' size 20M autoextend on;

>create flashback archive default flash_recall tablespace recall retention 10 year;

>alter table hr.employees flashback archive flash_recall; select salary from employees as of timestamp(to_timestamp('2016-07-20 10:44:29','yyyy-mm-dd hh24:mi:ss'));

第十一天

160727第十一天OCP筆記

?

移動數據(Oracle的IO)--

非Oracle數據移到Oracle數據 ?? 用裝載SQL Loader

Oracle數據移到Oracle數據 ? ?? 用導入導出DataDump

外部表技術:將數據旋轉在數據庫外部矢沿,通過數據庫訪問外部數據滥搭。分為非Oracle數據外部表,和Oracle數據外部表捣鲸。

官方文檔

?

//****************************************************************************************************

&SQL Loader使用--

TXT/EXCEL/SQL Server/瑟匆。。

?

編緝數據文件:

$vim f1.dat

101,M,zhao

102,M,qian

103,F,sun

?

編緝控制文件(導入語法):載入文件栽惶、文件導入的表符列愁溜。

$vim f1.ctl

load data infile 'f1.dat'

insert into table students WHEN (5)=M fields terminated by ','

TAILING NULLCOLS

(stu_id,stu_sex,stu_name)

其中fields指字段。每行就是數據庫行的分隔符外厂,不用指定冕象。

INSERT|APPEND|TRUNCATE關鍵字,INSERT只能向空表加入汁蝶、APPEND追加渐扮、TRUNCATE先清空后添加。

WHEN (5)=M第五個字符為M的行放棄數據穿仪,第一個字符為1席爽。未裝載數據分為放棄數據和拒絕數據意荤。

?

建表:

>create table students (stu_id number(3),stu_sex char(1),stu_name varchar2(10))

裝載:

$sqlldr hr/hr control=f1.ctl;//需要指定向哪個用戶裝載數據

$sqlldr hr/hr control=f1.ctl log=f1.log bad=f1.bad;//功能同上條語句

產生f1.log存導入記錄啊片,f1.bad存未導入的記錄。

?

對表添加約束(功能同放棄數據):

>alter table students add constraint ck_name CHECK(stu_id not in('qian'));

?

&裝軟件包使SQLPlus能夠翻命令:解包玖像、配置紫谷、編譯、安裝捐寥、加別名

#tar zxf rlwrap-0.36.tar.gz

#./configure

#make

#make install

#echo "alias sqlplus='rlwrap sqlplus'">>/home/oracle/.bashrc;//兩個劍頭指追加

#echo "alias rman='rlwrap rman'">>/home/oracle/.bashrc

查命令歷史:#history

//****************************************************************************************************

&DataPump使用--

命令 expdp和impdp

數據包dbms_datapump

?

創(chuàng)建目錄對象:

>create directory dump as '/u01/app/oracle/dump/';//目錄由oracle帳戶創(chuàng)建笤昨,命令需要SYSDBA權限

>grant read,write on directory dump to hr,system,scott,sh;

?

導出表:

$expdp hr/hr directory=dump dumpfile=employees.dmp tables=employees,departments;

導出schema的所有表:

$expdp hr/hr directory=dump dumpfile=employees.dmp schema=hr;

導出tablespace:

$expdp \'sys/oracle as sysdba\' directory=dump dumpfile=employees.dmp tablespaces=users,examples;//需要SYSDBA權限

導出db:

$expdp \'sys/oracle as sysdba\' directory=dump dumpfile=employees.dmp full=y;

?

參數文件1,含directory握恳、dumpfile參數:

$vim 02.par

directory=dump

dumpfile=hr02.dmp

schemas=hr

exclude=table:"in ('jobs','locations')"

?

參數文件2瞒窒,導出部分表:

$expdp scott/tiger directory=dump dumpfile=scott.emp parfile=/tmp/01.par

$vim 01.par;//用參數文件

schemas=scott

include=table

include=package

include=view:"LIKE 'V0%'"

?

參數文件3,只導出查詢結果:

schemas=hr

tables=employees

query=employees:"where salary>15000"

?

參數文件4乡洼,導出表的采樣:

tables=employees

sample=40

?

參數文件5崇裁,導出元數據或只導出數據:

tables=employees

content=metadata_only|data_only|all

?

導入表:

>create table emp01 as select * from employees;//建表

$expdp hr/hr directory=dump dumpfile=emp01.dmp tables=emp01;//導出表

>drop table emp01;//刪除表

$impdp hr/hr directory=dump dumpfile=emp01.dmp tables=emp01;//導入表

>select * from emp01;//查詢是否導入

?

只導入數據而不導入元數據:

$impdp hr/hr directory=dump dumpfile=emp01.dmp tables=emp01 content=data_only;

追加|清空方式導入:

$impdp hr/hr directory=dump dumpfile=emp01.dmp tables=emp01 table_exists_action=append|truncate;//導入表

將表映射導入到其它帳戶:

$expdp scott/tiger directory=dump dumpfile=emp01.dmp tables=hr.emp01 schemas_map=hr:scott;

$impdp scott/tiger directory=dump dumpfile=emp01.dmp tables=hr.emp01 schemas_map=hr:scott remap_tablespace=example:users;//如果映射到的帳戶沒有表空間匕坯,則創(chuàng)建

?

//****************************************************************************************************

&數據放在Oracle外,外部表只能查不能改--

非Oracle到Oracle 裝載數據驅動 ORACLE LOADER Access Driver

?

create table students_e (stu_id number(3),stu_sex char(1),stu_name varchar2(10))

organization external

(type oracle_loader

default directory dump

access parameters (records delimited by newline fields terminated by ',' missing fields values are null)

location ('f1.dat'));

外部只能查詢拔稳,不能做索引葛峻,也不能DML操作。由于外部表的性能較低巴比,只用于偶爾的查詢术奖。

?

&Oracle到Oracle的訪問,即直接訪問其它數據庫而不用導入數據--

數據泵驅動 ORACLE DATAPUMP Access Driver

方法共3步轻绞。

?

從orcl導出hr.employees--

CREATE TABLE students_e (stu_id,stu_sex,stu_name)

organization external

(type oracle_loader

default directory dump

location ('employees.dmp'))

AS SELECT employee_id,last_name,salary FROM employees where salary>10000

?

copy到目標數據庫所有機器--

接收的catdb數據庫也需要創(chuàng)建目錄對象和授權:

本地或網絡拷貝到目標機器的目錄對象:

?

在目標catdb建外部表采记,讀取該文件:

CREATE TABLE students_e (stu_id number,stu_sex char(1),stu_name varchar2(10))

organization external

(type oracle_loader

default directory dump

location ('employees.dmp'))

?

//****************************************************************************************************

內存管理

6大池除了log_buffer均為自動設置。

6大池之外的保留緩沖池db_keep_cache_size铲球、循還緩沖池db_recycle_cache_size挺庞、nK緩沖區(qū)調整緩存db_nK_cache_size基中n為2、4稼病、8选侨、16、32然走。

塊大小db_block_size援制,根據行大小設置塊大小,1塊中保存多行芍瑞。

?

保留緩沖池重用機率很高晨仑,循還緩沖池重用機率很低。

高重用的表緩沖到保留緩沖池:

>alter table hr.employees storage (buffer_pool recycle);

轉存到默認緩沖池:

>alter table hr.employees storage (buffer_pool default);

?

>alter system set db_16k_cache_size=16M;

>create tablespace tbs16 datafile '+DATA' size 20M autoextend on blocksize 16k;

表空間塊大小一般與buffer_cache塊大小一致拆檬,不同則先轉到db_nK_cache_size緩沖洪己,再轉到buffer_cache。表空間的行盡量放在不同塊中竟贯,目的是提高并發(fā)量答捕。

db_nK_cache_size設置小,全表掃描慢而并發(fā)訪問變塊屑那。

?

查看各池容量:

>select component,current_size from v$sga_dynamic_components;

sga_target

pga_aggregate_target

memory_target

memory_max_target

?

共享池分為:library cache拱镐、row cache、result cache結果緩存(存儲已查詢結果持际,一般不開啟沃琅,需配合參數文件開啟)、

若做成共享服務器蜘欲,則原本在PGA中的UGA(用戶全局區(qū))會移動到SGA的大型池中益眉。

?

>select name,value from v$sysstat where name='physical reads';//查物理讀

>select name,value from v$sysstat where name='consistent gets';//查一致性讀

>select name,value from v$sysstat where name='db block gets';//查當前讀

命中率:1-物理讀/(一致性讀+當前讀),命中率高而性能未必高姥份。

?

AWR report查看命中率報告:

Performance-AWR Baselines

第十二天

160728第十二天OCP筆記

?

醫(yī)院建立信息數據庫郭脂,收集健康設備的信息空繁。

?

OLPT系統(tǒng)調優(yōu)的首要原則就是綁定變量。

使用綁定變量避免硬解析:

var v1 number

exec :v1:=196

select salary from employees where employee_id=:v1;

PL/SQL的變量朱庆、賦值號加冒號盛泡。

?

讓Oracle自動替換成綁定變量:

>alter system set cursor_sharing=force;//force的引號可加可不加

?

查詢執(zhí)行次數、解析次數:

>select executions,parse_calls from v$sqlarea where sql_text like '語句';//需要SYSDBA權限娱颊,也可以用表v$sql

?

SEQUENCE對于單實例數據庫cache 100傲诵。多實例RAC數據庫cache 5000。

pin住PL/SQL對象

?

自動共享內存管理箱硕。MMIN收集工作量為信息基礎拴竹,MMAN調整內存。白天為OLPT在線查詢系統(tǒng)剧罩,晚上為OLAP在線分析系統(tǒng)栓拜。

由AMF實現(xiàn),配合spfile實現(xiàn)惠昔。早期版本的Oracle用init初始化參數幕与,缺點是參數不能被系統(tǒng)修改。

?

性能優(yōu)化方法:

規(guī)劃:投資镇防、系統(tǒng)(可擴展性Linux最強)...

SQL優(yōu)化(應用優(yōu)化) 對應課程SQL turning 調整:SQL PL/SQL

性能優(yōu)化(實例優(yōu)化)對應課程Performance Turning 調整:內存啦鸣、I/O、網絡来氧、資源如lock

?

v$sys_time_model系統(tǒng)時間模型 v$sess_time_model會話時間模型诫给。用于查詢數據庫啟動、SQL解析啦扬、SQL執(zhí)行中狂、SQL編譯等時間的消耗。

?

生成AWR報告:

@?/rdbms/admin/awrrpt.sql

報告保存在/home/oracle/

?

用EM查看資源的會話消耗:

EM-Performance-TopCustomers-TopSessions

?

/****************************************************************************************************

扑毡?胃榕??

SQL優(yōu)化指導 STA sql tuning advisor

? ? ? ? ?? Automatic SQL Tuning Result

SQL訪問指導 SAA sql access advisor

SQL性能分析 SPA sql performance analyzer 位置:EM-Server-AdvisorCentral-sql performance analyzer

自動化任務 EM-Server-Automatic-AutomaticSqlTuning

EM-Server-AdvisorCentral-

?

優(yōu)化指導:個別語句用Automatic SQL Tuning Result優(yōu)化僚楞、使用SQL Profile直接修改執(zhí)行計劃勤晚、收集統(tǒng)計信息枉层、使用索引泉褐、修改SQL語句。后3條都是間接干涉執(zhí)行計劃鸟蜡。

第十三天

160729第十三天OCP筆記

江蘇移動外包:

限制job資源使用:

PLAN--group膜赃??

?

EM-Server-OracleScheduler-Window

CreateWindow-Name:DayWindow-Repeat:by days-duration:12h

CreateWindow-Name:DayWindow-Repeat:by days-duration:12h

>ater system set resource_manager_plan;

?

&管理空間揉忘。

OMF管理數據文件/控制文件的參數:db_create_file_dest=+DATA

日志文件/控制文件:db_create_online_log_dest

?

塊--

塊大小db_block_size跳座。塊大小優(yōu)先由表空間blocksize決定端铛,未指定則由db_block_size決定。

塊預留10%的pct free空間疲眷,僅用于更新數據UPDATE禾蚕。塊的pct free用完就需要行遷移了。

塊空閑空間按剩余空間分類:fs1<25% ,25%

?

空表不占空間狂丝,只是在數據字典中留記錄换淆。

數據錄入是無序的,進行表的整理可以提高全表掃描的性能几颜。

?

行鏈接:行大于塊大小倍试。行遷移:update的新數據大于舊數據且塊pct free用完,將舊塊指向新塊的地址蛋哭。

避免行鏈接的方法:

>alter system set db_16k_cache_size=16M;

>create tablespace tbs16 datafile '+DATA' size 20M autoextend on blocksize 16k;

解決行遷移:

使用段指導發(fā)現(xiàn)行遷移并解決县习。可以添加自動化任務定期解決谆趾。

?

手工處理行遷移--

>create table scott.t1 (id number,name varchar2(2000));

begin

for i in loop 1..1000

insert into scott.t1 values(i,'aa');

end loop;

commit;

end;

/

>update scott.t1 set name=lpad('x',1550,'x') where mod(id,2)=1;//語法lpad(列名,長度,填充符)

查具有行移的表:

>@?/rdbms/admin/utlchain.sql;

>analyze table scott.t1 list chained rows;

拷出來(拷出具有行遷移的行):

>create table t1_chain as select * from scott.t1 where rowid in(select head_rowid from chained_rows);

清空表:

>select count(*) from scott.t1_chain;//查下遷移行數量

>delete scott.t1 where rowid in(select head_rowid from chained_rows);

再拷回去:

>insert into scott.t1 select * from scott.t1_chain;

?

區(qū)的管理--

extent management local

segment space management auto|manual

?

段的延遲創(chuàng)建(創(chuàng)建表時并不分配空間躁愿,插入時創(chuàng)建):

>alter system set deferred_segment_createion=true;

Oracle在安裝時會創(chuàng)建很多永遠不會用到的空表,段延遲創(chuàng)建可以節(jié)約空間和加快安裝速度沪蓬。

段的立刻創(chuàng)建:

>create table t1 segment creation immediate as select * from t2 where 1=2;

按需創(chuàng)建表只適用于非分區(qū)表和索引攘已,不適用于IOT、聚簇表...怜跑,不適用于字典管理的表空間中的表样勃。

?

先創(chuàng)建索引邏輯不使用,以后使用:

>create index t1_idx on t1(id) unusable;

>alter index t1_idx rebuild;

?

表壓縮減少IO多耗CPU性芬,BASIC壓縮方式適用于OLAP/DSS數據倉庫峡眶,F(xiàn)OR OLTP壓縮方式適用于OLTP常規(guī)交易型數據庫。

>create table t1 compress basic|for olpt|nocompress;

?

收縮段的3步:

>alter table t2 enable row movement;

移動行 進行塊的整理:

>alter table t2 shrink space compact;

降低高水位HWM 釋放空間:

alter table t2 shrink space;

如果只執(zhí)行第3步植锉,不執(zhí)行第2步辫樱,則在收縮段期間不能進行DML語句。

收縮段的優(yōu)點是節(jié)約空間俊庇,提高全表掃描性能狮暑。

?

管理可恢復的空間分配--

會話交互(會話遇到空間問題,等待問題解決而非終止):

>alter session enable resumable;

系統(tǒng)級別可以設置會話時間辉饱,超時由系統(tǒng)選擇:

>show parameter resu

>alter system set resumable_timeout=3600;//單位:秒

?

目前磁盤為4K扇區(qū)搬男,Linux內核3.0以上支持4K扇區(qū)磁盤。要求db_block_size要4K~32K彭沼,默認8K缔逛。32以上需要OS支持。

?

查看日志的塊大小:

>select blocksize from v$logfile

建庫時要設置日志組塊大小16K褐奴,提高性能按脚。

?

?

?

移動表空間,對于使用不同指令集的CPU敦冬,需要用RMAN提供的convert命令辅搬。--

過程:表只讀、datadump導出metadata脖旱、轉字節(jié)碼伞辛、拷元數據及數據文件、datadump導入夯缺、表讀寫蚤氏。

建表:

>create tablespace test datafile '+DATA' size 10M;

1、在orcl數據庫將表空間置為read only:

>alter tablespace test read only;

2踊兜、使用datadump提取表空間的metadata為一個文件:

>create directory dump as '/u01/app/oracle/dump/';//目錄由oracle帳戶創(chuàng)建竿滨,命令需要SYSDBA權限

>grant read,write on directory dump to hr,system,scott,sh;

$expdp system/oracle directory=dump dumpfile=test_m.dmp transport_tablespaces=test;

3、(目標與原使用相同的字節(jié)序endian,若不同需要用RMAN轉換:

RMAN>sql 'alter tablespace hr read only convert tablespace hr to platform '操作系統(tǒng)平臺' format '路徑';

4捏境、傳送元數據和數據兩部分文件到catdb:

$cp /u01/dump/tbs2_m.dmp /u01/catdb/dump;

$cp /u01/app/oracle/oradata/orcl/tbs2.dbf /u01/app/oracle/oradata/catdb;

5雪位、使用datapump導入metadata:

$export $ORACLE_SID=catdb

$impdp system/oracle directory=dump dumpfile=test_m.dmp transport_datafiles=/u01/app/oracle/oradata/catdb/tbs2.dbf;//???

6超歌、置表為read write:

>alter tablespace test read write;

?

移動數據庫挟秤。

1瞻讽、備份源庫 orcl數據庫

RMAN>backup database format '/u01/app/oracle/backup/%U';

RMAN>backup archivelog all format '/u01/app/oracle/backup/%U';

?

?

修改參數文件--

>create pfile from spfile;//生成initorcl.ora

initorcl.ora改名initprod.ora

在spfile中添加(數據庫改名):

db_file_name_convert='orcl','prod';

log_file_name_convert='orcl','prod';

創(chuàng)建spfile中相應的目錄:

?

啟動數據庫--

$export $ORACLE_SID=prod;

$sqlplus / as sysdba;

>startup nomount;

?

使用RMAN連接--

$export $ORACLE_SID=prod;

$rman sys/oracle@orcl auxiliary /;//連接輔助數據庫

RMAN>duplicate target database to prod;

恢復數據庫:

run {

sql 'alter database datafile 4,5,6 offline';

set newname for datafile 4 to '/u01/app/oracle/oradata/orcl/users01.dbf';

set newname for datafile 5 to '/u01/app/oracle/oradata/orcl/example01.dbf';

set newname for datafile 6 to '/u01/app/oracle/oradata/orcl/test.dbf';

restore datafile 4,5,6;

switch datafile 4;

switch datafile 5;

switch datafile 6;

recover datafile 4,5,6;

sql 'alter database datafile 4,5,6 online';

}

?

改fstab參數:

>startup nomount

$vi /etc/fstab

tmpfs ? ? ? ? ? ? ? ? ? /dev/shm ? ? ? ? ? ? ?? tmpfs ? defaults,size=4g ? ? ?? 0 0

devpts ? ? ? ? ? ? ? ?? /dev/pts ? ? ? ? ? ? ?? devpts? gid=5,mode=620? 0 0

sysfs ? ? ? ? ? ? ? ? ? /sys ? ? ? ? ? ? ? ? ?? sysfs ? defaults ? ? ?? 0 0

proc ? ? ? ? ? ? ? ? ?? /proc ? ? ? ? ? ? ? ? ? proc ?? defaults ? ? ?? 0 0

/dev/VolGroup00/LogVol01 swap ? ? ? ? ? ? ? ? ?? swap ?? defaults ? ? ?? 0 0

#mount -o remount /dev/shm

?

報名考試:VOE網站注冊OC號,Oracle網站注冊號并綁定筷频,找徐老預約考試蚌成,考試時間和科目。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末凛捏,一起剝皮案震驚了整個濱河市担忧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坯癣,老刑警劉巖瓶盛,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異示罗,居然都是意外死亡惩猫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門蚜点,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轧房,“玉大人,你說我怎么就攤上這事禽额【庀幔” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵脯倒,是天一觀的道長实辑。 經常有香客問我,道長藻丢,這世上最難降的妖魔是什么剪撬? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮悠反,結果婚禮上残黑,老公的妹妹穿的比我還像新娘。我一直安慰自己斋否,他們只是感情好梨水,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著茵臭,像睡著了一般疫诽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旦委,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天奇徒,我揣著相機與錄音,去河邊找鬼缨硝。 笑死摩钙,一個胖子當著我的面吹牛,可吹牛的內容都是我干的查辩。 我是一名探鬼主播胖笛,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宜岛!你這毒婦竟也來了匀钧?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤谬返,失蹤者是張志新(化名)和其女友劉穎之斯,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體遣铝,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡佑刷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了酿炸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘫絮。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖填硕,靈堂內的尸體忽然破棺而出麦萤,到底是詐尸還是另有隱情鹿鳖,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布壮莹,位于F島的核電站翅帜,受9級特大地震影響,放射性物質發(fā)生泄漏命满。R本人自食惡果不足惜涝滴,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胶台。 院中可真熱鬧歼疮,春花似錦、人聲如沸诈唬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铸磅。三九已至骤素,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間愚屁,已是汗流浹背济竹。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留霎槐,地道東北人送浊。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像丘跌,于是被迫代替她去往敵國和親袭景。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345