第一篇:基礎概念:Oracle數據庫、實例、用戶、表空間、表之間的關系
基礎概念:Oracle數據庫、實例、用戶、表空間、表之間的關系
數據庫:
Oracle數據庫是數據的物理存儲。這就包括(數據文件ORA或者DBF、控制文件、聯機日志、參數文件)。其實Oracle數據庫的概念和其它數據庫不一樣,這里的數據庫是一個操作系統只有一個庫。可以看作是Oracle就只有一個大數據庫。
實例:
一個Oracle實例(Oracle Instance)有一系列的后臺進程(Backguound Processes)和內存結構(Memory Structures)組成。一個數據庫可以有n個實例。
用戶:
用戶是在實例下建立的。不同實例可以建相同名字的用戶。
表空間:
表空間是一個用來管理數據存儲邏輯概念,表空間只是和數據文件(ORA或者DBF文件)發生關系,數據文件是物理的,一個表空間可以包含多個數據文件,而一個數據文件只能隸屬一個表空間。數據文件(dbf、ora):
數據文件是數據庫的物理存儲單位。數據庫的數據是存儲在表空間中的,真 正是在某一個或者多個數據文件中。而一個表空間可以由一個或多個數據文件組成,一個數據文件只能屬于一個表空間。一旦數據文件被加入到某個表空間后,就不 能刪除這個文件,如果要刪除某個數據文件,只能刪除其所屬于的表空間才行。注:
表的數據,是有用戶放入某一個表空間的,而這個表空間會隨機把這些表數據放到一個或者多個數據文件中。由于oracle的數據庫不是普通的概 念,oracle是有用戶和表空間對數據進行管理和存放的。但是表不是有表空間去查詢的,而是由用戶去查的。因為不同用戶可以在同一個表空間建立同一個名 字的表!這里區分就是用戶了!關系示意圖:
理解1:
Oracle數據庫可以創建多個實例,每個實例可以創建多個表空間,每個表空間下可以創建多個用戶(同時用戶也屬于表空間對應的實例)和數據庫文件,用戶可以創建多個表(每個表隨機存儲在一個或多個數據庫文件中),如下圖:
理解2: 理解1MS有誤。
實例下有和,授權訪問,是管理的,經授權在中創建,隨機存儲到不同的中。如下圖所示:
操作1:
安裝Oracle后會有默認的實例,即ORCL。一般不創建多個實例,在默認實例下創建表空間和用戶等。1,運行CMD進入DOS界面,首先輸入:sqlplus,回車;再輸入:sys/sys as sysdba,回車,即進入“SQL〉”操作狀態。
2,輸入:CREATE TABLESPACE 表空間名稱 LOGGING DATAFILE 'c:表空間數據文件.ora' SIZE 500M autoextend on next 200m maxsize 2048m;,表空間創建完成。
3,輸入:CREATE USER 用戶名稱 PROFILE default IDENTIFIED BY 用戶密碼 DEFAULT TABLESPACE 授權訪問的表空間名稱 TEMPORARY TABLESPACE temp ACCOUNT UNLOCK;,用戶創建完成,并授權用戶訪問某表空間。
具體操作如下圖所示:
操作2:
創建表和插入數據,并查詢瀏覽插入的數據。1,創建表,輸入: create table 表名(字段名稱1 字段類型, 字段名稱2 字段類型, 字段名稱3 字段類型);,回車。
2,插入數據,輸入:insert into 表名(字段1,字段2,字段3)VALUES(值1,值2,值3);,回車。3,查詢數據,輸入:select * from 表名;,回車。具體操作如下圖所示:
第二篇:Oracle數據庫創建表空間、建立用戶、授權、還原備份
創建用戶一般分四步: 第一步:創建臨時表空間 第二步:創建數據表空間 第三步:創建用戶并制定表空間 第四步:給用戶授予權限
--Oracle創建臨時表空間 如果沒有指定的臨時表空間,則可以不建 CREATE TEMPORARY TABLESPACE DB_TEMP TEMPFILE 'E:Oa DataOA_TEMP.DBF'
SIZE 32M AUTOEXTEND ON
NEXT 32M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
--Oracle創建表空間 如果沒有指定的表空間,則可以不建 CREATE TABLESPACE DB_DATA LOGGING
DATAFILE 'E:Oa DataOA_DATA.DBF'
SIZE 32M AUTOEXTEND ON
NEXT 32M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
--創建用戶“oa”,密碼“oa”
CREATE USER OA IDENTIFIED BY OA ACCOUNT UNLOCK
DEFAULT TABLESPACE DB_DATA TEMPORARY TABLESPACE DB_TEMP;
--授權
GRANT CONNECT,RESOURCE,DBA TO OA;
--導入dmp文件到數據庫 這個必須用命令窗口來執行,不是SQL語句--用戶名就是要導入的用戶,要導入給A,那用戶名就是A imp 用戶名/密碼@數據庫實例名 file=文件地址 full=y ignore=y;
exp system/123456@orcl file=oa.dmp owner=oa full=y;
使用expdp和impdp時應該注重的事項:
1、exp和imp是客戶端工具程序,它們既可以在客戶端使用,也可以在服務端使用。
2、expdp和impdp是服務端的工具程序,他們只能在oracle服務端使用,不能在客戶端使用。
3、imp只適用于exp導出的文件,不適用于expdp導出文件;impdp只適用于expdp導出的文件,而不適用于exp導出文件。
4、對于10g以上的服務器,使用exp通常不能導出0行數據的空表,而此時必須使用expdp導出。
一、準備工作 1)、在備份目的路徑建立備份文件夾 Oracle不會自動創建,務必手動創建 例如:d:bak 2)、用sys用戶在oracle中創建邏輯目錄
--oracleBak_dir這個就是這個邏輯目錄的名字 SQL>create directory oracleBak_dir as ‘d:bak’;
3)、查看數據庫中的邏輯目錄 用來檢查上面兩步驟是否對應OK SQL>select * from dba_directories;4)、授權用戶有對邏輯目錄的讀寫權限
SQL>grant read,write on directory oracleBak_dir to 用戶名;
二、導出
1)導出用戶 登錄的用戶需要有導出權限
expdp 用戶名/密碼@orcl dumpfile=expdp.dmp directory=oracleBak_dir schemas=要導出的用戶名;2)導出表
expdp用戶名/密碼@orcl tables=要導出的表名 dumpfile=expdp.dmp(備份文件的帶后綴全名)directory=oracleBak_dir;3)按查詢條件導
expdp 用戶名/密碼@orcl directory=oracleBak_dir dumpfile=expdp.dmp(備份文件的帶后綴全名)tables=表名 query=’where deptno=20’(引號內為查詢條件);4)按表空間導
expdp system/manager@orcl directory=oracleBak_dir dumpfile=tablespace.dmp(備份文件的帶后綴全名)tablespaces=temp,example(表空間名稱);5)導整個數據庫
expdp system/manager@orcl directory=oracleBak_dir dumpfile=full.dmp full=y;
expdp system/orcl@orcl directory=oracleBak_dir dumpfile=full.dmp full=y;
三、導入數據 導入與導出雷同,不做解析 1)導入用戶(從用戶scott導入到用戶scott)
impdp scott/tiger@orcl directory=oracleBak_dir dumpfile=expdp.dmp schemas=scott;2)導入表(從scott用戶中把表dept和emp導入到system用戶中)
impdp system/manager@orcl directory=oracleBak_dir dumpfile=expdp.dmp tables=scott.dept,scott.emp(原用戶下.某表)remap_schema=scott:system(從用戶scott導入到用戶system);3)導入表空間 impdp system/manager@orcl directory=oracleBak_dir dumpfile=tablespace.dmp tablespaces=example;4)導入數據庫
impdb system/manager@orcl directory=oracleBak_dir dumpfile=full.dmp full=y;5)追加數據
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查出來的job_name)3終止對應的JOB Import> KILL_JOB 選Y
Oracle刪除用戶及表空間
以system用戶登錄,查找需要刪除的用戶:--查找用戶
select * from dba_users;--查找工作空間的路徑
select * from dba_data_files;
--刪除用戶
drop user 用戶名稱 cascade;--刪除表空間
drop tablespace 表空間名稱 including contents and datafiles cascade constraint;例如:刪除用戶名成為LYK,表空間名稱為LYK--刪除用戶,及級聯關系也刪除掉 drop user LYK cascade;--刪除表空間,及對應的表空間文件也刪除掉
drop tablespace LYK including contents and datafiles cascade constraint;
第三篇:Oracle表空間和數據文件的關系
數據庫的物理結構是由數據庫的操作系統文件所決定,每一個Oracle數據庫是由三種類型的文件組成: 數據文件和控制文件。數據庫的文件為數據庫提供真正的物理存儲。
每一個Oracle數據庫有一個或多個物理的數據文件(data file)。一個數據庫的數據文件包含全部數據庫數據。邏輯數據庫結構(如表,索引等)的數據物理地存儲在數據庫地數據文件中。數據文件通常為*.dbf格式,例如: userCIMS.dbf.數據文件有一下特征:①、一個數據文件僅與一個數據庫聯系;②、一旦建立, 數據文件只增不減;③、一個表空間(數據庫存儲地邏輯單位)由一個或多個數據文件組成。
其次, 我們再來敘述一下Oracle的邏輯結構: Oracle的邏輯結構包括表空間(tablespace), 段(segment), 數據塊(data block)以及模式對象(schema object)。
Oracle數據庫在邏輯上是由多個表空間組成的, 表空間在物理上包含一個或者多個數據文件。而數據文件大小是塊大小的整數倍;表空間中存儲的對象叫段, 比如數據段, 索引段和回退段。段由區組成, 區是磁盤分配的最小單位。段的增大是通過增加區的個數來實現的。每個區的大小是數據塊大小的整數倍,取得大小可以不同;數據塊是數據庫中的最小的I/O單位,同時也是內存數據緩沖區的單位,及數據文件存儲空間單位。塊的大小由參數DB_BLOCK_SIZE設置,其值影設置為操作系統塊大小的整數倍。
⑴ 表空間(TABLESPACE)表空間是數據庫中最大的邏輯單位,每一個表空間由一個或多個數據文件組成,一個數據文件只能與一個表空間相聯系。每一個數據庫都有一個SYSTEM表空間,該表空間是在數據庫創建或數據庫安裝時自動創建的,用于存儲系統的數據字典表,程序系統單元,過程函數,包和觸發器等,也可用于存儲用戶數據表,索引對象。表空間具有在線(online)和離線(offline)屬性,可以將除SYSTEM以外的任何表空間置為離線。⑵ 段(SEGMENT)數據庫的段可以分為4類:數據段,索引段,回退段和臨時段。⑶ 區
區是磁盤空間分配的最小單位。磁盤按區劃分,每次至少分配一個區。區存儲在段中,它由連續的數據塊組成。⑷ 數據塊
數據塊是數據庫中最小的數據組織單位與管理單位,是數據庫文件磁盤存儲空間單位,也是數據庫I/O的最小單位,數據塊大小由DB_BLOCK_SIZE參數決定,不同的ORACLE版本BD_BLOCK_SIZE的默認值是不同的。查詢DB_BLOCK_SIZE可以使用sql:
select name, value from v$parameter where name = 'db_block_size';⑸ 模式對象
模式對象是一種應用,包括:表、聚簇、試圖、索引序列生成器、同義詞、哈希、程序單元、數據庫鏈的等。
最后說一下ORACLE的用戶、表空間和數據文件的關系:
一個用戶可以使用一個或多個表空間,一個表空間也可以提供多個用戶使用。用戶和表空間沒有隸屬關系,表空間是一個用來管理數據存儲的邏輯概念,表空間只是和數據文件發生關系,數據文件是物理的。一個表空間可以包含多個數據文件,而一個數據文件只能隸屬于一個表空間。
總結一下:解釋數據庫、表空間、數據文件、表、數據的最好辦法就是想象一個裝滿東西的柜子。數據庫其實就是柜子,柜中的抽屜是表空間,抽屜中的文件夾是數據文件,數據夾中的紙是表,寫在紙上的信息就是數據。
第四篇:oracle 數據文件、表空間、日志文件、控制文件數據庫管理
實驗四 oracle 數據庫管理
一、試驗目的
掌握對數據文件、表空間、日志文件、控制文件的常用命令,作為DBA的必要準備。
二、實驗內容
2.1 數據文件的管理
(1)在安裝完畢之后,在INITsid.ORA參數文件有一個DB_FILES 參數,用于設置當前實例的數據外文件的個數。如: db_files = 80 如果在INITsid.ORA文件沒有該參數,則可以用下面查詢語句從視圖中查到。如: 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:建立一個新的表空間,具有兩個數據文件: CREATE TABLESPACE CRM_TAB
DATAFILE 'h:/oracle/oradata/orcl/crm01.dbf' size 10 MB,'h:/oracle/oradata/orcl/crm02.dbf' size 10 MB;(3)對一個已存在的表空間追加新數據文件: 例1 ALTER TABLESPACE user_stu
Add datafile 'H:/oracle/oradata/orcl/user_stu01.dbf' size 30M;例2 為表空間增加數據文件 ALTER TABLESPACE users ADD DATAFILE 'userora1.dbf ' SIZE 10M;(4)數據文件更名
ALTER TABLESPACE users RENAME DATAFILE? 'filename1', 'filename2' TO 'filename3', 'filename4';(5)變更數據文件大小 在創建表空間時,可以將表空間說明為自動擴展或固定大小。因而管理員的一項工作就是查看系統所有的表空間對應的數據文件情況。看是否為自動擴展。如: 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)數據文件的自動擴展與調整。重新調整數據文件大小的命令如下: ALTER DATABASE DATAFILE [datafile_name] RESIZE [new_size];
當我們發現數據文件過大而不可能用完時,可以用上面命令將數據文件調小。對于設置數據文件的自動擴展問題,可用下面命令來達到: 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)、與數據文件有關的視圖
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)、為了保證表空間的可用,除了掌握表空間的創建外,還應該查看dba_free_space中表空間的信息,以確保系統正常運行。一般管理員應該關心的內容有:表空間共有多少個;總共有多少自由空間;最大的自由空間是什么;下面例子是一個經常使用的腳本,可以查出數據文件和表空間的可用情況。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)查詢是否存在表的擴展超出表空間可用大小 一般在系統使用較長時間后,表空間的連續塊被多次的修改與刪除等操作后出現了許多的不連續的塊(叫碎片)。這樣就有可能出現表的擴展所需要的連續塊不能滿足的情況。為了避免這樣的情況發生而導致擴展失敗,管理員要經常查詢系統的表空間情況。下面就是這樣的一個腳本:
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)查詢表空間自由、最大及碎片
其實,平常管理最關系就是表空間的總量、最大字節、使用多少、碎片多少等。下面腳本可以查詢出所有表空間的自由空間、總空間數、已用空間、自由百分比及最大塊的字節數。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)實現強行的日志切換 Alter system switch logfile;(2)檢測點(checkpoint)
Oracle為了在出現故障后能退回去重演原來的信息,就需要一個叫開始點。在這個開始點時刻,數據和事務是已知的。這樣的開始點就叫檢測點。在Oracle里,只要檢查點一到(出現)。Oracle就強行將當前的SGA中的redo區的改動過的塊寫入重做日志文件中。這個步驟完成后,在重做日志文件中放入一個特殊的檢測點標志記錄。如果在下一個檢測點完成前出現失敗,恢復操作進程就會在日志文件和數據文件前一個檢測點同步(改回去)。檢測點檢查完成后,對數據塊的任何改動都記錄在其檢測點標志后寫入重做日志項中。因此,恢復也就只能從最近的檢測點標志記錄開始。
Oracle在INITsid.ORA文件中給出LOG_CHECKPOINT_INTERVAL參數可以設置檢測點的數目。比如 日志文件大小為1000塊,而設置檢查點間隔LOG_CHECKPOINT_INTERVAL為250,則文件寫達到 1/
4、2/
4、3/4及4/4時產生檢測點(250塊、500塊、750塊和1000塊處)。可用下面命令來查日志文件大小: SQL> select group#,bytes from v$log;show parameter log_checkpoint_interval(3)添加日志組
建立一個新組4,組內有兩個成員 ALTER DATABASE ADD LOGFILE GROUP 4('H:/oracle/oradata/orcl/redo0401.log', 'H:/oracle/oradata/orcl/redo0402.log')size 10m;===當添加一個日志組時,可以不給出組號,有系統自動分配一個組號=== ALTER DATABASE ADD LOGFILE('H:/oracle/oradata/orcl/redo0501.log', 'H:/oracle/oradata/orcl/redo0502.log')size 10m;此時添加的組號為5
(4)為日志組增加成員 ALTER DATABASE ADD LOGFILE MEMBER 'log22.log' TO GROUP 2;===添加成員時,可以不給定成員的大小,因為oracle要求組內的所有成員的大小一律相等。
(5)如果將一個日志成員從一個硬盤移到另一個硬盤,就需要重新命名日志成員名字。需要進行下面步驟:
1. 關閉數據庫,并進行完全備份;
2. 使用操作系統命令拷貝原來的日志文件到新的地方; 3. 用startup mount 啟動數據庫; 4. 用ALTER DATABASE RENAME FILE '
ALTER DATABASE RENAME FILE 'filename1', 'filename2' TO 'filename3', 'filename4';
(6)日志刪除
a.刪除日志組成員:
在下面情況下可能需要刪除重做日志文件,如日志文件個數太多(超出需要);日志文件的大小不一致等。這樣的情況可以刪除日志組成員。b.當日志組損壞時,就刪除日志組,但必須滿足:
a)刪除一個日志組后,系統中至少還有兩個其它的日志組; b)被刪除的日志組必須是不需要存檔; c)不是正在使用的日志組。刪除日志文件的語法:
ALTER DATABASE database_name DROP LOGFILE GROUP group_number | file_name |(file_name,file_name(,...))刪除日志成員的語法:
ALTER DATABASE database_name DROP LOGFILE MEMBER file_name;c.聯機重做日志的緊急替換:
當一個重做日志組偶而被損壞使數據庫不能繼續使用時,不能直接刪除它們,而是要用一個干凈的文件或一組成員去替代這個損壞的日志組。聯機重做日志的緊急替換命令語法如下: ALTER DATABASE database_name CLEAR[UNARCHIVED] LOGFILE group_identifier [UNRECOVERABLE DATAFILE] 如果該文件正在等待存檔(歸檔模式),就需要UNARCHIVED。
如果需要脫機恢復一個數據文件,就用UNRECOVERABLE DATAFILE。d.了解重做日志的當前狀態: V$LOGFILE V$LOG V$THREAD V$LOG_HISTORY e.例子:
刪除一個組3:
ALTER DATABASE DROP LOGFILE GROUP 3;刪除一個成員:
ALTER DATABASE DROP? LOGFILE MEMBER '/orant/oradata'mydb02'redo02.log';4.了解重做日志的當前狀態的視圖主要有: V$LOGFILE V$LOG V$THREAD V$LOG_HISTORY 5.例子:
察看是否歸檔
ARCHIVE? LOG? LIST 日志歸檔
alter database noarchivelog;
3、控制文件的管理(1)關于控制文件
控制文件存放有數據庫的結構信息,包括數據文件、日志文件。控制文件是一個二進制文件,它是在數據庫建立時自動被建立。控制文件可以在當你改變文件名或移動文件時而被更新。在任何時候,你都不能編輯控制文件。控制文件的內容包括:
? 數據庫名字(控制文件只能屬于一個數據庫)。? 數據庫建立時的郵戳。
? 數據文件-名字,位置及聯機/脫機。? 重做日志文件-名字及位置。? 表空間名字。? 當前日志序列號。? 最近檢查點信息。
? 恢復管理器信息(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 記錄字節大小 RECORDS_TOTAL NUMBER 段的記錄數
RECORDS_USED NUMBER 段中已使用的記錄數 FIRST_INDEX NUMBER 第一個記錄索引位置 LAST_INDEX NUMBER 最后一個記錄索引位置 LAST_RECID NUMBER 最后一個記錄ID號
select * from V$CONTROLFILE_RECORD_SECTION;7.6.4 控制文件信息的更改
需要在spfile.ora中做出相應的更改。建立控制文件的步驟 1.建立控制文件準備。
必須有數據文件(查DBA_DATA_FILES數據字典)、日志文件(查V$LOGFILE數據字典)的詳細列表。下面是創建控制文件的命令:
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',;在例子中,參數選件與 CREATE DATABASE類似。NORESETLOGS 指定聯機的日志文件不要重新設置。2. 關閉數據庫。
3. 用NOMOUNT選件啟動數據庫,記住,安裝數據庫,Oracle需要打開控制文件。4. 用類似上面建立新的控制文件。并在INITsid.ORA參數文件中指定。5. 使用ALTER DATABASE OPEN命令打開數據庫。6. 關閉數據庫并備份數據庫。
提示:如果你的數據庫正常,則可以用ALTER DATABASE BACKUP CONTROLFILE TO TRACE 命令來產生一個CREATE CONTROLFILE 的命令。該命令產生后被寫到跟蹤文件中。請參考INITsid.OAR的USER_DUMP_DEST所指的目錄找到跟蹤文件,它就在跟蹤文件中。
建立好控制文件后,就要確定如何來補救被丟失的數據文件,可以從V$DATAFILE視圖來查到丟失的數據文件,這些數據文件的名字為MISSINGnnnn。如果你建立的控制文件帶有RESETLOGS選件,則丟失的數據文件就不能加回數據庫中。如果你建立的控制文件帶有NORESETLOGS選件,則丟失的數據文件可以由數據庫的介質恢復被加回數據庫中。當數據庫啟動后可以 用下面命令進行備份:
ALTER DATABASE BACKUP CONTROL FILE TO '
可以從視圖V$CONTROLFILE中查到控制文件的信息,status字段表示控制文件的狀態,一般總是為空。如:
SQL> select * from v$controlfile;另外V$CONTROLFILE_RECORD_SECTION 視圖存儲控制文件所記錄的信息。它的結構如下:
SQL> desc V$CONTROLFILE_RECORD_SECTION
第五篇:Oracle建表空間各種語句
在創建用戶之前,先要創建表空間:
其格式為:格式: create tablespace 表間名 datafile '數據文件名' size 表空間大小;如:
SQL> create tablespace news_tablespace datafile 'F:oracleproduct10.1.0oradatanewsnews_data.dbf' size 500M;其中'news_tablespace'是你自定義的表空間名稱,可以任意取名;'F:oracleproduct10.1.0oradatanewsnews_data.dbf'是數據文件的存放位置,'news_data.dbf'文件名也是任意取;'size 500M'是指定該數據文件的大小,也就是表空間的大小。
現在建好了名為'news_tablespace'的表空間,下面就可以創建用戶了:
其格式為:格式: create user 用戶名 identified by 密碼 default tablespace 表空間表;如:
SQL> create user news identified by news default tablespace news_tablespace;默認表空間'default tablespace'使用上面創建的表空間。
接著授權給新建的用戶:
SQL> grant connect,resource to news;--表示把 connect,resource權限授予news用戶
SQL> grant dba to news;--表示把 dba權限授予給news用戶
授權成功。
ok!數據庫用戶創建完成,現在你就可以使用該用戶創建數據表了!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.用戶授權
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.刪除表的注意事項
在刪除一個表中的全部數據時,須使用TRUNCATE TABLE 表名;因為用DROP TABLE,DELETE * FROM 表名時,TABLESPACE表空間該表的占用空間并未釋放,反復幾次DROP,DELETE操作后,該TABLESPACE上百兆的空間就被耗光了。oracle sqlplus腳本建庫總結(原創)******************************************************************/--查詢表空間參數
select tablespace_name,min_extents,max_extents,pct_increase,status from dba_tablespaces;--查詢數據文件信息
--autoextensible數據庫已滿后是否自動擴展
select tablespace_name,bytes,autoextensible,file_name from dba_data_files;/******************************************************************/--創建表空間
--一般信息
--DATAFILE:數據文件目錄--存儲
--AUTOEXTEND:數據文件滿后自動擴展--ON NEXT:增量
--MAXSIZE UNLIMITED:最大容量無限制--SIZE:文件大小--存儲
--啟用事件記錄:LOGGING為生成從做日志并可恢復,NOLOGGING為快速更新不生成日志且不可恢復
--MANAGEMENT LOCAL:本地管理--缺省:自動分配
--UNIFORM SIZE:統一分配
--MANAGEMENT DICTIONARY:在字典中管理--DEFAULT STORAGE:覆蓋默認區值--INITIAL:初始大小--NEXT :下一個大小--MINEXTENTS:最小數量
--MAXEXTENTS UNLIMITED :最大數量不限制--PCTINCREASE:增量,單位“%”--MINIMUM EXTENT:最小區大小 CREATE TABLESPACE “TEST” NOLOGGING DATAFILE 'G:ORACLEORADATAMYORACLETEST.ora' SIZE 5M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL UNIFORM SIZE 12K;--最好寫成相對路徑,免得出錯 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不能與原表空間文件名稱相同--添加一個新的大小為5M數據庫文件test.ora1 alter tablespace mytesttablespace add datafile 'c:testtest.ora1' size 5M;/******************************************************************/--修改表空間數據庫文件屬性,myoracle為sid--將test.ora1數據庫文件改為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;/******************************************************************/ /*刪除表空間
語法:drop tablespace tablespace_name including contents and datafiles;刪除表空間時要系統不會刪除表空間數據庫文件,要徹底刪除要手動刪除 */ drop tablespace mytesttablespace including contents and datafiles;/******************************************************************/--創建用戶--命令:
--CREATE USER 名稱 IDENTIFIED BY 口令 DEFAULT TABLESPACE “默認表空間名” TEMPORARY TABLESPACE “TEMP” ACCOUNT UNLOCK--一般屬性
--DEFAULT TABLESPACE :默認表空間名
--TEMPORARY TABLESPACE :臨時表空間名,默認TEMP--ACCOUNT :用戶狀態,默認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”;/******************************************************************/--用戶授權
--grant “connect,resource,dba” to “someuser” with admin option;--WITH ADMIN OPTION :管理選項--授予usertest DBA權限
grant dba to “usertest” with admin option;--取消授權
--REVOKE “RESOURCE” FROM “SCOTT”;/******************************************************************/--建表
--在usertest方案下建表,注意表名不能用關鍵字,否則報錯ORA-00903: 表名無效
--語法:
--create table [schema.]
--data type:表示字段的數據類型
--default
CREATE TABLE “TEST”.“TEST”(“ID” NUMBER(10)DEFAULT 0 PRIMARY KEY, “NAME” VARCHAR2(20)NOT NULL, “INFO” VARCHAR2(1000))TABLESPACE “TEST”;/******************************************************************/--插入數據--語法:
--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' ,'');/******************************************************************/