一、Oracle安裝優(yōu)化
1.1 啟動(dòng)Oracle
netca #設(shè)置listener.org,設(shè)置監(jiān)聽,遠(yuǎn)程連接必須要開啟監(jiān)聽
netmgr #設(shè)置tnsnames.ora,遠(yuǎn)程連接的別名,一般設(shè)置在client
lsnrctl start/stop/status #查看oracle的監(jiān)聽,開啟/停止/狀態(tài)
sqlplus / as sysdba #本地?zé)o驗(yàn)證登錄sys用戶
startup #啟動(dòng)Oracle實(shí)例
tnsping xinxin #檢測(cè)lsnrctl是否啟動(dòng)
檢查Oracle是否啟動(dòng)
[oracle@oracle ~]$ ps -ef | grep smon
oracle 3295 1 0 10:28 ? 00:00:00 ora_smon_orcl
1.2 查看是否開機(jī)歸檔的兩種方式
SQL> select log_mode from v$database;
LOG_MODE
------------------------
ARCHIVELOG
--------------------------------------------------------------------------------------
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 6
Next log sequence to archive 8
Current log sequence 8
1.3 開啟歸檔(需要停止業(yè)務(wù),相當(dāng)于mysql-binlog)
mkdir -p /data/oracle_arch/arch
aqlplus / as sysdba
archive log list;
show parameter dest #查看歸檔文件
alter system set log_archive_dest_1='location=/data/oracle_arch/arch'; #指定歸檔的路徑(歸檔路徑滿了之后數(shù)據(jù)庫(kù)會(huì)夯住)
shutdown immediate; #關(guān)閉數(shù)據(jù)庫(kù)
startup mount; #啟動(dòng)數(shù)據(jù)庫(kù),加載實(shí)例但數(shù)據(jù)庫(kù)關(guān)閉
alter database archivelog; #打開歸檔日志,執(zhí)行命令成功后返回?cái)?shù)據(jù)庫(kù)已更改的消息
alter database open; #打開數(shù)據(jù)庫(kù)
select log_mode v$database #驗(yàn)證歸檔是否打開
tablespaces
dba_tablespaces 數(shù)據(jù)字典信息,保存了數(shù)據(jù)庫(kù)的源數(shù)據(jù)信息
v$database 動(dòng)態(tài)性能視圖 ------>show status
show parameter ------->show variables
user_xxxs/dba_xxxs -----> information_schema
二、Oracle用戶、權(quán)限、角色管理
2.1 簡(jiǎn)介
用戶:對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)需要以適當(dāng)?shù)纳矸萃ㄟ^(guò)驗(yàn)證,這就是用戶的作用;每個(gè)Oracle用戶都有自己的用戶名和密碼,并且擁有他們所創(chuàng)建的任意表、視圖和其他資源,需要注意的是新創(chuàng)建的用戶連最基本的訪問(wèn)登入Oracle的權(quán)限都沒有,所以后續(xù)需要授予不同的權(quán)限和角色來(lái)達(dá)成不同的操作目的;
實(shí)體權(quán)限:權(quán)限一般分為系統(tǒng)權(quán)限和對(duì)象權(quán)限,系統(tǒng)權(quán)限可以通俗地理解為將數(shù)據(jù)庫(kù)對(duì)象從無(wú)到有或從有到無(wú)的創(chuàng)建操作,比如說(shuō)創(chuàng)建和刪除表、視圖、存儲(chǔ)過(guò)程、session等這些操作都可以認(rèn)為是系統(tǒng)權(quán)限;對(duì)象權(quán)限賦予了你在不同的數(shù)據(jù)庫(kù)對(duì)象上操作的能力,比如DELETE權(quán)限允許你對(duì)表和視圖刪除行,SELETE權(quán)限允許你對(duì)表、視圖、序列等進(jìn)行查詢操作!至于系統(tǒng)權(quán)限和對(duì)象權(quán)限分別有哪些,具體請(qǐng)參照Oracle官網(wǎng),這里不再詳細(xì)解釋!
角色:如果多個(gè)新建用戶需要后續(xù)賦予10不等的不同權(quán)限,一般方法是需要將10個(gè)不等的權(quán)限分別列出來(lái)進(jìn)行授予,不但麻煩而且重用性不高,角色的出現(xiàn)就是為了解決這個(gè)問(wèn)題。Oracle角色是一組權(quán)限的集合。正常情況下我們可以授予角色一些權(quán)限,然后將角色分配給適當(dāng)?shù)挠脩簦?/p>
2.2 權(quán)限分類
系統(tǒng)權(quán)限:系統(tǒng)規(guī)定用戶使用數(shù)據(jù)庫(kù)的權(quán)限。(系統(tǒng)權(quán)限是對(duì)用戶而言)。
實(shí)體權(quán)限:某種權(quán)限用戶對(duì)其它用戶的表或視圖的存取權(quán)限。(是針對(duì)表或視圖而言的)
2.2.1 系統(tǒng)權(quán)限
DBA: 擁有全部特權(quán),是系統(tǒng)最高權(quán)限,只有DBA才可以創(chuàng)建數(shù)據(jù)庫(kù)結(jié)構(gòu)。
RESOURCE:擁有Resource權(quán)限的用戶只可以創(chuàng)建實(shí)體,不可以創(chuàng)建數(shù)據(jù)庫(kù)結(jié)構(gòu)。
CONNECT:擁有Connect權(quán)限的用戶只可以登錄Oracle,不可以創(chuàng)建實(shí)體,不可以創(chuàng)建數(shù)據(jù)庫(kù)結(jié)構(gòu)。
1、系統(tǒng)權(quán)限授權(quán)命令
[系統(tǒng)權(quán)限只能由DBA用戶授出:sys, system(最開始只能是這兩個(gè)用戶)]
授權(quán)命令:SQL> grant connect, resource, dba to 用戶名1 [,用戶名2]...;
[普通用戶通過(guò)授權(quán)可以具有與system相同的用戶權(quán)限,但永遠(yuǎn)不能達(dá)到與sys用戶相同的權(quán)限,system用戶的權(quán)限也可以被回收。]
例:
SQL> connect system/manager
SQL> Create user user50 identified by user50;
SQL> grant connect, resource to user50;
查詢用戶擁有哪里權(quán)限:
SQL> select * from dba_role_privs;
SQL> select * from dba_sys_privs;
SQL> select * from role_sys_privs;
刪除用戶:SQL> drop user 用戶名 cascade; //加上cascade則將用戶連同其創(chuàng)建的東西全部刪除
2、系統(tǒng)權(quán)限傳遞:
增加WITH ADMIN OPTION選項(xiàng),則得到的權(quán)限可以傳遞。
SQL> grant connect,resorce to user50 with admin option; //可以傳遞所獲權(quán)限。
3、系統(tǒng)權(quán)限回收:系統(tǒng)權(quán)限只能由DBA用戶回收
命令:SQL> Revoke connect, resource from user50;
說(shuō)明:
1)如果使用WITH ADMIN OPTION為某個(gè)用戶授予系統(tǒng)權(quán)限,那么對(duì)于被這個(gè)用戶授予相同權(quán)限的所有用戶來(lái)說(shuō),取消該用戶的系統(tǒng)權(quán)限并不會(huì)級(jí)聯(lián)取消這些用戶的相同權(quán)限。
2)系統(tǒng)權(quán)限無(wú)級(jí)聯(lián),即A授予B權(quán)限,B授予C權(quán)限,如果A收回B的權(quán)限,C的權(quán)限不受影響;系統(tǒng)權(quán)限可以跨用戶回收,即A可以直接收回C用戶的權(quán)限。
2.2.2 實(shí)體權(quán)限管理
實(shí)體權(quán)限分類:select,update,insert, alter,index,delete,all //all包括所有權(quán)限 execute------>執(zhí)行存儲(chǔ)過(guò)程權(quán)限
1、實(shí)體權(quán)限分類:select,update,insert,alter,index,delete, all //all包括所有權(quán)限
execute //執(zhí)行存儲(chǔ)過(guò)程權(quán)限
user01:
SQL> grant select,update,insert on product to user02;
SQL> grant all on product to user02;
user02:
SQL> select * from user01.product;
// 此時(shí)user02查user_tables,不包括user01.product這個(gè)表,但如果查all_tables則可以查到,因?yàn)樗梢栽L問(wèn)。
>>創(chuàng)建用戶及授權(quán)管理權(quán)限
SQL> create table t1(id int,name varchar2(20));
Table created.
SQL> insert into t1 values(1,'zs');
1 row created.
SQL> commit
2 ;
Commit complete.
2. 將表的操作權(quán)限授予全體用戶:
SQL> grant all on product to public; // public表示是所有的用戶,這里的all權(quán)限不包括drop。
[實(shí)體權(quán)限數(shù)據(jù)字典]:
SQL> select owner,table_name from all_tables; // 用戶可以查詢的表
SQL> select table_name from user_tables; // 用戶創(chuàng)建的表
SQL> select grantor,table_schema,table_name,privilege from all_tab_privs; // 獲權(quán)可以存取的表(被授權(quán)的)
SQL> select grantee,owner,table_name,privilege from user_tab_privs; // 授出權(quán)限的表(授出的權(quán)限)
>創(chuàng)建用戶及授權(quán)管理權(quán)限
3. DBA用戶可以操作全體用戶的任意基表(無(wú)需授權(quán),包括刪除):
DBA用戶:
SQL> Create table stud02.product(
id number(10),
name varchar2(20));
SQL> drop table stud02.emp;
SQL> create table stud02.employee
as
select * from scott.emp;
4. 實(shí)體權(quán)限傳遞(with grant option):
user01:
SQL> grant select,update on product to user02 with grant option; // user02得到權(quán)限,并可以傳遞。
5. 實(shí)體權(quán)限回收:
user01:
SQL>Revoke select,update on product from user02; //傳遞的權(quán)限將全部丟失。
說(shuō)明
1)如果取消某個(gè)用戶的對(duì)象權(quán)限,那么對(duì)于這個(gè)用戶使用WITH GRANT OPTION授予權(quán)限的用戶來(lái)說(shuō),同樣還會(huì)取消這些用戶的相同權(quán)限,也就是說(shuō)取消授權(quán)時(shí)級(jí)聯(lián)的。
2.3 Oracle 用戶管理
2.3.1 創(chuàng)建用戶的Profile文件
SQL> create profile student limit #student為資源文件名file
FAILED_LOGIN_ATTEMPTS 3 #指定鎖定用戶的登錄失敗次數(shù)
PASSWORD_LOCK_TIME 5 #指定用戶被鎖定天數(shù)
PASSWORD_LIFE_TIME 30 #指定密碼過(guò)期時(shí)間
2.3.2創(chuàng)建用戶
SQL> Create User username
Identified by password
Default Tablespace tablespace
Temporary Tablespace tablespace
Profile profile #指定profile名字
Quota integer/unlimited on tablespace;
------------------------------------------
>>例:
SQL> Create user acc01
identified by acc01 #如果密碼是數(shù)字,請(qǐng)用雙引號(hào)括起來(lái)
default tablespace users #指定表空間users
temporary tablespace temp #臨時(shí)表空間
profile student #指定profile名字(用戶限制)
quota 50m on users; #限制最多使用多少空間,一般不用
SQL> grant connect, resource to acc01;
查看表空間(存儲(chǔ)的表空間,用戶下所見的表存儲(chǔ)的位置)
SQL> select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
------------------------------------------------------------
SYSTEM #系統(tǒng)表空間
SYSAUX #系統(tǒng)表空間
UNDOTBS1 #undo表空間
TEMP
USERS #用戶表空間
EXAMPLE
TABLE_TEST
DATA
8 rows selected.
2.3.3 查詢用戶缺省表空間、臨時(shí)表空間
SQL> select username,default_tablespace,temporary_tablespace from dba_users;
2.3.4 查詢系統(tǒng)資源文件名
SQL> select * from dba_profiles; #用戶限制的表,一般不限制
>>>資源文件類似表,一旦創(chuàng)建就會(huì)保存在數(shù)據(jù)庫(kù)中
SQL> select username,profile,default_tablespace,temporary_tablespace from dba_users;
>>>修改用戶的profile
SQL> create profile common limit
failed_login_attempts 5
idle_time 5;
SQL> Alter user acc01 profile common;
查詢profile文件
SQL> select distinct profile from dba_profiles;
PROFILE
------------------------------------------------------------
MONITORING_PROFILE
COMMON
DEFAULT
查詢profile-name=common的配置
SQL> select * from dba_profiles where profile='COMMON';
2.3.5修改用戶
SQL> Alter User 用戶名
Identified 口令
Default Tablespace tablespace
Temporary Tablespace tablespace
Profile profile
Quota integer/unlimited on tablespace;
>>修改口令字:
SQL>Alter user acc01 identified by "12345";
>>修改用戶缺省表空間:
SQL> Alter user acc01 default tablespace users;
>>修改用戶臨時(shí)表空間
SQL> Alter user acc01 temporary tablespace temp_data;
>>強(qiáng)制用戶修改口令字:
SQL> Alter user acc01 password expire;
>>將用戶加鎖
SQL> Alter user acc01 account lock; // 加鎖
SQL> Alter user acc01 account unlock; // 解鎖
>>刪除用戶
SQL>drop user 用戶名; //用戶沒有建任何實(shí)體
SQL> drop user 用戶名 CASCADE; // 將用戶及其所建實(shí)體全部刪除
**1. 當(dāng)前正連接的用戶不得刪除
2.3.6監(jiān)視用戶
>>查詢用戶會(huì)話信息
SQL> select username,sid,serial#,machine from v$session;
>>刪除用戶會(huì)話信息
SQL> Alter system kill session 'sid, serial#';
>>查詢用戶SQL語(yǔ)句
SQL> select user_name,sql_text from v$open_cursor;