Linux系統(tǒng)下操作Oracle數(shù)據(jù)庫(kù)
Oracle Database,又名Oracle RDBMS,或簡(jiǎn)稱Oracle。是甲骨文公司的一款關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。它是在數(shù)據(jù)庫(kù)領(lǐng)域一直處于領(lǐng)先地位的產(chǎn)品??梢哉f(shuō)Oracle數(shù)據(jù)庫(kù)系統(tǒng)是世界上流行的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),系統(tǒng)可移植性好、使用方便、功能強(qiáng),適用于各類大、中、小微機(jī)環(huán)境。它是一種高效率的、可靠性好的、適應(yīng)高吞吐量的數(shù)據(jù)庫(kù)方案。
一、登錄oracle數(shù)據(jù)庫(kù):
//切換至Oracle用戶:
[root@localhost ~]# su - oracle
//進(jìn)入sqlplus環(huán)境,nolog參數(shù)表示不登錄:
[oracle@localhost ~]$ sqlplus /nolog
//注:
su 和 su - 命令的區(qū)別:
前者只是切換了root身份,但Shell環(huán)境仍然是普通用戶的Shell;
而后者連用戶和Shell環(huán)境一起切換成root身份了。只有切換了Shell環(huán)境才不會(huì)出現(xiàn)PATH環(huán)境變量錯(cuò)誤。
//以管理員模式登錄:
[oracle@localhost ~]$ sqlplus / as sysdba
//注:
sqlplus / as sysdba,是oracle登錄三種方式之一
oracle登錄身份有三種:
1、normal 普通身份;
2、sysdba 系統(tǒng)管理員身份;
3、sysoper 系統(tǒng)操作員身份;
a.若以 ‘sysdba’ 方式認(rèn)證,登錄用戶為 ‘SYS’,為 Oracle ‘最高權(quán)限用戶’
b.若以 ‘sysoper’ 方式認(rèn)證,登錄用戶為 ‘PUBLIC’,僅有 ‘PUBLIC 對(duì)象權(quán)限’
sysdba可以建數(shù)據(jù)庫(kù),sysoper不能建數(shù)據(jù)庫(kù)
//查詢sys和system兩個(gè)管理員的權(quán)限個(gè)數(shù)
SQL> select t.grantee, count(1) from dba_sys_privs t where t.grantee in ('SYS', 'SYSTEM') group by t.grantee;
注:sys和system都是Oracle ‘內(nèi)置用戶’;sys擁有最高權(quán)限,存儲(chǔ) Oracle 的數(shù)據(jù)字典的基表和視圖,這些基表和視圖對(duì) Oracle 的運(yùn)行是至關(guān)重要的,由數(shù)據(jù)庫(kù)自己維護(hù),任何用戶都不能手動(dòng)更改。sys (‘超級(jí)管理員’) 的權(quán)限遠(yuǎn)大于 system (‘一般管理員’)。
//啟動(dòng)數(shù)據(jù)庫(kù)
SQL> startup
//停止數(shù)據(jù)庫(kù)
SQL> shutdown immediate
//查看數(shù)據(jù)庫(kù)所有賬號(hào)及賬號(hào)狀態(tài)
SQL>select username,account_status from dba_users;
//查詢SID
在oracle中,sid是“System IDentifier”的縮寫,是數(shù)據(jù)庫(kù)的唯一標(biāo)識(shí)符,是在建立數(shù)據(jù)庫(kù)時(shí)系統(tǒng)自動(dòng)賦予的一個(gè)初始ID,是以環(huán)境變量的形式出現(xiàn)的,用于將系統(tǒng)上fork的進(jìn)程與其他實(shí)例進(jìn)行區(qū)分。SID是在一些DBA操作以及與操作系統(tǒng)交互,從操作系統(tǒng)的角度訪問(wèn)實(shí)例名,必須通過(guò)ORACLE_SID(操作系統(tǒng)的環(huán)境變量),且它在注冊(cè)表中也是存在的。而數(shù)據(jù)庫(kù)名是在安裝數(shù)據(jù)庫(kù)、創(chuàng)建新的數(shù)據(jù)庫(kù)、創(chuàng)建數(shù)據(jù)庫(kù)控制文件、修改數(shù)據(jù)結(jié)構(gòu)、備份與恢復(fù)數(shù)據(jù)庫(kù)時(shí)都需要使用到的。
env|grep SID (不用進(jìn)數(shù)據(jù)庫(kù),只需要su到oracle下就可以執(zhí)行查詢)
查看用戶:
SQL> select * from v$instance;
SQL> select instance_name,host_name from v$instance;
設(shè)置SID:
export ORACLE_SID=hhh
//查詢數(shù)據(jù)庫(kù)的DBID
SQL>select dbid,open_mode from v$database;
DBID是DataBase IDentifier的縮寫,是數(shù)據(jù)庫(kù)的唯一識(shí)別碼(代號(hào)),被記錄在控制文件和數(shù)據(jù)文件中,跟學(xué)生表中的學(xué)號(hào)的功能是類似的,ID是系統(tǒng)自動(dòng)分配的,如數(shù)據(jù)庫(kù)名為testdb,dbid 為7。平時(shí)很少需要用這個(gè)參數(shù)。但在RMAN恢復(fù)時(shí),若沒(méi)有使用恢復(fù)目錄(catalog),知道被恢復(fù)的數(shù)據(jù)庫(kù)的DBID可以簡(jiǎn)化操作。例如要恢復(fù)一個(gè)已經(jīng)丟失了控制文件的數(shù)據(jù)庫(kù)的控制文件。
//oracle查詢數(shù)據(jù)庫(kù)密碼哪一天過(guò)期(其中expiry_date即是過(guò)期的時(shí)間)
SQL>select username,account_status,expiry_date,profile from dba_users;
//查詢數(shù)據(jù)庫(kù)密碼有效期
SQL>select * from dba_profiles s where s.profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';
//配置用戶密碼過(guò)期時(shí)間
SQL>alter profile "default" limit password_life_time unlimited;
配置用戶密碼永不過(guò)期
SQL>alter profile "default" limit password_life_time 100;
配置用戶密碼100天過(guò)期
//修改密碼
SQL>alter user 用戶名 identified by 密碼;
//創(chuàng)建、配置新用戶及查看用戶屬性
//解鎖新用戶:
SQL>alter user scott account unlock;
SQL>alter user scott identified by tiger;
//刪除oracle用戶:SQL>drop user username cascade;
(刪除與用戶相關(guān)的所有對(duì)象)
這樣該用戶包括該用戶下的表,試圖,同義詞,過(guò)程,索引,及相關(guān)的一切就刪除了。
//創(chuàng)建用戶并賦權(quán)限以及設(shè)置默認(rèn)表空間。
以sysdba用戶登陸進(jìn)行以下設(shè)置:
– 創(chuàng)建用戶
SQL>create user VHFSM
identified by vhnj1fsm
default tablespace MGRVHFSTBSDEF 此處是設(shè)置默認(rèn)表空間。
temporary tablespace TEMP
profile DEFAULT
quota unlimited on mgrvhfstbs2010 此處是設(shè)置可操作的其他表空間
quota unlimited on mgrvhfstbsdef;
–授權(quán)
SQL>grant connect to VHFSM;
SQL>grant dba to VHFSM;
– 授予無(wú)限表空間權(quán)限
SQL>grant unlimited tablespace to VHFSM;
//查看所有用戶:
SQL>select * from dba_users;
SQL>select * from all_users;
SQL>select * from user_users;
//查看用戶或角色系統(tǒng)權(quán)限(直接賦值給用戶或角色的系統(tǒng)權(quán)限):
SQL>select * from dba_sys_privs;
SQL>select * from user_sys_privs;
//查看角色(只能查看登陸用戶擁有的角色)所包含的權(quán)限
SQL>select * from role_sys_privs;
//查看用戶對(duì)象權(quán)限:
SQL>select * from dba_tab_privs;
SQL>select * from all_tab_privs;
SQL>select * from user_tab_privs;
//查看所有角色:
SQL>select * from dba_roles;
//查看用戶或角色所擁有的角色:
SQL>select * from dba_role_privs;
SQL>select * from user_role_privs;
//查看哪些用戶有sysdba或sysoper系統(tǒng)權(quán)限(查詢時(shí)需要相應(yīng)權(quán)限)
SQL>select * from V$PWFILE_USERS
//注意:
//以下語(yǔ)句可以查看Oracle提供的系統(tǒng)權(quán)限
SQL>select name from sys.system_privilege_map
//查看一個(gè)用戶的所有系統(tǒng)權(quán)限(包含角色的系統(tǒng)權(quán)限)
SQL>SELECT privilege
FROM dba_sys_privs
WHERE grantee = 'DATAUSER'
UNION
SELECT privilege
FROM dba_sys_privs
WHERE grantee IN (SELECT granted_role FROM dba_role_privs WHERE grantee = 'DATAUSER');
二、數(shù)據(jù)庫(kù)監(jiān)聽
//啟動(dòng)監(jiān)聽服務(wù)
[root@localhost ~]# su - oracle
[oracle@localhost ~]$ lsnrctl start
//停止監(jiān)聽服務(wù)
[oracle@localhost ~]$ lsnrctl stop
//查看監(jiān)聽狀態(tài)
[oracle@localhost ~]$ lsnrctl status
Listener主要負(fù)責(zé)下面方面功能:
1、 監(jiān)聽客戶端請(qǐng)求
監(jiān)聽器運(yùn)行在數(shù)據(jù)庫(kù)服務(wù)器之上,與Oracle實(shí)例(可為多個(gè))相關(guān)關(guān)聯(lián),是一個(gè)專門的進(jìn)程process,在windows的服務(wù)項(xiàng)目或者Linux的運(yùn)行進(jìn)程列表中,都會(huì)看到對(duì)應(yīng)的運(yùn)行進(jìn)程。Windows上名為TNSLSNR,Linux/Unix平臺(tái)上是lsnrctl。
2、 為客戶端請(qǐng)求分配Server Process
監(jiān)聽器只負(fù)責(zé)接聽請(qǐng)求,之后將請(qǐng)求轉(zhuǎn)接給Oracle Server Process。在Oracle的服務(wù)模式下,客戶端進(jìn)程是不允許直接操作數(shù)據(jù)庫(kù)實(shí)例和數(shù)據(jù),而是通過(guò)一個(gè)服務(wù)進(jìn)程Server Process(也稱為影子進(jìn)程)作為代理。
3、 注冊(cè)實(shí)例服務(wù)。
本質(zhì)上講,listener是建立實(shí)例和客戶端進(jìn)程之間聯(lián)系的橋梁。Listener與實(shí)例之間的聯(lián)系,就是通過(guò)注冊(cè)的過(guò)程來(lái)實(shí)現(xiàn)的。注冊(cè)的過(guò)程就是實(shí)例告訴監(jiān)聽器,它的數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)實(shí)例名稱instance_name和服務(wù)名service_names。監(jiān)聽器注冊(cè)上這樣的信息,對(duì)客戶端請(qǐng)求根據(jù)監(jiān)聽注冊(cè)信息,找到正確的服務(wù)實(shí)例名稱。目前Oracle版本中,提供動(dòng)態(tài)注冊(cè)和靜態(tài)注冊(cè)兩種方式。
4、錯(cuò)誤轉(zhuǎn)移failover。
Failover是RAC容錯(cuò)的一個(gè)重要方面功能,其功能是在數(shù)據(jù)庫(kù)實(shí)例崩潰的時(shí)候,可以自動(dòng)將請(qǐng)求轉(zhuǎn)移到其他可用實(shí)例上的一種功能??梢蕴峁┖艽蟪潭壬系目捎眯裕ˋvailability)功能。這個(gè)過(guò)程中,發(fā)現(xiàn)實(shí)例已經(jīng)崩潰,并且將請(qǐng)求轉(zhuǎn)移到其他實(shí)例上,就屬于是listener的功能。
5、 負(fù)載均衡衡量。
在RAC架構(gòu)中,Oracle實(shí)現(xiàn)了負(fù)載均衡。當(dāng)一個(gè)客戶請(qǐng)求到來(lái)時(shí),Oracle會(huì)根據(jù)當(dāng)前RAC集群環(huán)境中所有實(shí)例的負(fù)載情況,避開負(fù)載較高的實(shí)例,將請(qǐng)求轉(zhuǎn)移到負(fù)載較低的實(shí)例進(jìn)行處理。在早期RAC版本中,負(fù)載輕重的衡量是根據(jù)監(jiān)聽器當(dāng)前維護(hù)連接數(shù)目來(lái)確定的,而不是實(shí)時(shí)查看多實(shí)例的負(fù)載。RAC環(huán)境中的監(jiān)聽器之間進(jìn)行溝通通信。
三、用戶權(quán)限管理
注:以下命令都需要DBA權(quán)限。
//查詢哪些用戶擁有DBA權(quán)限:
SQL>select * from dba_role_privs t where t.granted_role = 'DBA';
//創(chuàng)建用戶
SQL>create user 用戶名 identified by 123456 ;
//賦予用戶的表空間權(quán)限
SQL>alter user 用戶名default tablespace 用戶名;
//或者兩條命令合并為
SQL>create user 用戶名identified by 123456 default tablespace 用戶名;
注:新創(chuàng)建的用戶是沒(méi)有任何權(quán)限的,登錄的權(quán)限都沒(méi)有。因此需要再繼續(xù)做授權(quán)操作,但必須是具有授權(quán)能力的用戶,例如:sys、system;角色是指由系統(tǒng)權(quán)限集合,通常給某個(gè)用戶授權(quán)時(shí),如果沒(méi)有角色存在的話,則需要一條條的操作。通常一個(gè)角色由多個(gè)系統(tǒng)權(quán)限組成。常用的角色有三個(gè)connect(7種權(quán)限),dba,resource(在任何表空間建表)。
//授予用戶管理權(quán)限
SQL>grant connect,resource,dba to 用戶名;
//刪除用戶
SQL>drop user“name”cascade;
注:cascade參數(shù)是級(jí)聯(lián)刪除該用戶所有對(duì)象,經(jīng)常遇到如用戶有對(duì)象而未加此參數(shù)則用戶刪不了的問(wèn)題,所以習(xí)慣性的加此參數(shù)?!皀ame”的引號(hào)有無(wú)都是一樣的。
四、數(shù)據(jù)表及表空間
=什么是表空間=
表空間是Oracle數(shù)據(jù)對(duì)象和數(shù)據(jù)存儲(chǔ)的容器,它只是一個(gè)邏輯概念,若干操作系統(tǒng)文件(文件可以不是很大)可以組成一個(gè)表空間。表空間統(tǒng)一管理空間中的數(shù)據(jù)文件,一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間。一個(gè)數(shù)據(jù)庫(kù)空間由若干個(gè)表空間組成。如圖所示:
//創(chuàng)建表空間
create tablespace ittbank datafile '/u01/app/oracle/oradata/ORCL/ittbank.dbf' size 300m autoextend on;
注:末尾帶autoextend on參數(shù)表示當(dāng)表空間大小不夠用時(shí)會(huì)自動(dòng)擴(kuò)容,of則代表不自動(dòng)擴(kuò)容,所以建議加上autoextend on參數(shù)。
//查詢當(dāng)前表空間
select * from v$tablespace;
//查詢所有表空間select * from sys.dba_tablespaces;
--查詢表空間
//查看用戶當(dāng)前連接數(shù)
select count(*) from sys.v_$session;
//查詢空閑空間
select tablespace_name,file_id,block_id,bytes,blocks from dba_free_space;
//增加Oracle表空間
先查詢數(shù)據(jù)文件名稱、大小和路徑的信息,語(yǔ)句如下:
select tablespace_name,file_id,bytes,file_name from dba_data_files;
//修改文件大小語(yǔ)句如下文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-405176.html
alter database datafile'需要增加的數(shù)據(jù)文件路徑,即上面查詢出來(lái)的路徑'resize 800M;
五、desc常用查詢文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-405176.html
desc dba_temp_files; 查詢臨時(shí)表空間
desc v$database; 查看數(shù)據(jù)庫(kù)
desc dba_data_files; 查看數(shù)據(jù)文件
desc user_segments; 查看oracle segment(段)
desc dba_segments; 查看ORACLE segment
desc dba_tables; 查看表
desc dba_objects 查看對(duì)象
desc dba_users; 查看用戶
desc dba_tablespaces; 查看表空間
desc user_segments; 查看數(shù)據(jù)段
desc dba_jobs; 查看job
desc dba_role_privs; 查看角色權(quán)限
desc dba_constraints 查看約束
desc dba_cons_columns 查看列約束
show parameter log_archive_dest; 查看archive log所在位置
archive log list; 查看歸檔目錄以及l(fā)og sequence
select * from V$FLASH_RECOVERY_AREA_USAGE; 查看flash_recovery_area 使用情況。
select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage; 計(jì)算flash_recovery_area已經(jīng)占用的空間。
show parameter recover; 查找recovery目錄
desc v$process 通過(guò)v$process視圖,我們獲的是當(dāng)前系統(tǒng)中所有進(jìn)程信息,包括“后臺(tái)進(jìn)程”,也包括“服務(wù)器進(jìn)程”。select addr, program from v$process;
desc v$bgprocess 通過(guò)v$bgprocess視圖,我們獲得當(dāng)前系統(tǒng)中啟動(dòng)的Oracle“后臺(tái)進(jìn)程”信息。select paddr, name from v$bgprocess where paddr<>'00';
通過(guò)v$bgprocess.paddr與v$process.addr關(guān)聯(lián)起來(lái)的,關(guān)聯(lián)后查詢結(jié)果顯而易見只會(huì)有Oracle“后臺(tái)進(jìn)程”的信息
select a.paddr, a.name, a.description from v$bgprocess a, v$process b where a.paddr=b.addr;
到了這里,關(guān)于Linux系統(tǒng)下操作Oracle數(shù)據(jù)庫(kù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!