第一篇:基礎(chǔ)概念:Oracle數(shù)據(jù)庫(kù)、實(shí)例、用戶、表空間、表之間的關(guān)系
基礎(chǔ)概念:Oracle數(shù)據(jù)庫(kù)、實(shí)例、用戶、表空間、表之間的關(guān)系
數(shù)據(jù)庫(kù):
Oracle數(shù)據(jù)庫(kù)是數(shù)據(jù)的物理存儲(chǔ)。這就包括(數(shù)據(jù)文件ORA或者DBF、控制文件、聯(lián)機(jī)日志、參數(shù)文件)。其實(shí)Oracle數(shù)據(jù)庫(kù)的概念和其它數(shù)據(jù)庫(kù)不一樣,這里的數(shù)據(jù)庫(kù)是一個(gè)操作系統(tǒng)只有一個(gè)庫(kù)??梢钥醋魇荗racle就只有一個(gè)大數(shù)據(jù)庫(kù)。
實(shí)例:
一個(gè)Oracle實(shí)例(Oracle Instance)有一系列的后臺(tái)進(jìn)程(Backguound Processes)和內(nèi)存結(jié)構(gòu)(Memory Structures)組成。一個(gè)數(shù)據(jù)庫(kù)可以有n個(gè)實(shí)例。
用戶:
用戶是在實(shí)例下建立的。不同實(shí)例可以建相同名字的用戶。
表空間:
表空間是一個(gè)用來(lái)管理數(shù)據(jù)存儲(chǔ)邏輯概念,表空間只是和數(shù)據(jù)文件(ORA或者DBF文件)發(fā)生關(guān)系,數(shù)據(jù)文件是物理的,一個(gè)表空間可以包含多個(gè)數(shù)據(jù)文件,而一個(gè)數(shù)據(jù)文件只能隸屬一個(gè)表空間。數(shù)據(jù)文件(dbf、ora):
數(shù)據(jù)文件是數(shù)據(jù)庫(kù)的物理存儲(chǔ)單位。數(shù)據(jù)庫(kù)的數(shù)據(jù)是存儲(chǔ)在表空間中的,真 正是在某一個(gè)或者多個(gè)數(shù)據(jù)文件中。而一個(gè)表空間可以由一個(gè)或多個(gè)數(shù)據(jù)文件組成,一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間。一旦數(shù)據(jù)文件被加入到某個(gè)表空間后,就不 能刪除這個(gè)文件,如果要?jiǎng)h除某個(gè)數(shù)據(jù)文件,只能刪除其所屬于的表空間才行。注:
表的數(shù)據(jù),是有用戶放入某一個(gè)表空間的,而這個(gè)表空間會(huì)隨機(jī)把這些表數(shù)據(jù)放到一個(gè)或者多個(gè)數(shù)據(jù)文件中。由于oracle的數(shù)據(jù)庫(kù)不是普通的概 念,oracle是有用戶和表空間對(duì)數(shù)據(jù)進(jìn)行管理和存放的。但是表不是有表空間去查詢的,而是由用戶去查的。因?yàn)椴煌脩艨梢栽谕粋€(gè)表空間建立同一個(gè)名 字的表!這里區(qū)分就是用戶了!關(guān)系示意圖:
理解1:
Oracle數(shù)據(jù)庫(kù)可以創(chuàng)建多個(gè)實(shí)例,每個(gè)實(shí)例可以創(chuàng)建多個(gè)表空間,每個(gè)表空間下可以創(chuàng)建多個(gè)用戶(同時(shí)用戶也屬于表空間對(duì)應(yīng)的實(shí)例)和數(shù)據(jù)庫(kù)文件,用戶可以創(chuàng)建多個(gè)表(每個(gè)表隨機(jī)存儲(chǔ)在一個(gè)或多個(gè)數(shù)據(jù)庫(kù)文件中),如下圖:
理解2: 理解1MS有誤。
實(shí)例下有和,授權(quán)訪問(wèn),是管理的,經(jīng)授權(quán)在中創(chuàng)建,隨機(jī)存儲(chǔ)到不同的中。如下圖所示:
操作1:
安裝Oracle后會(huì)有默認(rèn)的實(shí)例,即ORCL。一般不創(chuàng)建多個(gè)實(shí)例,在默認(rèn)實(shí)例下創(chuàng)建表空間和用戶等。1,運(yùn)行CMD進(jìn)入DOS界面,首先輸入:sqlplus,回車;再輸入:sys/sys as sysdba,回車,即進(jìn)入“SQL〉”操作狀態(tài)。
2,輸入:CREATE TABLESPACE 表空間名稱 LOGGING DATAFILE 'c:表空間數(shù)據(jù)文件.ora' SIZE 500M autoextend on next 200m maxsize 2048m;,表空間創(chuàng)建完成。
3,輸入:CREATE USER 用戶名稱 PROFILE default IDENTIFIED BY 用戶密碼 DEFAULT TABLESPACE 授權(quán)訪問(wèn)的表空間名稱 TEMPORARY TABLESPACE temp ACCOUNT UNLOCK;,用戶創(chuàng)建完成,并授權(quán)用戶訪問(wèn)某表空間。
具體操作如下圖所示:
操作2:
創(chuàng)建表和插入數(shù)據(jù),并查詢?yōu)g覽插入的數(shù)據(jù)。1,創(chuàng)建表,輸入: create table 表名(字段名稱1 字段類型, 字段名稱2 字段類型, 字段名稱3 字段類型);,回車。
2,插入數(shù)據(jù),輸入:insert into 表名(字段1,字段2,字段3)VALUES(值1,值2,值3);,回車。3,查詢數(shù)據(jù),輸入:select * from 表名;,回車。具體操作如下圖所示:
第二篇:Oracle數(shù)據(jù)庫(kù)創(chuàng)建表空間、建立用戶、授權(quán)、還原備份
創(chuàng)建用戶一般分四步: 第一步:創(chuàng)建臨時(shí)表空間 第二步:創(chuàng)建數(shù)據(jù)表空間 第三步:創(chuàng)建用戶并制定表空間 第四步:給用戶授予權(quán)限
--Oracle創(chuàng)建臨時(shí)表空間 如果沒有指定的臨時(shí)表空間,則可以不建 CREATE TEMPORARY TABLESPACE DB_TEMP TEMPFILE 'E:Oa DataOA_TEMP.DBF'
SIZE 32M AUTOEXTEND ON
NEXT 32M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
--Oracle創(chuàng)建表空間 如果沒有指定的表空間,則可以不建 CREATE TABLESPACE DB_DATA LOGGING
DATAFILE 'E:Oa DataOA_DATA.DBF'
SIZE 32M AUTOEXTEND ON
NEXT 32M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
--創(chuàng)建用戶“oa”,密碼“oa”
CREATE USER OA IDENTIFIED BY OA ACCOUNT UNLOCK
DEFAULT TABLESPACE DB_DATA TEMPORARY TABLESPACE DB_TEMP;
--授權(quán)
GRANT CONNECT,RESOURCE,DBA TO OA;
--導(dǎo)入dmp文件到數(shù)據(jù)庫(kù) 這個(gè)必須用命令窗口來(lái)執(zhí)行,不是SQL語(yǔ)句--用戶名就是要導(dǎo)入的用戶,要導(dǎo)入給A,那用戶名就是A imp 用戶名/密碼@數(shù)據(jù)庫(kù)實(shí)例名 file=文件地址 full=y ignore=y;
exp system/123456@orcl file=oa.dmp owner=oa full=y;
使用expdp和impdp時(shí)應(yīng)該注重的事項(xiàng):
1、exp和imp是客戶端工具程序,它們既可以在客戶端使用,也可以在服務(wù)端使用。
2、expdp和impdp是服務(wù)端的工具程序,他們只能在oracle服務(wù)端使用,不能在客戶端使用。
3、imp只適用于exp導(dǎo)出的文件,不適用于expdp導(dǎo)出文件;impdp只適用于expdp導(dǎo)出的文件,而不適用于exp導(dǎo)出文件。
4、對(duì)于10g以上的服務(wù)器,使用exp通常不能導(dǎo)出0行數(shù)據(jù)的空表,而此時(shí)必須使用expdp導(dǎo)出。
一、準(zhǔn)備工作 1)、在備份目的路徑建立備份文件夾 Oracle不會(huì)自動(dòng)創(chuàng)建,務(wù)必手動(dòng)創(chuàng)建 例如:d:bak 2)、用sys用戶在oracle中創(chuàng)建邏輯目錄
--oracleBak_dir這個(gè)就是這個(gè)邏輯目錄的名字 SQL>create directory oracleBak_dir as ‘d:bak’;
3)、查看數(shù)據(jù)庫(kù)中的邏輯目錄 用來(lái)檢查上面兩步驟是否對(duì)應(yīng)OK SQL>select * from dba_directories;4)、授權(quán)用戶有對(duì)邏輯目錄的讀寫權(quán)限
SQL>grant read,write on directory oracleBak_dir to 用戶名;
二、導(dǎo)出
1)導(dǎo)出用戶 登錄的用戶需要有導(dǎo)出權(quán)限
expdp 用戶名/密碼@orcl dumpfile=expdp.dmp directory=oracleBak_dir schemas=要導(dǎo)出的用戶名;2)導(dǎo)出表
expdp用戶名/密碼@orcl tables=要導(dǎo)出的表名 dumpfile=expdp.dmp(備份文件的帶后綴全名)directory=oracleBak_dir;3)按查詢條件導(dǎo)
expdp 用戶名/密碼@orcl directory=oracleBak_dir dumpfile=expdp.dmp(備份文件的帶后綴全名)tables=表名 query=’where deptno=20’(引號(hào)內(nèi)為查詢條件);4)按表空間導(dǎo)
expdp system/manager@orcl directory=oracleBak_dir dumpfile=tablespace.dmp(備份文件的帶后綴全名)tablespaces=temp,example(表空間名稱);5)導(dǎo)整個(gè)數(shù)據(jù)庫(kù)
expdp system/manager@orcl directory=oracleBak_dir dumpfile=full.dmp full=y;
expdp system/orcl@orcl directory=oracleBak_dir dumpfile=full.dmp full=y;
三、導(dǎo)入數(shù)據(jù) 導(dǎo)入與導(dǎo)出雷同,不做解析 1)導(dǎo)入用戶(從用戶scott導(dǎo)入到用戶scott)
impdp scott/tiger@orcl directory=oracleBak_dir dumpfile=expdp.dmp schemas=scott;2)導(dǎo)入表(從scott用戶中把表dept和emp導(dǎo)入到system用戶中)
impdp system/manager@orcl directory=oracleBak_dir dumpfile=expdp.dmp tables=scott.dept,scott.emp(原用戶下.某表)remap_schema=scott:system(從用戶scott導(dǎo)入到用戶system);3)導(dǎo)入表空間 impdp system/manager@orcl directory=oracleBak_dir dumpfile=tablespace.dmp tablespaces=example;4)導(dǎo)入數(shù)據(jù)庫(kù)
impdb system/manager@orcl directory=oracleBak_dir dumpfile=full.dmp full=y;5)追加數(shù)據(jù)
impdp system/manager@orcl schemas=systemtable_exists_action
directory=dump_dir
dumpfile=expdp.dmp 終止expdp/impdp的方法:
1從dba_datapump_jobs中查job_name select * from dba_datapump_jobs;2連接到需要終止的JOB impdp U/PWD@instance_name attach=SYS_IMPORT_TABLE_01(這里attach后面的就是1查出來(lái)的job_name)3終止對(duì)應(yīng)的JOB Import> KILL_JOB 選Y
Oracle刪除用戶及表空間
以system用戶登錄,查找需要?jiǎng)h除的用戶:--查找用戶
select * from dba_users;--查找工作空間的路徑
select * from dba_data_files;
--刪除用戶
drop user 用戶名稱 cascade;--刪除表空間
drop tablespace 表空間名稱 including contents and datafiles cascade constraint;例如:刪除用戶名成為L(zhǎng)YK,表空間名稱為L(zhǎng)YK--刪除用戶,及級(jí)聯(lián)關(guān)系也刪除掉 drop user LYK cascade;--刪除表空間,及對(duì)應(yīng)的表空間文件也刪除掉
drop tablespace LYK including contents and datafiles cascade constraint;
第三篇:Oracle表空間和數(shù)據(jù)文件的關(guān)系
數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)是由數(shù)據(jù)庫(kù)的操作系統(tǒng)文件所決定,每一個(gè)Oracle數(shù)據(jù)庫(kù)是由三種類型的文件組成: 數(shù)據(jù)文件和控制文件。數(shù)據(jù)庫(kù)的文件為數(shù)據(jù)庫(kù)提供真正的物理存儲(chǔ)。
每一個(gè)Oracle數(shù)據(jù)庫(kù)有一個(gè)或多個(gè)物理的數(shù)據(jù)文件(data file)。一個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)文件包含全部數(shù)據(jù)庫(kù)數(shù)據(jù)。邏輯數(shù)據(jù)庫(kù)結(jié)構(gòu)(如表,索引等)的數(shù)據(jù)物理地存儲(chǔ)在數(shù)據(jù)庫(kù)地?cái)?shù)據(jù)文件中。數(shù)據(jù)文件通常為*.dbf格式,例如: userCIMS.dbf.數(shù)據(jù)文件有一下特征:①、一個(gè)數(shù)據(jù)文件僅與一個(gè)數(shù)據(jù)庫(kù)聯(lián)系;②、一旦建立, 數(shù)據(jù)文件只增不減;③、一個(gè)表空間(數(shù)據(jù)庫(kù)存儲(chǔ)地邏輯單位)由一個(gè)或多個(gè)數(shù)據(jù)文件組成。
其次, 我們?cè)賮?lái)敘述一下Oracle的邏輯結(jié)構(gòu): Oracle的邏輯結(jié)構(gòu)包括表空間(tablespace), 段(segment), 數(shù)據(jù)塊(data block)以及模式對(duì)象(schema object)。
Oracle數(shù)據(jù)庫(kù)在邏輯上是由多個(gè)表空間組成的, 表空間在物理上包含一個(gè)或者多個(gè)數(shù)據(jù)文件。而數(shù)據(jù)文件大小是塊大小的整數(shù)倍;表空間中存儲(chǔ)的對(duì)象叫段, 比如數(shù)據(jù)段, 索引段和回退段。段由區(qū)組成, 區(qū)是磁盤分配的最小單位。段的增大是通過(guò)增加區(qū)的個(gè)數(shù)來(lái)實(shí)現(xiàn)的。每個(gè)區(qū)的大小是數(shù)據(jù)塊大小的整數(shù)倍,取得大小可以不同;數(shù)據(jù)塊是數(shù)據(jù)庫(kù)中的最小的I/O單位,同時(shí)也是內(nèi)存數(shù)據(jù)緩沖區(qū)的單位,及數(shù)據(jù)文件存儲(chǔ)空間單位。塊的大小由參數(shù)DB_BLOCK_SIZE設(shè)置,其值影設(shè)置為操作系統(tǒng)塊大小的整數(shù)倍。
⑴ 表空間(TABLESPACE)表空間是數(shù)據(jù)庫(kù)中最大的邏輯單位,每一個(gè)表空間由一個(gè)或多個(gè)數(shù)據(jù)文件組成,一個(gè)數(shù)據(jù)文件只能與一個(gè)表空間相聯(lián)系。每一個(gè)數(shù)據(jù)庫(kù)都有一個(gè)SYSTEM表空間,該表空間是在數(shù)據(jù)庫(kù)創(chuàng)建或數(shù)據(jù)庫(kù)安裝時(shí)自動(dòng)創(chuàng)建的,用于存儲(chǔ)系統(tǒng)的數(shù)據(jù)字典表,程序系統(tǒng)單元,過(guò)程函數(shù),包和觸發(fā)器等,也可用于存儲(chǔ)用戶數(shù)據(jù)表,索引對(duì)象。表空間具有在線(online)和離線(offline)屬性,可以將除SYSTEM以外的任何表空間置為離線。⑵ 段(SEGMENT)數(shù)據(jù)庫(kù)的段可以分為4類:數(shù)據(jù)段,索引段,回退段和臨時(shí)段。⑶ 區(qū)
區(qū)是磁盤空間分配的最小單位。磁盤按區(qū)劃分,每次至少分配一個(gè)區(qū)。區(qū)存儲(chǔ)在段中,它由連續(xù)的數(shù)據(jù)塊組成。⑷ 數(shù)據(jù)塊
數(shù)據(jù)塊是數(shù)據(jù)庫(kù)中最小的數(shù)據(jù)組織單位與管理單位,是數(shù)據(jù)庫(kù)文件磁盤存儲(chǔ)空間單位,也是數(shù)據(jù)庫(kù)I/O的最小單位,數(shù)據(jù)塊大小由DB_BLOCK_SIZE參數(shù)決定,不同的ORACLE版本BD_BLOCK_SIZE的默認(rèn)值是不同的。查詢DB_BLOCK_SIZE可以使用sql:
select name, value from v$parameter where name = 'db_block_size';⑸ 模式對(duì)象
模式對(duì)象是一種應(yīng)用,包括:表、聚簇、試圖、索引序列生成器、同義詞、哈希、程序單元、數(shù)據(jù)庫(kù)鏈的等。
最后說(shuō)一下ORACLE的用戶、表空間和數(shù)據(jù)文件的關(guān)系:
一個(gè)用戶可以使用一個(gè)或多個(gè)表空間,一個(gè)表空間也可以提供多個(gè)用戶使用。用戶和表空間沒有隸屬關(guān)系,表空間是一個(gè)用來(lái)管理數(shù)據(jù)存儲(chǔ)的邏輯概念,表空間只是和數(shù)據(jù)文件發(fā)生關(guān)系,數(shù)據(jù)文件是物理的。一個(gè)表空間可以包含多個(gè)數(shù)據(jù)文件,而一個(gè)數(shù)據(jù)文件只能隸屬于一個(gè)表空間。
總結(jié)一下:解釋數(shù)據(jù)庫(kù)、表空間、數(shù)據(jù)文件、表、數(shù)據(jù)的最好辦法就是想象一個(gè)裝滿東西的柜子。數(shù)據(jù)庫(kù)其實(shí)就是柜子,柜中的抽屜是表空間,抽屜中的文件夾是數(shù)據(jù)文件,數(shù)據(jù)夾中的紙是表,寫在紙上的信息就是數(shù)據(jù)。
第四篇:oracle 數(shù)據(jù)文件、表空間、日志文件、控制文件數(shù)據(jù)庫(kù)管理
實(shí)驗(yàn)四 oracle 數(shù)據(jù)庫(kù)管理
一、試驗(yàn)?zāi)康?/p>
掌握對(duì)數(shù)據(jù)文件、表空間、日志文件、控制文件的常用命令,作為DBA的必要準(zhǔn)備。
二、實(shí)驗(yàn)內(nèi)容
2.1 數(shù)據(jù)文件的管理
(1)在安裝完畢之后,在INITsid.ORA參數(shù)文件有一個(gè)DB_FILES 參數(shù),用于設(shè)置當(dāng)前實(shí)例的數(shù)據(jù)外文件的個(gè)數(shù)。如: db_files = 80 如果在INITsid.ORA文件沒有該參數(shù),則可以用下面查詢語(yǔ)句從視圖中查到。如: SQL> col name for a20 SQL> col value for a50 SQL> set lin 100 SQL> select name,value from v$parameter where name = 'db_files';NAME VALUE---------------------------------------db_files 1024(2)行命令建立表空間:
例1 CREATE TABLESPACE user_stu DATAFILE 'h:/oracle/oradata/orcl/user_stu.dat' SIZE 20M DEFAULT STORAGE(INITIAL 10K NEXT 50K MINEXTENTS 1 MAXEXTENTS 99 PCTINCREASE 10)ONLINE;例2:建立一個(gè)新的表空間,具有兩個(gè)數(shù)據(jù)文件: CREATE TABLESPACE CRM_TAB
DATAFILE 'h:/oracle/oradata/orcl/crm01.dbf' size 10 MB,'h:/oracle/oradata/orcl/crm02.dbf' size 10 MB;(3)對(duì)一個(gè)已存在的表空間追加新數(shù)據(jù)文件: 例1 ALTER TABLESPACE user_stu
Add datafile 'H:/oracle/oradata/orcl/user_stu01.dbf' size 30M;例2 為表空間增加數(shù)據(jù)文件 ALTER TABLESPACE users ADD DATAFILE 'userora1.dbf ' SIZE 10M;(4)數(shù)據(jù)文件更名
ALTER TABLESPACE users RENAME DATAFILE? 'filename1', 'filename2' TO 'filename3', 'filename4';(5)變更數(shù)據(jù)文件大小 在創(chuàng)建表空間時(shí),可以將表空間說(shuō)明為自動(dòng)擴(kuò)展或固定大小。因而管理員的一項(xiàng)工作就是查看系統(tǒng)所有的表空間對(duì)應(yīng)的數(shù)據(jù)文件情況。看是否為自動(dòng)擴(kuò)展。如: SQL> col tablespace_name for a12 SQL> col file_name for a48 SQL> select tablespace_name,file_name,AUTOEXTENSIBLE ,bytes from dba_data_files
(6)數(shù)據(jù)文件的自動(dòng)擴(kuò)展與調(diào)整。重新調(diào)整數(shù)據(jù)文件大小的命令如下: ALTER DATABASE DATAFILE [datafile_name] RESIZE [new_size];
當(dāng)我們發(fā)現(xiàn)數(shù)據(jù)文件過(guò)大而不可能用完時(shí),可以用上面命令將數(shù)據(jù)文件調(diào)小。對(duì)于設(shè)置數(shù)據(jù)文件的自動(dòng)擴(kuò)展問(wèn)題,可用下面命令來(lái)達(dá)到: ALTER DATABASE DATAFILE [ file_spec ] AUTOEXTEND ON NEXT [increment_size] MAXSIZE [max_size,UNLIMITED]; 如:
ALTER DATABASE DATAFILE 'H:ORACLEORADATAORCLUSER_STU01.DBF' AUTOEXTEND ON NEXT 10m MAXSIZE 60M;(7)行命令修改表空間:
ALTER TABLESPACE USER_STU ONLINE;(8)ALTER TABLESPACE accounting OFFLINE NORMAL;(9)行命令刪除表空間:
DROP TABLESPACE 表空間名 INCLUDING CONTENTS CASCADE CONSTRAINTS(10)、與數(shù)據(jù)文件有關(guān)的視圖
select file_name from dba_data_files;select * from v$datafile;DBA_DATA_FILES DBA_EXTENTS DBA_FREE_SPACE V$DATAFILE V$DATAFILE_HEADER(11)、為了保證表空間的可用,除了掌握表空間的創(chuàng)建外,還應(yīng)該查看dba_free_space中表空間的信息,以確保系統(tǒng)正常運(yùn)行。一般管理員應(yīng)該關(guān)心的內(nèi)容有:表空間共有多少個(gè);總共有多少自由空間;最大的自由空間是什么;下面例子是一個(gè)經(jīng)常使用的腳本,可以查出數(shù)據(jù)文件和表空間的可用情況。clear buffer clear columns clear breaks column a1 heading 'Tablespace' format a15 column a2 heading 'data File' format a45 column a3 heading 'Total|Space' format 999,999.99 column a4 heading 'Free|Space' format 999,999.99 column a5 heading 'Free|perc' format 999,999.99 break on a1 on report compute sum of a3 on a1 compute sum of a4 on a1 compute sum of a3 on report compute sum of a4 on report set linesize 120 select a.tablespace_name a1, a.file_name a2, a.avail a3, nvl(b.free,0)a4, nvl(round(((free/avail)*100),2),0)a5 from(select tablespace_name, substr(file_name,1,45)file_name, file_id, round(sum(bytes/(1024*1024)),3)avail from sys.dba_data_files group by tablespace_name, substr(file_name,1,45), file_id)a,(select tablespace_name, file_id, round(sum(bytes/(1024*1024)),3)free from sys.dba_free_space group by tablespace_name, file_id)b where a.file_id = b.file_id(+)order by 1, 2;(12)查詢是否存在表的擴(kuò)展超出表空間可用大小 一般在系統(tǒng)使用較長(zhǎng)時(shí)間后,表空間的連續(xù)塊被多次的修改與刪除等操作后出現(xiàn)了許多的不連續(xù)的塊(叫碎片)。這樣就有可能出現(xiàn)表的擴(kuò)展所需要的連續(xù)塊不能滿足的情況。為了避免這樣的情況發(fā)生而導(dǎo)致擴(kuò)展失敗,管理員要經(jīng)常查詢系統(tǒng)的表空間情況。下面就是這樣的一個(gè)腳本:
Col segment_name for a20 Select segment_name, segment_type, owner, a.tablespace_name tablespace, Initial_extent, next_extent, pct_increase,b.bytes max_bytes From dba_segments a,(select tablespace_name, max(bytes)bytes from dba_free_space group by tablespace_name)b where a.tablespace_name=b.tablespace_name and next_extent > b.bytes;(13)查詢表空間自由、最大及碎片
其實(shí),平常管理最關(guān)系就是表空間的總量、最大字節(jié)、使用多少、碎片多少等。下面腳本可以查詢出所有表空間的自由空間、總空間數(shù)、已用空間、自由百分比及最大塊的字節(jié)數(shù)。set pau off
col free heading 'Free(Mb)' format 99999.9 col total heading 'Total(Mb)' format 999999.9 col used heading 'Used(Mb)' format 99999.9 col pct_free heading 'Pct|Free' format 99999.9 col largest heading 'Largest(Mb)' format 99999.9 compute sum of total on report compute sum of free on report compute sum of used on report break on report select substr(a.tablespace_name,1,13)tablespace, round(sum(a.total1)/1024/1024, 1)Total, round(sum(a.total1)/1024/1024, 1)-round(sum(a.sum1)/1024/1024, 1)used, round(sum(a.sum1)/1024/1024, 1)free, round(sum(a.sum1)/1024/1024, 1)*100/round(sum(a.total1)/1024/1024, 1)pct_free, round(sum(a.maxb)/1024/1024, 1)largest, max(a.cnt)fragment from(select tablespace_name, 0 total1, sum(bytes)sum1, max(bytes)MAXB, count(bytes)cnt from dba_free_space group by tablespace_name union select tablespace_name, sum(bytes)total1, 0, 0, 0 from dba_data_files group by tablespace_name)a group by a.tablespace_name 2.2 日志文件的管理
(0)日志查詢
select group#,bytes from v$log;? select group#,bytes from v$logfile;
(1)實(shí)現(xiàn)強(qiáng)行的日志切換 Alter system switch logfile;(2)檢測(cè)點(diǎn)(checkpoint)
Oracle為了在出現(xiàn)故障后能退回去重演原來(lái)的信息,就需要一個(gè)叫開始點(diǎn)。在這個(gè)開始點(diǎn)時(shí)刻,數(shù)據(jù)和事務(wù)是已知的。這樣的開始點(diǎn)就叫檢測(cè)點(diǎn)。在Oracle里,只要檢查點(diǎn)一到(出現(xiàn))。Oracle就強(qiáng)行將當(dāng)前的SGA中的redo區(qū)的改動(dòng)過(guò)的塊寫入重做日志文件中。這個(gè)步驟完成后,在重做日志文件中放入一個(gè)特殊的檢測(cè)點(diǎn)標(biāo)志記錄。如果在下一個(gè)檢測(cè)點(diǎn)完成前出現(xiàn)失敗,恢復(fù)操作進(jìn)程就會(huì)在日志文件和數(shù)據(jù)文件前一個(gè)檢測(cè)點(diǎn)同步(改回去)。檢測(cè)點(diǎn)檢查完成后,對(duì)數(shù)據(jù)塊的任何改動(dòng)都記錄在其檢測(cè)點(diǎn)標(biāo)志后寫入重做日志項(xiàng)中。因此,恢復(fù)也就只能從最近的檢測(cè)點(diǎn)標(biāo)志記錄開始。
Oracle在INITsid.ORA文件中給出LOG_CHECKPOINT_INTERVAL參數(shù)可以設(shè)置檢測(cè)點(diǎn)的數(shù)目。比如 日志文件大小為1000塊,而設(shè)置檢查點(diǎn)間隔LOG_CHECKPOINT_INTERVAL為250,則文件寫達(dá)到 1/
4、2/
4、3/4及4/4時(shí)產(chǎn)生檢測(cè)點(diǎn)(250塊、500塊、750塊和1000塊處)??捎孟旅婷顏?lái)查日志文件大?。?SQL> select group#,bytes from v$log;show parameter log_checkpoint_interval(3)添加日志組
建立一個(gè)新組4,組內(nèi)有兩個(gè)成員 ALTER DATABASE ADD LOGFILE GROUP 4('H:/oracle/oradata/orcl/redo0401.log', 'H:/oracle/oradata/orcl/redo0402.log')size 10m;===當(dāng)添加一個(gè)日志組時(shí),可以不給出組號(hào),有系統(tǒng)自動(dòng)分配一個(gè)組號(hào)=== ALTER DATABASE ADD LOGFILE('H:/oracle/oradata/orcl/redo0501.log', 'H:/oracle/oradata/orcl/redo0502.log')size 10m;此時(shí)添加的組號(hào)為5
(4)為日志組增加成員 ALTER DATABASE ADD LOGFILE MEMBER 'log22.log' TO GROUP 2;===添加成員時(shí),可以不給定成員的大小,因?yàn)閛racle要求組內(nèi)的所有成員的大小一律相等。
(5)如果將一個(gè)日志成員從一個(gè)硬盤移到另一個(gè)硬盤,就需要重新命名日志成員名字。需要進(jìn)行下面步驟:
1. 關(guān)閉數(shù)據(jù)庫(kù),并進(jìn)行完全備份;
2. 使用操作系統(tǒng)命令拷貝原來(lái)的日志文件到新的地方; 3. 用startup mount 啟動(dòng)數(shù)據(jù)庫(kù); 4. 用ALTER DATABASE RENAME FILE '
ALTER DATABASE RENAME FILE 'filename1', 'filename2' TO 'filename3', 'filename4';
(6)日志刪除
a.刪除日志組成員:
在下面情況下可能需要?jiǎng)h除重做日志文件,如日志文件個(gè)數(shù)太多(超出需要);日志文件的大小不一致等。這樣的情況可以刪除日志組成員。b.當(dāng)日志組損壞時(shí),就刪除日志組,但必須滿足:
a)刪除一個(gè)日志組后,系統(tǒng)中至少還有兩個(gè)其它的日志組; b)被刪除的日志組必須是不需要存檔; c)不是正在使用的日志組。刪除日志文件的語(yǔ)法:
ALTER DATABASE database_name DROP LOGFILE GROUP group_number | file_name |(file_name,file_name(,...))刪除日志成員的語(yǔ)法:
ALTER DATABASE database_name DROP LOGFILE MEMBER file_name;c.聯(lián)機(jī)重做日志的緊急替換:
當(dāng)一個(gè)重做日志組偶而被損壞使數(shù)據(jù)庫(kù)不能繼續(xù)使用時(shí),不能直接刪除它們,而是要用一個(gè)干凈的文件或一組成員去替代這個(gè)損壞的日志組。聯(lián)機(jī)重做日志的緊急替換命令語(yǔ)法如下: ALTER DATABASE database_name CLEAR[UNARCHIVED] LOGFILE group_identifier [UNRECOVERABLE DATAFILE] 如果該文件正在等待存檔(歸檔模式),就需要UNARCHIVED。
如果需要脫機(jī)恢復(fù)一個(gè)數(shù)據(jù)文件,就用UNRECOVERABLE DATAFILE。d.了解重做日志的當(dāng)前狀態(tài): V$LOGFILE V$LOG V$THREAD V$LOG_HISTORY e.例子:
刪除一個(gè)組3:
ALTER DATABASE DROP LOGFILE GROUP 3;刪除一個(gè)成員:
ALTER DATABASE DROP? LOGFILE MEMBER '/orant/oradata'mydb02'redo02.log';4.了解重做日志的當(dāng)前狀態(tài)的視圖主要有: V$LOGFILE V$LOG V$THREAD V$LOG_HISTORY 5.例子:
察看是否歸檔
ARCHIVE? LOG? LIST 日志歸檔
alter database noarchivelog;
3、控制文件的管理(1)關(guān)于控制文件
控制文件存放有數(shù)據(jù)庫(kù)的結(jié)構(gòu)信息,包括數(shù)據(jù)文件、日志文件。控制文件是一個(gè)二進(jìn)制文件,它是在數(shù)據(jù)庫(kù)建立時(shí)自動(dòng)被建立??刂莆募梢栽诋?dāng)你改變文件名或移動(dòng)文件時(shí)而被更新。在任何時(shí)候,你都不能編輯控制文件??刂莆募膬?nèi)容包括:
? 數(shù)據(jù)庫(kù)名字(控制文件只能屬于一個(gè)數(shù)據(jù)庫(kù))。? 數(shù)據(jù)庫(kù)建立時(shí)的郵戳。
? 數(shù)據(jù)文件-名字,位置及聯(lián)機(jī)/脫機(jī)。? 重做日志文件-名字及位置。? 表空間名字。? 當(dāng)前日志序列號(hào)。? 最近檢查點(diǎn)信息。
? 恢復(fù)管理器信息(RMAN)。(2)控制文件信息
在spfile.ora的配置文件中 有:
control_files =(“/home/oracle/app/oracle/oradata/s450/control01.ctl”, “/home/oracle/app/oracle/oradata/s450/control02.ctl”, “/home/oracle/app/oracle/oradata/s450/control03.ctl”)(3)查詢控制文件的信息
show parameters;select * from v$controlfile;desc V$CONTROLFILE_RECORD_SECTION v$datafile db_data_files v$logfile v$log v$controlfile show parameter control_files
其中,RECORD_SIZE NUMBER 記錄字節(jié)大小 RECORDS_TOTAL NUMBER 段的記錄數(shù)
RECORDS_USED NUMBER 段中已使用的記錄數(shù) FIRST_INDEX NUMBER 第一個(gè)記錄索引位置 LAST_INDEX NUMBER 最后一個(gè)記錄索引位置 LAST_RECID NUMBER 最后一個(gè)記錄ID號(hào)
select * from V$CONTROLFILE_RECORD_SECTION;7.6.4 控制文件信息的更改
需要在spfile.ora中做出相應(yīng)的更改。建立控制文件的步驟 1.建立控制文件準(zhǔn)備。
必須有數(shù)據(jù)文件(查DBA_DATA_FILES數(shù)據(jù)字典)、日志文件(查V$LOGFILE數(shù)據(jù)字典)的詳細(xì)列表。下面是創(chuàng)建控制文件的命令:
CREATE CONTROLFILE SET DATABASE “ORACLE” NORESETLOGS NOARACHIVELOG MAXLOGFILES 32 MAXLOGMEMBERS 2 MAXDATAFILES 32 MAXINSTANCES 1 MAXLOGHISTORY 1630 LOGFILE GROUP 1 'C:ORACLEDATABASELOG1ORCL.LOG' SIZE 200K, GROUP 2 'C:ORACLEDATABASELOG2ORCL.LOG' SIZE 200K, DATAFILE 'C:ORACLEDATABASESYS1ORCL.ORA', 'C:ORACLEDATABASEUSER1ORCL.ORA', 'C:ORACLEDATABASERBS1ORCL.ORA', 'C:ORACLEDATABASETMP1ORCL.ORA', 'C:ORACLEDATABASEAPPDATA1.ORA', 'C:ORACLEDATABASEAPPINDX1.ORA',;在例子中,參數(shù)選件與 CREATE DATABASE類似。NORESETLOGS 指定聯(lián)機(jī)的日志文件不要重新設(shè)置。2. 關(guān)閉數(shù)據(jù)庫(kù)。
3. 用NOMOUNT選件啟動(dòng)數(shù)據(jù)庫(kù),記住,安裝數(shù)據(jù)庫(kù),Oracle需要打開控制文件。4. 用類似上面建立新的控制文件。并在INITsid.ORA參數(shù)文件中指定。5. 使用ALTER DATABASE OPEN命令打開數(shù)據(jù)庫(kù)。6. 關(guān)閉數(shù)據(jù)庫(kù)并備份數(shù)據(jù)庫(kù)。
提示:如果你的數(shù)據(jù)庫(kù)正常,則可以用ALTER DATABASE BACKUP CONTROLFILE TO TRACE 命令來(lái)產(chǎn)生一個(gè)CREATE CONTROLFILE 的命令。該命令產(chǎn)生后被寫到跟蹤文件中。請(qǐng)參考INITsid.OAR的USER_DUMP_DEST所指的目錄找到跟蹤文件,它就在跟蹤文件中。
建立好控制文件后,就要確定如何來(lái)補(bǔ)救被丟失的數(shù)據(jù)文件,可以從V$DATAFILE視圖來(lái)查到丟失的數(shù)據(jù)文件,這些數(shù)據(jù)文件的名字為MISSINGnnnn。如果你建立的控制文件帶有RESETLOGS選件,則丟失的數(shù)據(jù)文件就不能加回?cái)?shù)據(jù)庫(kù)中。如果你建立的控制文件帶有NORESETLOGS選件,則丟失的數(shù)據(jù)文件可以由數(shù)據(jù)庫(kù)的介質(zhì)恢復(fù)被加回?cái)?shù)據(jù)庫(kù)中。當(dāng)數(shù)據(jù)庫(kù)啟動(dòng)后可以 用下面命令進(jìn)行備份:
ALTER DATABASE BACKUP CONTROL FILE TO '
可以從視圖V$CONTROLFILE中查到控制文件的信息,status字段表示控制文件的狀態(tài),一般總是為空。如:
SQL> select * from v$controlfile;另外V$CONTROLFILE_RECORD_SECTION 視圖存儲(chǔ)控制文件所記錄的信息。它的結(jié)構(gòu)如下:
SQL> desc V$CONTROLFILE_RECORD_SECTION
第五篇:Oracle建表空間各種語(yǔ)句
在創(chuàng)建用戶之前,先要?jiǎng)?chuàng)建表空間:
其格式為:格式: create tablespace 表間名 datafile '數(shù)據(jù)文件名' size 表空間大小;如:
SQL> create tablespace news_tablespace datafile 'F:oracleproduct10.1.0oradatanewsnews_data.dbf' size 500M;其中'news_tablespace'是你自定義的表空間名稱,可以任意取名;'F:oracleproduct10.1.0oradatanewsnews_data.dbf'是數(shù)據(jù)文件的存放位置,'news_data.dbf'文件名也是任意??;'size 500M'是指定該數(shù)據(jù)文件的大小,也就是表空間的大小。
現(xiàn)在建好了名為'news_tablespace'的表空間,下面就可以創(chuàng)建用戶了:
其格式為:格式: create user 用戶名 identified by 密碼 default tablespace 表空間表;如:
SQL> create user news identified by news default tablespace news_tablespace;默認(rèn)表空間'default tablespace'使用上面創(chuàng)建的表空間。
接著授權(quán)給新建的用戶:
SQL> grant connect,resource to news;--表示把 connect,resource權(quán)限授予news用戶
SQL> grant dba to news;--表示把 dba權(quán)限授予給news用戶
授權(quán)成功。
ok!數(shù)據(jù)庫(kù)用戶創(chuàng)建完成,現(xiàn)在你就可以使用該用戶創(chuàng)建數(shù)據(jù)表了!1.建表空間
create tablespace hoteldata datafile 'D:javaOracleproduct10.1.0oradatazznorclhoteldata.dbf'size 200m autoextend on next 10m maxsize unlimited;2.建用戶 create user hotel identified by hotel default tablespace hoteldata account unlock;//identified by 后面的是密碼,前面的是用戶名 3.用戶授權(quán)
grant resource,connect,RECOVERY_CATALOG_OWNER to hotel;grant create table to hotel;alter user hotel quota unlimited ON OSDB;alter user hotel default tablespace hoteldata;4.刪除表空間
DROP TABLESPACE hoteldata INCLUDING CONTENTS AND DATAFILES;5.刪除用戶
DROP USER hotel CASCADE 6.刪除表的注意事項(xiàng)
在刪除一個(gè)表中的全部數(shù)據(jù)時(shí),須使用TRUNCATE TABLE 表名;因?yàn)橛肈ROP TABLE,DELETE * FROM 表名時(shí),TABLESPACE表空間該表的占用空間并未釋放,反復(fù)幾次DROP,DELETE操作后,該TABLESPACE上百兆的空間就被耗光了。oracle sqlplus腳本建庫(kù)總結(jié)(原創(chuàng))******************************************************************/--查詢表空間參數(shù)
select tablespace_name,min_extents,max_extents,pct_increase,status from dba_tablespaces;--查詢數(shù)據(jù)文件信息
--autoextensible數(shù)據(jù)庫(kù)已滿后是否自動(dòng)擴(kuò)展
select tablespace_name,bytes,autoextensible,file_name from dba_data_files;/******************************************************************/--創(chuàng)建表空間
--一般信息
--DATAFILE:數(shù)據(jù)文件目錄--存儲(chǔ)
--AUTOEXTEND:數(shù)據(jù)文件滿后自動(dòng)擴(kuò)展--ON NEXT:增量
--MAXSIZE UNLIMITED:最大容量無(wú)限制--SIZE:文件大小--存儲(chǔ)
--啟用事件記錄:LOGGING為生成從做日志并可恢復(fù),NOLOGGING為快速更新不生成日志且不可恢復(fù)
--MANAGEMENT LOCAL:本地管理--缺?。鹤詣?dòng)分配
--UNIFORM SIZE:統(tǒng)一分配
--MANAGEMENT DICTIONARY:在字典中管理--DEFAULT STORAGE:覆蓋默認(rèn)區(qū)值--INITIAL:初始大小--NEXT :下一個(gè)大小--MINEXTENTS:最小數(shù)量
--MAXEXTENTS UNLIMITED :最大數(shù)量不限制--PCTINCREASE:增量,單位“%”--MINIMUM EXTENT:最小區(qū)大小 CREATE TABLESPACE “TEST” NOLOGGING DATAFILE 'G:ORACLEORADATAMYORACLETEST.ora' SIZE 5M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL UNIFORM SIZE 12K;--最好寫成相對(duì)路徑,免得出錯(cuò) CREATE TABLESPACE “TEST” NOLOGGING DATAFILE '../DATABASE/TEST.ora' SIZE 5M REUSE--建議用'../oradata/TEST.ora' AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL UNIFORM SIZE 12K;CREATE TABLESPACE “TEST” LOGGING DATAFILE 'G:ORACLEORADATAMYORACLETEST.ora' SIZE 5M EXTENT MANAGEMENT DICTIONARY DEFAULT STORAGE(INITIAL 1K NEXT 2K MINEXTENTS 5 MAXEXTENTS 67 PCTINCREASE 4)MINIMUM EXTENT 3K;/******************************************************************/--增加表空間, 注意這里test.ora1不能與原表空間文件名稱相同--添加一個(gè)新的大小為5M數(shù)據(jù)庫(kù)文件test.ora1 alter tablespace mytesttablespace add datafile 'c:testtest.ora1' size 5M;/******************************************************************/--修改表空間數(shù)據(jù)庫(kù)文件屬性,myoracle為sid--將test.ora1數(shù)據(jù)庫(kù)文件改為3M,其中resize可以是ONLINE, OFFLINE, RESIZE, AUTOEXTEND 或 END/DROP alter database myoracle datafile 'c:testtest.ora1' resize 3M;alter database myoracle datafile '$ORACLE_HOME/oradata/undo102.dbf' autoextend on next 10m maxsize 500M;/******************************************************************/ /*刪除表空間
語(yǔ)法:drop tablespace tablespace_name including contents and datafiles;刪除表空間時(shí)要系統(tǒng)不會(huì)刪除表空間數(shù)據(jù)庫(kù)文件,要徹底刪除要手動(dòng)刪除 */ drop tablespace mytesttablespace including contents and datafiles;/******************************************************************/--創(chuàng)建用戶--命令:
--CREATE USER 名稱 IDENTIFIED BY 口令 DEFAULT TABLESPACE “默認(rèn)表空間名” TEMPORARY TABLESPACE “TEMP” ACCOUNT UNLOCK--一般屬性
--DEFAULT TABLESPACE :默認(rèn)表空間名
--TEMPORARY TABLESPACE :臨時(shí)表空間名,默認(rèn)TEMP--ACCOUNT :用戶狀態(tài),默認(rèn)UNLOCK 未鎖定;LOCK 鎖定 CREATE USER “TEST” PROFILE “DEFAULT” IDENTIFIED BY “test” DEFAULT TABLESPACE “TEST” TEMPORARY TABLESPACE “TEMP” ACCOUNT UNLOCK;--可以寫成
CREATE USER “TEST” PROFILE “DEFAULT” IDENTIFIED BY “test” DEFAULT TABLESPACE “TEST”;/******************************************************************/--用戶授權(quán)
--grant “connect,resource,dba” to “someuser” with admin option;--WITH ADMIN OPTION :管理選項(xiàng)--授予usertest DBA權(quán)限
grant dba to “usertest” with admin option;--取消授權(quán)
--REVOKE “RESOURCE” FROM “SCOTT”;/******************************************************************/--建表
--在usertest方案下建表,注意表名不能用關(guān)鍵字,否則報(bào)錯(cuò)ORA-00903: 表名無(wú)效
--語(yǔ)法:
--create table [schema.]
--data type:表示字段的數(shù)據(jù)類型
--default
CREATE TABLE “TEST”.“TEST”(“ID” NUMBER(10)DEFAULT 0 PRIMARY KEY, “NAME” VARCHAR2(20)NOT NULL, “INFO” VARCHAR2(1000))TABLESPACE “TEST”;/******************************************************************/--插入數(shù)據(jù)--語(yǔ)法:
--INSERT INTO tablename(column1,column2,…)VALUES(expression1,expression2,…);
INSERT INTO “TEST”.“TEST”(“ID” ,“NAME” ,“INFO”)VALUES(1 ,'testname' ,'');--也可以寫成
INSERT INTO “TEST”.“TEST” VALUES(1 ,'testname' ,'');/******************************************************************/