database
2. instance
3. session
4. process
5. table
6. index
7. transaction (事務)
8. lock
9. cursor
10. awr(auto workload repository)
11. service
12. data guard
13. rac
查詢服務器主機名:
select host_name from v$instance;
查詢服務器IP
select sys_context ('userenv','ip_address') from dual;
建立或配置數據庫:dbca
net manager 調用:netmgr
emca建立數據庫
手動建立數據庫:emca -config dbcontrol db -repos create
1\database:
查看控制文件:
select * from v$controlfile;
查看數據文件:
select * from dba_data_files;
數據文件不包括臨時文件
日誌文件:
select * from v$log;
select * from v$logfile
切換日誌文件:
alter system switch logfile;
參數文件:
(server parameter file)spfile
show parameter spfile
口令文件:password file
select * from v$pwfile_users
重要
2\instance:
oracle 五大進程:
select * from v$process
1.pmon( process monitor)
2.smon(system monitor)
3.dbwr(database write)
4.lgwr(log write)
5.ckpt(checkpoint)
oracle 啓動的幾個狀態:
正常啓動順序:
啓動實例:instance ,讀取系統參數文件
讀取控制文件
打開數據庫
nomount -- mount-- open
startup open
startup force (強制重啓,模仿停電試驗)
shutdown == shutdown normal
shutdown immediate
shutdown abort(停電相似)==startup force
shutdown transactional
建立表空間:
關於sys用戶參數:
show parameter O7
裏面有一個屬性爲false 若是更改成true就能夠不須要as sysdba 鏈接。
os認證:
關於登陸的"/ ",操做系統認證,省缺狀態下只能夠在數據服服務器生效。
一、windows屏蔽操做系統認證:去掉ora_dba組裏的相對應用戶
便可。
二、更改E:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora下的文件
關於服務命名與監聽:
show parameter service_name
C:\>tnsping orcl 解釋服務命名
更改數據文件大小:
SQL> alter database datafile 9 resize 100m;
ntfs 最大的數據文件大小爲32GB
更改數據文件大小自動擴展:
SQL>alter database datafile 9 autoextend on next 5m;每次增長5m
表空間能夠有多個數據文件:
SQL> alter tablespace ming_tbs add datafile 'E:\ORACLE\ORADATA\MING_TBS2.DBF' si
ze 2048m;
表空間脫機:
alter tablespace test2 offline;
alter tablespace test2 onine;
表空間只讀:
alter tablespace test2 read only
更改成online
alter tablespace ming_tbs read write
刪除表空間:
drop tablespace test;
刪除表空間的同時刪除表的內容與數據文件
drop tablespace test including contents and datafile;
表空間重命名:
alter tablespace test2 rename to test;
表重命名:
rename table1 to table_1;
清空回收站:purge recyclebin;
查看數據庫用戶:
select * from dba_users;
修改數據庫默認表空間,表間是由數據段組成
alter database default tablespace test;
alter user test default tabledpace test;
一個用戶能使用多少表空間不是經過權限控制quota
quota unlimited
臨時表空間如臨時文件,虛擬內存,linux下的交換表空間
建立臨時表空間:
create temporary tablespace temp1 tempfile 'e:\oracle\tem_f.dbf' size 10m
建立用戶同時指定其臨時表空間:
create user test identified by test default tablespace test temporary tablespace temp1 quota 10m on test;
刪除表空間指定的數據文件:
alter tablespace test drop datafile 5;
用戶:
建立用戶時指定下次登陸時需改修密碼:
cteate user test identified by test5 default tablespace test temporary tablespace temp1 password expire(過時);
鎖定用戶:
create user test identified by test5 default tablespace test temporary tablespace temp1 account lock;
建立外部驗證用戶:
create user "pgm/pgm-pc" identified externally;(操做系統用戶驗證)用戶必定要用雙引號,且要大寫。
權限(privilege):
一、系統權限system
SQL>select * from system_privilege_map (系統權限表)
SQL>select * from dba_sys_privs where grantee='test' 查看一個用戶擁有的系統權限(重要,經常使用)
SQL>grant create any table to test;授予能夠在其它表空間建立表,注意此權限較大,如test用戶能夠建立test1用戶的表。
create any table
unlimited tablespace
drop any table
二、對象權限 object
SQL>select * from dba_tab_privs where grantee ='test' ;查看用戶擁有的對象(表)權限 (重要,經常使用)
授予用戶對錶t的相關權限:
SQL>grant select ,insert,updata,delete on t to test;
SQL>grant all on test1 to test ;把關於test1全部的對象權限授予給test用戶。
SQL>grant all on test1 to test grant option (實現權限傳遞)
收回權限revoke:
SQL>revoke all on test1 from test
oracle 默認是不能權限傳遞
角色(role):
SQL>select * from dba_roles;
SQL>create role role_test;建立角色
SQL>grant create table,create session,create view to role_test;授予角色上述權限
查看某個角色擁有哪些權限:
SQL>select * from dba_role_privis where grantee='orle_test'
授予用戶某個角色:
SQL>grant role_test to test;
控制用戶資源使用:
profiles 默認:用戶密碼輸錯10次被鎖定
建立用戶時指定默認profiles
SQL>create user test identified by test profile default;
修改用戶profile
SQL>alter user test3 profile profile_test;
指定profiles 時須要注意設置如下參數爲true時纔可生效:
show parameter limit
SQL>alter system set resource_limit=true;
例外:set time on
set time off
關於SCHEMA.
SQL>grant SELECT_GATALOG_ROLE to test1;
授予查看視圖等 權限
查看某個用戶所擁有的表:
select * from dba_tables where owner = 'MING'
修改表的列的屬性:
SQL>alter table tt modify emp varchar2(10);
增長列:
SQL>alter table tt add d int;
增長表約束:
alter table emp add constraint pk1 primary key (id);
主鍵約束與惟一約束區別:一個能夠爲空,一個不能夠爲空
建立check約束(男表明1,女表明0):
SQL>alter table emp add constraint chk_t check (sex in ('0','1'));
建立check約束,sal在1500與100000之間數值。
SQL> alter table tt add constraint chk_tt check (sal >= 1500 and sal <=100000);
添加非空約束:
alter table tt add constraint not_null check (id is not null);
not null 爲列級約束,
主鍵,外鍵,惟一,檢查約束都爲表級約束。
查看某個用戶的約束;
select * from dba_constraints where owner = 'MING'
視圖(view):
查看某個用戶下擁有的視圖:
select * from dba_views where owner = 'MING'
複雜視圖與簡單視圖(可在視圖裏插入數據操做)
建立一個複雜視圖:
create view or replace v$empd as
select t1.empno,t1.ename,t2.dname,t1.job,t1.hiredate,t1.sal from emp t1 join dept t2 on (t1.deptno=t2.deptno)
建立視圖同時指定爲只讀:
create view v$v1 as
select * from emp with read only
索引(index)
一、b-tree (balance)平衡樹
二、bitmap
查看某用戶下的索引:
select * from dba_indexes where owner = 'SCOTT'
研究oracle時用的更改 session命令:
SQL>alter session set events 'immediate trace name treedump level 12190(對象編號)'
drop table tt purge;刪除一個表不放到回收站裏
plsql:
glogin.sql 初始化文件添加如下:
set serveroutput on
procedure
第四天 錄像16\17先跳過,找一些關於PL/SQL相關資料再補一下, 42分
關於賬戶安全性:
授予表爲公共表:
grant all on emp to public;
撤銷操做:
revoke all on emp from public;
revoke execute on utl_file from public; 收回執行權限
關於審計:
show parameter audit 查看上述參數,windows與linux不一樣
啓用審計,修改下述參數:
alter system set audit_trail=db_extended scope=spfile;
一、權限審計
建立審計:
audit create session 全部用戶都審計
audit create session by ming 只審計ming用戶
刪除審計:
noaudit create session
查看審計權限視圖:
select * from dba_priv_audit_opts;
審計日誌視圖:
select * from dba_audit_trail
二、對象審計:
audit select on ming.emp;
audit select on ming.emp by session;默認 針對同一個session
audit select on ming.emp by access whenever successfull
三、語句審計
audit table by ming審計用戶ming關於表的操做
查看錶的審計日誌:
select * from dba_obj_audit_opts;
四、oracle提供的審計包:
audit all by emp;
查看日誌:
select * from dba_stmt_audit_opts;
audit all on default; 審計全部,只對建立其以後的對象生效
查看日誌:
select * from all_def_audit_opts;
五、例外:
建立一個審計策略:
execute
dbms_fga.add_policy(
object_schema=>'ming',
object_name=>'emp',
policy_name=>'audit_emp',
audit_condition=>'empno=7900',
audit_column=>'ename',
handler_schema=>'secure',
enable=>true,
statement_types=>'select'
);
關於服務命名:
配置時主要看lsnrctl裏面的狀態:ready 的確定是能鏈接,unknow未必能鏈接。
查看數據庫是共享仍是專用模式:
show parameter shared
若是shared_servers爲大於0說明支持共享模式
數據庫默認鏈接類型選擇共享模式,若是共享與專用共存時。
研究進程時用的查看sid
selelct sid from v$mystat where rownum=1;
select server from v$session where sid ='??';
關於無效對象處理:
查看無效對象:
select * from dba_objects where status='INVALID'
HWM:(high water mark) 高水位
分析sql語句執行:
SQL>set autotrace traceonly
SQL>analyze table t1 compute statistics ;分析表
修改索引:
alter index idx_t rebuild;重建索引
alter index idx_t rebuild online; 在線重建索引,不影響insert updata delete 執行。
sql>exec dbms_stats.gather_table_stats('sys','T1');
關於上述包dbms_stats 收集統計信息
undo表空間
建立undo表空間
create undo tablespace undo002 datafile ' e:\oracle\datafile\undo002.dbf' size 100m autoextend off next 20m;
查看實例使用哪個undo表空間:
SQL>show parameter undo
查看undo段:
select * from dba_rollback_segs;
select * from v$undostat
每十分鐘紀錄一個
select * from v$sql;
block 阻塞
SQL> show parameter db_block
關於鎖:lock
select * from v$lock
select * from v$locked_object 鎖的對象
TX:ROW 模式爲:6 排他的 行級鎖
TM:TABLE 3 表級鎖共5種:RS、 RX、 S、 SRX、 X
SQL>lock table t in exclusive mode ; x鎖模式,死鎖
注:請不要手動隨便加鎖,數據庫會自動所需加鎖
deadlock:
指的是應用程序裏的死循環等
收集統計信息:
select * from dba_scheduler_jobs 每晚十點系統的一個GATHER_STATS_JOB 任務
select * from dba_scheduler_window_groups
查看等待session :
select * from V$session_Wait
select * from v$session_wait_history order by wait_time desc
關於監控::
ash:active session history 記錄session紀錄,每秒紀錄一次,插入一次紀錄。em裏面的ash報告
select * from v$active_session_history;
命令下建立ash報告:
SQL> @E:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\ashrpt.sql
awr:auto workload repository
awr的表屬於sys用戶下,存儲在SYSAUX表空間下面
每一小時收集一次信息,保留7天,如下表能夠查看:
select * from dba_hist_wr_control
修改其設置(但通常不建議修改):
SQL>exec dbms_workload_repository.modify_snapshot_settings(retention=>1440,interval=>30);
命令下建立awr報告:
SQL> @E:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\awrrpt.sq
addm: auto database dia
數據自動診斷建議
命令下建立addm報告:
SQL> @E:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\addmrpt.sq
查看錶的大小:
SQL>select bytes/1024/1024 m from dba_segments where segment_name='T1';
建立表在指定的表空間中:
SQL>create table t1 tablespace test as select * from dba_objects;
SQL>insert into t1 select * from t1;
關於度量metric:
select * from dba_outstanding_alerts
查看度量警告
啓用管理顧問參數:
SQL> show parameter statistics
statistics_level string TYPICAL 當爲typical時啓用
查看下述建議視圖:
select * from v$statistics_level
關於備份:
一、徹底脫機備份
二、部分脫機備份(只針對表空間操做)
三、聯機部分備份 (能夠備份system表空間)
四、rman備份(聯機徹底備份)
五、邏輯備份(exp/imp expdp/impdp)
sql>show parameter db_reco;(db_recover)
查看歸檔備份日誌的參數路徑信息,包括其大小:默認爲2g
db_recovery_file_dest_size 關於常常出現歸檔日誌超過2G大小問題
scn : system change number
select dbms_flashback.get_system_change_number from dual;
select file#,checkpoint_change# from v$datafile;
select file#,checkpoint_change# from v$datafile_header;
兩個做對比查看檢查點是否一致,如不是文件需恢復。
更改某個表空間爲熱備份:
alter tablespace users begin backup; (更改後能夠聯機拷文件)
alter database begin backup; 更改全部表空間爲熱備
查看:
select * from v$backup; 主要紀錄起始檢查點
拷文件完後:
alter tablespace users end backup;
注:上述聯機熱備產生的日誌比其它備份模式較大
若是出現控制文件需恢復,把舊的控制文件拷來使用需添加如下命令:
sql>recover database using backup controlfile;(申明控制文件不是最新 的)
sql>recover database using backup controlfile until cancel;
sql>alter database open resetlogs; 把 scn折斷,當scn有損失時使用,即當聯機日誌存在時使用。不然用noresetlog
關於日誌文件的備份恢復
添加一組日誌文件:
SQL> alter database add logfile 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO04.LOG' size 50m;
(默認)最多隻能夠有16組日誌文件,最少須要2組。
SQL> alter database drop logfile group 4; 一個group 可能會有多個member;
當日志文件損壞後,能夠新建一組後使用以上命令刪除原來的
給日誌文件加一個鏡像:
SQL> alter database add logfile member 'E:\oracle\product\10.2.0\oradata\orcl\log\redo03.log' to group 3;
當前聯機的不能刪除
刪除其中一個member:
SQL> alter database drop logfile member 'E:\oracle\product\10.2.0\oradata\orcl\redo01.log' ;
關於RMAN備份:
RMAN>backup archivelog all; 備份歸檔日誌
檢查歸檔日誌:
rman>crosscheck archivelog all;
刪除過時沒用的歸檔日誌:
rman>delete expired archivelog all;
RMAN>backup as compressed backupset full database ;
徹底備份,壓縮備份集
RMAN>restore database from TAG=TAG201099342432;
使用指定備份集來恢復
SQL>grant connect,resource,recovery_catalog_owner to rman;
授予上述角色給新建用戶RMAN
RMAN>delete noprompt backup;
刪除備份,磁盤上的文件同時刪除。
關於增量備份:
RMAN>backup as compressed backupset incremental level=0 database;
0級備份(徹底備份)
RMAN>backup as compressed backupset incremental level=2 database;
2級備份,差別備份
RMAN>backup as compressed backupset incremental level=1 database;
1級備份,再把前面的2級備份覆蓋備份一次,同級別的備份不覆蓋
RMAN>list backup of database summary;
顯示詳細的備份信息
累積備份,關鍵字:cumulative,同一級別備份將覆蓋:
RMAN>backup as compressed backupset incremental level=1 cumulative database;
建立腳本:
rman>create script sc1{
delete noprompt backup;
backup as compressed backupset full database;
backup archivelog all;
}
查看腳本,本地腳本:
rman>list script name
執行腳本:
rman不支持直接執行腳本,需放在run裏面:
新建一個sql,把如下內容輸入:
run{execute script sc1};
當出現有數據塊損壞時:
rman>backup validate database ;
檢驗備份,不生成備份文件,與下述命令同樣做用:
c:\>dbv file ='e:\oracle\oradata\test.dbf'
sql>select * from v$database_block_corruption
檢驗完成後,查看有那一些壞塊
塊恢復操做(只有rman才能夠):
rman>blockrecover datafile 5 block 275;
恢復剛纔查詢到那一個數據文件的那一個塊
關於flashback database閃回(不徹底恢復)
1.檢查是否開啓flashback:
sql>select flashback_on from v$database;
2.如沒有開啓需在mount狀態下執行:
sql>alter database flashback on;
閃回表需在mount 狀態下執行:
SQL> flashback database to timestamp to_timestamp('2012/06/18 22:04:58','yy/mm/dd hh24:mi:ss');
閃回完成後需使用resetlog 打開數據庫
關於flashback drop;主要針對表刪除後閃回
flashback drop 不能閃回system表空間裏面的對象
sql>flashback table t to before drop;
sql>show parameter recyclebin ;默認上述參數開啓才能夠支持閃回表
查看回收站:
sql>select * from dba_recyclebin;
sql>flashback table t to before drop rename to t1;
若是遇到重名時使用rename
sql>purge table t ; 清除回收站裏的表t
sql>purge tablespace users ;清除回收站裏的user表空間
sql>purge recyclebin;清空回收站
閃回到某一個scn:
sql>select * from t as of scn 84391414;
sql>flashback table t to scn 34242342;
注:sys用戶不支持閃回。
例外:
新建一個數據文件:
SQL> alter database create datafile 'C:\oracle\product\10.2.0\oradata\orcl\tbs_test.dbf';
第八天錄像1:
http://tomszrp.itpub.net/post/11835/487501
關於asm
一、asmtool管理工具
二、建立asm儲存:
C:\>asmtool -create E:\asm\disk1 1024
增長如下服務css:
C:\>e:
E:\>cd E:\oracle\product\10.2.0\db_1\BIN
E:\oracle\product\10.2.0\db_1\BIN>localconfig.bat add
第八天錄像3-5 跳過
使用oracle 全球支持特性:
select * from v$nls_valid_values
查看支持語言視圖
windows註冊表裏:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_ORADB10GDB\NLS_LANG:
語言,版塊,字符集,排序
LANGUAGE_TERRITORY_CHARACTERSET SORT
alter session set nls_sort ='對應的sort值'
alter session set nls_language='對應的language值'
alter ssession set nls_date_format='yyyy/mm/dd hh:mi:ss'; 更改日期格式
注:上述只對當前窗口生效
修改日期格式:
alter system set nls_format='yyyy/mm/dd hh24:mi:ss' scope=spfile;
優先級最低,默認以版塊來做日期格式,再到上述參數,若是註冊表添加如下,則如下述格式優先
在註冊表編輯
添加如下鍵值:nls_date_format yyyy-mm-dd hh24:mi:ss
在監聽裏增長安裝機制:
change_password :
啓用上述密碼後,oracle10g是不起做用的,默承認以經過os認證,
要去除os認證,那麼須要在listener.ora文件中添加:
LOCAL_OS_AUTHENTICATION_[listener name] = OFF
重啓監聽後生效
配置遠程監聽:
在tnsnames.ora增長如下:
LISTENER_R =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.24)(PORT = 1521))
再設置如下相關參數,主要使用在rac環境中的負載均衡:
sql>show parameter remote;
sql>alter system set remote_listener=listener_r;需指定相關參數
中止遠程數據庫監聽(在上述配置的數據操做):
LSNRCTL> stop listener_r
關於em修復:
c:\>emctl status dbconsole
c:\>emctl start dbconsolecss
em重建:emca -config dbcontrol db -repos recreate
第九天 錄像6 :
關於使用em創建自動做業:
打開em---管理----數據庫調度程序----做業
經過上述建立相關做業實現自動運行;
注意:windows裏:OracleJobSchedulerORCL 服務必須啓動
第十天 錄像 3
關於exp/imp 使用:
注:sys用戶下不支持導出!!
如以sysdba用戶導出需加單引號,如:
C:\>exp 'sys/tiger@orcl as sysdba' file =c:\temp\a.dmp log =c:\temp\a.log owner=scott
指定scn導出
C:\>exp 'sys/tiger@orcl as sysdba' file =c:\temp\a.dmp log =c:\temp\a.log owner=scott flashback_scn=984312984
當遇到磁盤空間問題時掛起操做處理,不做中斷處理
RESUMABLE 遇到與空間相關的錯誤時掛起 (N)
C:\>exp system/tiger@orcl file =c:\temp\a.dmp log =c:\temp\a.log owner=scott resumable=y
ora-04031錯誤,常見錯誤,爲sga錯誤爲主!
例外:非歸檔模式下當數據文件損壞,沒有做任何備份,嘗試如下方式打開數據庫:offline drop 表示永久刪除,而歸檔模式下可使用offline
sql>alter database datafile 5 offline drop;
傳輸表空間的使用:
C:\>exp 'sys/tiger@orcl as sysdba' file =c:\temp\a.dmp log =c:\temp\a.log tablespaces=test transport_tablespace=y
導入時反轉過來 ,但需指定相關數據文件。
http://jzhil2004.blog.163.com/blog/static/27558504201010553843243/?fromdm&fromSearch&isFromSearchEngine=yeslinux
2012年7月 記sql