Oracle同義詞創(chuàng)建及其作用
Oracle的同義詞(synonyms)從字面上理解就是別名的意思,和試圖的功能類似,就是一種映射關(guān)系。本文介紹如何創(chuàng)建同義詞語句,刪除同義詞以及查看同義詞語句。oracle的同義詞總結(jié):從字面上理解就是別名的意思,和試圖的功能類似。就是一種映射關(guān)系。1.創(chuàng)建同義詞語句:create public synonym table_name for user.table_name;其中第一個(gè)user_table和第二個(gè)user_table可以不一樣。此外如果要?jiǎng)?chuàng)建一個(gè)遠(yuǎn)程的數(shù)據(jù)庫上的某張表的同義詞,需要先創(chuàng)建一個(gè)Database Link(數(shù)據(jù)庫連接)來擴(kuò)展訪問,然后在使用如下語句創(chuàng)建數(shù)據(jù)庫同義詞:create synonym table_name for table_name@DB_Link;當(dāng)然,你可能需要在user用戶中給當(dāng)前用戶(user2)授權(quán): grant select/delete/update on user22.刪除同義詞:drop public synonym table_name;3.查看所有同義詞:select * from dba_synonyms同義詞擁有如下好處:節(jié)省大量的數(shù)據(jù)庫空間,對(duì)不同用戶的操作同一張表沒有多少差別;擴(kuò)展的數(shù)據(jù)庫的使用范圍,能夠在不同的數(shù)據(jù)庫用戶之間實(shí)現(xiàn)無縫交互;同義詞可以創(chuàng)建在不同一個(gè)數(shù)據(jù)庫服務(wù)器上,通過網(wǎng)絡(luò)實(shí)現(xiàn)連接。
Oracle數(shù)據(jù)庫中提供了同義詞管理的功能。Oracle同義詞是數(shù)據(jù)庫方案對(duì)象的一個(gè)別名,經(jīng)常用于簡化對(duì)象訪問和提高對(duì)象訪問的安全性。
AD:在Oracle中對(duì)用戶的管理是使用權(quán)限的方式來管理的,也就是說,如果我們想使用數(shù)據(jù)庫,我們就必須得有權(quán)限,但是如果是別人將權(quán)限授予了我們,我們也是能對(duì)數(shù)據(jù)庫進(jìn)行操作的,但是我們必須要已授權(quán)的表的名稱前鍵入該表所有者的名稱,所以這就是比較麻煩的,遇到這種情況,我們?cè)撛趺崔k呢?創(chuàng)建個(gè)Oracle同義詞吧!這樣我們就可以直接使用同義詞來使用表了。
1.同義詞的概念
Oracle數(shù)據(jù)庫中提供了同義詞管理的功能。同義詞是數(shù)據(jù)庫方案對(duì)象的一個(gè)別名,經(jīng)常用于簡化對(duì)象訪問和提高對(duì)象訪問的安全性。在使用同義詞時(shí),Oracle數(shù)據(jù)庫將它翻譯成對(duì)應(yīng)方案對(duì)象的名字。與視圖類似,同義詞并不占用實(shí)際存儲(chǔ)空間,只有在數(shù)據(jù)字典中保存了同義詞的定義。在Oracle數(shù)據(jù)庫中的大部分?jǐn)?shù)據(jù)庫對(duì)象,如表、視圖、同義詞、序列、存儲(chǔ)過程、包等等,數(shù)據(jù)庫管理員都可以根據(jù)實(shí)際情況為他們定義同義詞。
2.Oracle同義詞的分類
Oracle同義詞有兩種類型,分別是公用Oracle同義詞與私有Oracle同義詞。
1)公用Oracle同義詞:由一個(gè)特殊的用戶組Public所擁有。顧名思義,數(shù)據(jù)庫中所有的用戶都可以使用公用同義詞。公用同義詞往往用來標(biāo)示一些比較普通的數(shù)據(jù)庫對(duì)象,這些對(duì)象往往大家都需要引用。
2)私有Oracle同義詞:它是跟公用同義詞所對(duì)應(yīng),他是由創(chuàng)建他的用戶所有。當(dāng)然,這個(gè)同義詞的創(chuàng)建者,可以通過授權(quán)控制其他用戶是否有權(quán)使用屬于自己的私有同義詞。
3.Oracle同義詞創(chuàng)建及刪除
創(chuàng)建公有Oracle同義詞的語法:Create [public] synonym 同義詞名稱 for [username.]objectName;
Drop [public] synonym 同義詞名稱
4.Oracle同義詞的作用
1) 多用戶協(xié)同開發(fā)中,可以屏蔽對(duì)象的名字及其持有者。如果沒有同義詞,當(dāng)操作其他用戶的表時(shí),必須通過user名.object名的形式,采用了Oracle同義詞之后就可以隱蔽掉user名,當(dāng)然這里要注意的是:public同義詞只是為數(shù)據(jù)庫對(duì)象定義了一個(gè)公共的別名,其他用戶能否通過這個(gè)別名訪問這個(gè)數(shù)據(jù)庫對(duì)象,還要看是否已經(jīng)為這個(gè)用戶授權(quán)。
2) 為用戶簡化sql語句。上面的一條其實(shí)就是一種簡化sql的體現(xiàn),同時(shí)如果自己建的表的名字很長,可以為這個(gè)表創(chuàng)建一個(gè)Oracle同義詞來簡化sql開發(fā)。
3)為分布式數(shù)據(jù)庫的遠(yuǎn)程對(duì)象提供位置透明性。
5.Oracle同義詞在數(shù)據(jù)庫鏈中的作用
數(shù)據(jù)庫鏈?zhǔn)且粋€(gè)命名的對(duì)象,說明一個(gè)數(shù)據(jù)庫到另一個(gè)數(shù)據(jù)庫的路徑,通過其可以實(shí)現(xiàn)不同數(shù)據(jù)庫之間的通信。
Create database link 數(shù)據(jù)庫鏈名 connect to user名 identified by 口令 using ‘Oracle連接串’; 訪問對(duì)象要通過 object名@數(shù)據(jù)庫鏈名。同義詞在數(shù)據(jù)庫鏈中的作用就是提供位置透明性
------------------------------------------------------------------
Oracle同義詞創(chuàng)建及分配用戶創(chuàng)建同義詞權(quán)限
(1)--授權(quán)某個(gè)用戶crate synonym的權(quán)限,若用戶名為scott
grant create synonym to scott
(2)--創(chuàng)建同義詞
create [or replace] synonym syn_name from table_name;
(3)--撤銷scott創(chuàng)建同義詞的權(quán)限
revoke create synonym from scott;
(4)--刪除同義詞
Drop synonym syn_name注:在副表上創(chuàng)建同義詞create or replace synonym JC_GROUP1(對(duì)應(yīng)副表中的組織機(jī)構(gòu)表)
for wlmqpb.ZHPT_DEPT(主表的數(shù)據(jù)庫名.主表的組織機(jī)構(gòu)表);這樣創(chuàng)建成功后就可以直接在副表select
------------------------------------------------------------------------
Oracle的同義詞(synonyms)總結(jié)synonyms 英['s?n?n?mz] 美['s?n?n?mz] 同義詞( synonym的名詞復(fù)數(shù) );和視圖的功能類似,是一種映射關(guān)系。(1)創(chuàng)建同義詞的語法create public synonym table_name for user.table_name;其中第一個(gè)user_table和第二個(gè)user_table可以不一樣。此外如果要?jiǎng)?chuàng)建一個(gè)遠(yuǎn)程的數(shù)據(jù)庫上的某張表的同義詞,需要先創(chuàng)建一個(gè)Database Link(數(shù)據(jù)庫連接)來擴(kuò)展訪問,然后在使用如下語句創(chuàng)建數(shù)據(jù)庫同義詞:create synonym table_name for table_name@DB_Link;create or replace synonym MONTHHOURS for HO_DEPT_MONTHHOURS@TRAININGLINK;你可能需要在user用戶中給當(dāng)前用戶(user2)授權(quán): grant select/delete/update on user2(2)刪除同義詞drop public synonyms table_name;(3)查詢所有同義詞select * from dba_synonyms;同義詞擁有如下好處:節(jié)省大量的數(shù)據(jù)庫空間,對(duì)不同用戶的操作同一張表沒有多少差別;擴(kuò)展的數(shù)據(jù)庫的使用范圍,能夠在不同的數(shù)據(jù)庫用戶之間實(shí)現(xiàn)無縫交互;同義詞可以創(chuàng)建在不同一個(gè)數(shù)據(jù)庫服務(wù)器上,通過網(wǎng)絡(luò)實(shí)現(xiàn)連接
------------------------------------------------------------------------------
DBLINK
1.查看dblinkselect owner,object_name from dba_objects where object_type='DATABASE LINK';
或者select * from dba_db_links;
2.創(chuàng)建dblink
前提:創(chuàng)建dblink的用戶有對(duì)應(yīng)的數(shù)據(jù)庫權(quán)限create public database link 或者create database link?可以使用grant create public database link,create database link to myAccount;來授權(quán).
create public database link dblinkname connect to usernameidentified by passwordusing '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = database_ip)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME =servicename)
)
)';
如果在create之后不加public,則創(chuàng)建的dblink就不是公共的,就只有創(chuàng)建者可以使用了.
補(bǔ)充:如何確定數(shù)據(jù)庫的servicename:1.在sqlplus中使用show parameter[s] service_names;注意parameter和parameters都可以2.使用select name,value from v$parameter where name='service_names'3.使用db link例如,在本機(jī)數(shù)據(jù)庫上創(chuàng)建了一個(gè)scott_rmthost的publicdblink(使用遠(yuǎn)程主機(jī)的scott用戶連接),則用sqlplus連接到本機(jī)數(shù)據(jù)庫,執(zhí)行select * fromscott.emp@scott_rmthot即可以將遠(yuǎn)程數(shù)據(jù)庫上的scott用戶下的emp表中的數(shù)據(jù)獲取到.也可以在本地建一個(gè)同義詞來指向scott.emp@scott_rmthost,這樣取值就方便多了.
4.刪除注意:用戶有createpublic database link 或者create database link 權(quán)限.drop public database link dblinkname;
---------------------
Oracle 創(chuàng)建 DBLink 的方法
當(dāng)用戶要跨本地?cái)?shù)據(jù)庫,訪問另外一個(gè)數(shù)據(jù)庫表中的數(shù)據(jù)時(shí),本地?cái)?shù)據(jù)庫中必須創(chuàng)建了遠(yuǎn)程數(shù)據(jù)庫的dblink,通過dblink本地?cái)?shù)據(jù)庫可以像訪問本地?cái)?shù)據(jù)庫一樣訪問遠(yuǎn)程數(shù)據(jù)庫表中的數(shù)據(jù)。下面講介紹我之前項(xiàng)目中如何在本地?cái)?shù)據(jù)庫中創(chuàng)建dblink.create database link TestDblinkconnect to dbName identified by dbPasswordusing '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.2.158)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';
TestDblink : 表示dblink名字dbName :表示 遠(yuǎn)程數(shù)據(jù)庫的用戶dbPassword:表示 遠(yuǎn)程數(shù)據(jù)庫的密碼HOST : 表示遠(yuǎn)程數(shù)據(jù)庫IPPORT : 表示遠(yuǎn)程數(shù)據(jù)庫端口SERVICE_NAME : 遠(yuǎn)程數(shù)據(jù)庫的實(shí)例名-- 查詢、刪除和插入數(shù)據(jù)和操作本地的數(shù)據(jù)庫是一樣的,只不過表名需要寫成“表名@dblink服務(wù)器”而已。 例如:如果想在本地?cái)?shù)據(jù)庫中通過dblink訪問遠(yuǎn)程數(shù)據(jù)庫'orcl'中dbName.tb_test表,sql語句如下所示select * from db.tb_test@TestDblink;DBLINK其他相關(guān)的知識(shí):1、查看所有的數(shù)據(jù)庫鏈接,登錄管理員查看 select owner,object_name from dba_objects where object_type='DATABASE LINK';
2.刪除數(shù)據(jù)庫連接drop database link TestDblink;
-----------------------------------------------------------
查詢DBLINK信息
select * from dba_db_links;
select owner,object_name from dba_objects where object_type='DATABASE LINK';
select * from ALL_DB_LINKS;Oracle創(chuàng)建dblink報(bào)錯(cuò):ORA-01017、ORA-02063解決:
根據(jù)ORA-01017的提示是連接到另一方的用戶密碼錯(cuò)誤,當(dāng)9i或10g的版本的Oracle數(shù)據(jù)庫連接11g的版本時(shí),會(huì)自動(dòng)將密碼轉(zhuǎn)化為大寫。
**密碼最好用雙引號(hào)引起來,否則可能在連接的時(shí)候報(bào)錯(cuò)create database link dblink名connect to 數(shù)據(jù)庫用戶名 identified by "數(shù)據(jù)庫密碼"using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))'; ?-- 如果創(chuàng)建全局 dblink,必須使用 systm 或 sys 用戶,在 database 前加 public。 ?
create public database link dblink名connect to 數(shù)據(jù)庫用戶名 identified by "數(shù)據(jù)庫密碼"using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))'; ?--刪除DBLINK
DROP DATABASE LINK [name]; ?
--或 ?
DROP PUBLIC DATABASE LINK [name]; ?
---------------------
表空間的使用 ?
Oracle表空間基本操作
普通表空間:
1》 創(chuàng)建表空間:Create tablespace tablespace_nameDatafile ‘E:\oracle\tablespace_datafile.dbf’ size 20MAutoextend onNext 5MMaxsize 50M;2》 添加數(shù)據(jù)文件:Alter tablespace tablespace_nameAdd datafile ‘E:\oracle\tablespace_new_add_datafile.dbf’Size 20MAutoextnend off;3》 更改數(shù)據(jù)文件大小:Alter database datafile ‘E:\oracle\tablespace_datafile.dbf’Resize 50M4》 更改表數(shù)據(jù)文件自增:Alter database datafile ‘E:\oracle\tablespace_new_add_datafile.dbf’Autoextend on5》 查詢所有表空間名字等 :user_tablespaces;6》 查詢默認(rèn)表空間,臨時(shí)表空間:user_users7》 查詢表空間空閑情況:dba_free_space8》 查詢數(shù)據(jù)文件:dba_data_files9》 查詢表空間狀態(tài):dba_tablespaces10》 移動(dòng)數(shù)據(jù)文件:① :alter tablespace tablespace_name offline② :物理硬盤上移動(dòng)數(shù)據(jù)文件③ :alter tablespace tablespace_namerename datafile ‘E:\oracle\old\tablespace_datafile.dbf’to ‘E:\oracle\new\tablespace_datafile.dbf’11》 刪除表空間:Drop tablespace tablespace_nameIncluding contents and datafiles;(刪除內(nèi)容和文件)臨時(shí)表空間:
1》 創(chuàng)建臨時(shí)表空間:Create temporary tablespace tablespace_nameTempfile ‘E:\oracle\temptablespace_datafile.dbf’Size 5MAutoextend onNext 3MMaxsize 10M2》 添加數(shù)據(jù)文件:Alter tablespace tablespace_nameAdd tempfile ‘E:\oracle\temptablespace_new_add_datafile.dbf’Size 5M;3》 更改數(shù)據(jù)文件大小:4》 更改臨時(shí)文件狀態(tài):Alter database tempfile ‘E:\oracle\temptablespace_datafile.dbf’ offline5》 創(chuàng)建臨時(shí)表空間組:Create temporary tablespace temptablespace_nameTempfile ‘E:\oracle\temptablespace_datafile.dbf’Size 5MTablespace group tablespace_group_name6》 把臨時(shí)表空間添加到表空間組:Alter tablespace temptablespace_name tablespace group tablespace_group_name7》 刪除表空間組 == 刪除表空間組中的所有表空間Drop tablespace temptablespace_name including contents and datafiles
--------------------------------------------------------------------------------
查看表空間使用情況--1G=1024MB
--1M=1024KB
--1K=1024Bytes
--1M=11048576Bytes
--1G=1024*11048576Bytes=11313741824Bytes
SELECT a.tablespace_name "表空間名",total "表空間大小",free "表空間剩余大小",(total - free) "表空間使用大小",total / (1024 * 1024 * 1024) "表空間大小(G)",free / (1024 * 1024 * 1024) "表空間剩余大小(G)",(total - free) / (1024 * 1024 * 1024) "表空間使用大小(G)",round((total - free) / total, 4) * 100 "使用率 %"FROM (SELECT tablespace_name, SUM(bytes) freeFROM dba_free_spaceGROUP BY tablespace_name) a,(SELECT tablespace_name, SUM(bytes) totalFROM dba_data_filesGROUP BY tablespace_name) bWHERE a.tablespace_name = b.tablespace_name;查看表數(shù)據(jù)文件情況select b.file_name 物理文件名,b.tablespace_name 表空間,b.bytes / 1024 / 1024 大小M,(b.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024 已使用M,substr((b.bytes - sum(nvl(a.bytes, 0))) / (b.bytes) * 100, 1, 5) 利用率 from dba_free_space a,dba_data_files b where a.file_id = b.file_id group by b.tablespace_name,b.file_name,b.bytes order by b.tablespace_name;查看數(shù)據(jù)庫的版本 SELECT versionFROM product_component_versionWHERE substr(product, 1, 6) = 'Oracle';
---------------------
Oracle 表空間查詢與操作方法
一。查詢篇
1.查詢oracle表空間的使用情況
select b.file_id 文件ID, b.tablespace_name 表空間, b.file_name 物理文件名, b.bytes 總字節(jié)數(shù), (b.bytes-sum(nvl(a.bytes,0))) 已使用, sum(nvl(a.bytes,0)) 剩余, sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比 from dba_free_space a,dba_data_files b where a.file_id=b.file_id group by b.tablespace_name,b.file_name,b.file_id,b.bytes order by b.tablespace_name
2.查詢oracle系統(tǒng)用戶的默認(rèn)表空間和臨時(shí)表空間
select default_tablespace,temporary_tablespace from dba_users
3.查詢單張表的使用情況
select segment_name,bytes from dba_segments where segment_name = 'RE_STDEVT_FACT_DAY' and owner = USER
RE_STDEVT_FACT_DAY是您要查詢的表名稱
4.查詢所有用戶表使用大小的前三十名
select * from (select segment_name,bytes from dba_segments where owner = USER order by bytes desc ) where rownum <= 30
5.查詢當(dāng)前用戶默認(rèn)表空間的使用情況
select tablespacename,sum(totalContent),sum(usecontent),sum(sparecontent),avg(sparepercent)
from
(
SELECT b.file_id as id,b.tablespace_name as tablespacename,b.bytes as totalContent,(b.bytes-sum(nvl(a.bytes,0))) as usecontent,sum(nvl(a.bytes,0)) as sparecontent,sum(nvl(a.bytes,0))/(b.bytes)*100 as sparepercent
FROM dba_free_space a,dba_data_files b
WHERE a.file_id=b.file_id and b.tablespace_name = (select default_tablespace from dba_users where username = user)
group by b.tablespace_name,b.file_name,b.file_id,b.bytes
)
GROUP BY tablespacename
6.查詢用戶表空間的表
select * from user_tables
==================================================================================
一、建立表空間
CREATE TABLESPACE test
DATAFILE 'c:/oracle/oradata/db/test01.dbf' SIZE 50M
UNIFORM SIZE 1M; #指定區(qū)尺寸為128k,如不指定,區(qū)尺寸默認(rèn)為64k
或
CREATE TABLESPACE test
DATAFILE 'c:/oracle/oradata/db/test01.dbf' SIZE 50M
MINIMUM EXTENT 50K EXTENT MANAGEMENT LOCAL
DEFAULT STORAGE (INITIAL 50K NEXT 50K MAXEXTENTS 100 PCTINCREASE 0);
可從dba_tablespaces中查看剛創(chuàng)建的表空間的信息
二、建立UNDO表空間
CREATE UNDO TABLESPACE test_undo
DATAFILE 'c:/oracle/oradata/db/test_undo.dbf' SIZE 50M
UNDO表空間的EXTENT是由本地管理的,而且在創(chuàng)建時(shí)的SQL語句中只能使用DATAFILE和EXTENT MANAGEMENT子句。
ORACLE規(guī)定在任何時(shí)刻只能將一個(gè)還原表空間賦予數(shù)據(jù)庫,即在一個(gè)實(shí)例中可以有多個(gè)還原表空間存在,但只能有一個(gè)為活動(dòng)的。可以使用ALTER SYSTEM命令進(jìn)行還原表空間的切換。
SQL> ALTER SYSTEM SET UNDO_TABLESPACE = test_undo;
三、建立臨時(shí)表空間
CREATE TEMPORARY TABLESPACE test_temp
TEMPFILE '/oracle/oradata/db/test_temp.dbf' SIZE 50M
查看系統(tǒng)當(dāng)前默認(rèn)的臨時(shí)表空間
select * from dba_properties where property_name like 'DEFAULT%'
改變系統(tǒng)默認(rèn)臨時(shí)表空間
alter database default temporary tablespace test_temp;
四、改變表空間狀態(tài)
1.使表空間脫機(jī)
ALTER TABLESPACE test OFFLINE;
如果是意外刪除了數(shù)據(jù)文件,則必須帶有RECOVER選項(xiàng)
ALTER TABLESPACE game test FOR RECOVER;
2.使表空間聯(lián)機(jī)
ALTER TABLESPACE test ONLINE;
3.使數(shù)據(jù)文件脫機(jī)
ALTER DATABASE DATAFILE 3 OFFLINE;
4.使數(shù)據(jù)文件聯(lián)機(jī)
ALTER DATABASE DATAFILE 3 ONLINE;
5.使表空間只讀
ALTER TABLESPACE test READ ONLY;
6.使表空間可讀寫
ALTER TABLESPACE test READ WRITE;
五、刪除表空間
DROP TABLESPACE test INCL ING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
DROP TABLESPACE 表空間名 [INCL ING CONTENTS [AND DATAFILES] [CASCADE CONSTRAINTS]]
1. INCL ING CONTENTS 子句用來刪除段
2. AND DATAFILES 子句用來刪除數(shù)據(jù)文件
3. CASCADE CONSTRAINTS 子句用來刪除所有的引用完整性約束 六、擴(kuò)展表空間
首先查看表空間的名字和所屬文件
select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;
1.增加數(shù)據(jù)文件
ALTER TABLESPACE test
ADD DATAFILE '/oracle/oradata/db/test02.dbf' SIZE 1000M;
2.手動(dòng)增加數(shù)據(jù)文件尺寸
ALTER DATABASE DATAFILE 'c:/oracle/oradata/db/test01.dbf'
RESIZE 100M;
3.設(shè)定數(shù)據(jù)文件自動(dòng)擴(kuò)展
ALTER DATABASE DATAFILE 'c:/oracle/oradata/db/test01.dbf'
AUTOEXTEND ON NEXT 100M
MAXSIZE 200M;
設(shè)定后可從dba_tablespace中查看表空間信息,從v$datafile中查看對(duì)應(yīng)的數(shù)據(jù)文件信息
==================================================================================
create tablespace scgl
datafile 'E:\ORACLE\PROD T\10.1.0\ORADATA\ORCL\scgl2.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;
create tablespace test_data
logging
datafile 'E:\ORACLE\PROD T\10.1.0\ORADATA\ORCL\user_data.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;
create user scgl identified by qwer1234
default tablespace scgl
temporary tablespace scgl_temp;
tempfile 'E:\ORACLE\PROD T\10.1.0\ORADATA\ORCL\user_temp.dbf'
create temporary tablespace scgl_temp
tempfile 'E:\ORACLE\PROD T\10.1.0\ORADATA\ORCL\scgl_temp.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;
grant connect,resource, dba to scgl;
oracle創(chuàng)建表空間 SYS用戶在CMD下以DBA身份登陸:
在CMD中打sqlplus /nolog
然后再
conn / as sysdba
//創(chuàng)建臨時(shí)表空間
create temporary tablespace user_temp
tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;
//創(chuàng)建數(shù)據(jù)表空間
create tablespace test_data
logging
datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;
//創(chuàng)建用戶并指定表空間
create user username identified by password
default tablespace user_data
temporary tablespace user_temp;
查詢表空間使用情況
SELECT UPPER(F.TABLESPACE_NAME) "表空間名",
D.TOT_GROOTTE_MB "表空間大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空間(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",
F.TOTAL_BYTES "空閑空間(M)",
F.MAX_BYTES "最大塊(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 1
查詢表空間的free space
select tablespace_name,
count(*) as extends,
round(sum(bytes) / 1024 / 1024, 2) as MB,
sum(blocks) as blocks
from dba_free_space
group by tablespace_name;
--查詢表空間的總?cè)萘?
select tablespace_name, sum(bytes) / 1024 / 1024 as MB
from dba_data_files
group by tablespace_name;
查詢表空間使用率
select total.tablespace_name,
round(total.MB, 2) as Total_MB,
round(total.MB - free.MB, 2) as Used_MB,
round((1 - free.MB / total.MB) * 100, 2) || '%' as Used_Pct
from (select tablespace_name, sum(bytes) / 1024 / 1024 as MB
from dba_free_space
group by tablespace_name) free,
(select tablespace_name, sum(bytes) / 1024 / 1024 as MB
from dba_data_files
group by tablespace_name) total
where free.tablespace_name = total.tablespace_name;
-----------------------------------------------------------------------------------------------------------------------------
1.建立表空間:create tablespace test datafile '/u01/test.dbf' size 10M uniform size 128k
#指定區(qū)尺寸為128k ,塊大小為默認(rèn)8K
#大文件表空間 create bigfile tablespace big_tbs datafile '/u01/big_tbs.dbf ' size 100G
2.建非標(biāo)準(zhǔn)表show parameter db alter system set db_2k_cache_size=10M create tablespace test datafile '/u01/test.dbf' size 10M blocksize 2K uniform size 128k
#常見錯(cuò)誤
SQL> alter system set db_2k_cache_size=2M; alter system set db_2k_cache_size=2M ERROR at line 1: ORA-02097: parameter cannot be modified because specified value is invalid ORA-00384: Insufficient memory to grow cache
#解決
SQL> alter system set sga_max_size=400M scope=spfile; SQL> shutdown immediate; SQL> startup SQL> alter system set db_2k_cache_size=10M; System altered.
3.查看區(qū)大小與塊大小#區(qū)大小 conn y / 123 create table t(i number) tablespace test; Insert into t values(10) select bytes/1024 from user_segments where segment_name=upper('t');
#塊大小 Show parameter block(默認(rèn)64K)
#非標(biāo)準(zhǔn)表空間的blocksize SQL> select * from v$dbfile; SQL> select name,block_size,status from v$datafile; SQL> select block_size from v$datafile where file#=14;
4.刪除表空間drop tablespace test including contents and datafiles
5.查表空間:#查數(shù)據(jù)文件 select * from v$dbfile; #所有表空間 select * from v$tablespace;
#表空間的數(shù)據(jù)文件 select file_name,tablespace_name from dba_data_files;
6.建立undo表空間create undo tablespace undotbs01 datafile '/u01/undotbs01.dbf' size 5M;
#切換到新建的undo表空間 alter system set undo_tablespace=undotbs01;
7.建立臨時(shí)表空間create temporary tablespace temp_data tempfile '/u01/temp.db' size 5M; create bigfile temporary tablespace bigtem tempfile '/u01/bigtemp.db' size 5M;
8.改變表空間狀態(tài)
(0.)查看狀態(tài)
#表空間狀態(tài) select tablespace_name,block_size,status from dba_tablespaces;
#數(shù)據(jù)文件狀態(tài) select name,block_size,status from v$datafile;
(1.)表空間脫機(jī)alter tablespace test offline
#如果意外刪除了數(shù)據(jù)文件 alter tablespace test offline for recover
(2.)表空間聯(lián)機(jī)alter tablespace test online
(3.)數(shù)據(jù)文件脫機(jī)select * from v$dbfile; alter database datafile 3 offline
(4.)數(shù)據(jù)文件聯(lián)機(jī)recover datafile 3; alter database datafile 3 online;
(5.)使表空間只讀alter tablespace test read only
(6.)使表空間可讀寫alter tablespace test read write;
9.擴(kuò)展表空間#首先查看表空間的名字和所屬文件及空間 select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name; #三種擴(kuò)展方法
1.alter tablespace test add datafile '/u01/test02.dbf' size 10M(自動(dòng)加一個(gè)datafile)
2.alter database datafile '/u01/test.dbf' resize 20M;
3.alter database datafile '/u01/test.dbf' autoextend on next 10M maxsize 1G;
#設(shè)定后查看表空間信息
select a.tablespace_name,a.bytes total,b.bytes used,c.bytes free,(b.bytes*100)/a.bytes "% used",(c.bytes*100)/a.bytes "% free" from sys.sm$ts_avail a,sys.sm$ts_used b,sys.sm$ts_free c where a.tablespace_name=b.tablespace_name and a.tablespace_name=c.tablespace_name;
10.移動(dòng)表空間的數(shù)據(jù)文件
#先確定數(shù)據(jù)文件據(jù)在表空間
SQL>select tablespace_name,file_name from dba_data_files where file_name='/u01/test.dbf';
#open狀態(tài)
SQL>alter tablespace test offline; SQL>host move /u01/test.dbf /u01/oracle/test.dbf; SQL>alter tablespace test rename datafile '/u01/test.dbf' to '/u01/oracle/test.dbf'; SQL>alter tablespace test offline;
#mount狀態(tài) SQL>shutdown immediate; SQL>startup mount SQL>host move /u01/test.dbf /u01/oracle/test.dbf; SQL>alter database rename file '/u01/test.dbf' to '/u01/oracle/test.dbf';
11.表空間和數(shù)據(jù)文件常用的數(shù)據(jù)字典與動(dòng)態(tài)性能視圖v$dbfile v$datafile dba_segments user_segments dba_data_files v$tablespace dba_tablespaces user_tablespaces
--查詢表空間使用情況
SELECT UPPER(F.TABLESPACE_NAME) "表空間名",
D.TOT_GROOTTE_MB "表空間大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空間(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",
F.TOTAL_BYTES "空閑空間(M)",
F.MAX_BYTES "最大塊(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 1
--查詢表空間的free space
select tablespace_name,
count(*) as extends,
round(sum(bytes) / 1024 / 1024, 2) as MB,
sum(blocks) as blocks
from dba_free_space
group by tablespace_name;
--查詢表空間的總?cè)萘?
select tablespace_name, sum(bytes) / 1024 / 1024 as MB
from dba_data_files
group by tablespace_name;
--查詢表空間使用率
select total.tablespace_name,
round(total.MB, 2) as Total_MB,
round(total.MB - free.MB, 2) as Used_MB,
round((1 - free.MB / total.MB) * 100, 2) || '%' as Used_Pct
from (select tablespace_name, sum(bytes) / 1024 / 1024 as MB
from dba_free_space
group by tablespace_name) free,
(select tablespace_name, sum(bytes) / 1024 / 1024 as MB
from dba_data_files
group by tablespace_name) total
where free.tablespace_name = total.tablespace_name;
//給用戶授予權(quán)限
grant connect,resource to username;
//以后以該用戶登錄,創(chuàng)建的任何數(shù)據(jù)庫對(duì)象都屬于user_temp 和user_data表空間,
這就不用在每創(chuàng)建一個(gè)對(duì)象給其指定表空間了
撤權(quán):
revoke 權(quán)限... from 用戶名;
刪除用戶命令
drop user user_name cascade; 建立表空間
CREATE TABLESPACE data01
DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M
UNIFORM SIZE 128k; #指定區(qū)尺寸為128k,如不指定,區(qū)尺寸默認(rèn)為64k 刪除表空間
DROP TABLESPACE data01 INCL ING CONTENTS AND DATAFILES;
一、建立表空間
CREATE TABLESPACE data01
DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M
UNIFORM SIZE 128k; #指定區(qū)尺寸為128k,如不指定,區(qū)尺寸默認(rèn)為64k
二、建立UNDO表空間
CREATE UNDO TABLESPACE UNDOTBS02
DATAFILE '/oracle/oradata/db/UNDOTBS02.dbf' SIZE 50M
#注意:在OPEN狀態(tài)下某些時(shí)刻只能用一個(gè)UNDO表空間,如果要用新建的表空間,必須切換到該表空間:
ALTER SYSTEM SET undo_tablespace=UNDOTBS02;
三、建立臨時(shí)表空間
CREATE TEMPORARY TABLESPACE temp_data
TEMPFILE '/oracle/oradata/db/TEMP_DATA.dbf' SIZE 50M
四、改變表空間狀態(tài)
1.使表空間脫機(jī)
ALTER TABLESPACE game OFFLINE;
如果是意外刪除了數(shù)據(jù)文件,則必須帶有RECOVER選項(xiàng)
ALTER TABLESPACE game OFFLINE FOR RECOVER;
2.使表空間聯(lián)機(jī)
ALTER TABLESPACE game ONLINE;
3.使數(shù)據(jù)文件脫機(jī)
ALTER DATABASE DATAFILE 3 OFFLINE;
4.使數(shù)據(jù)文件聯(lián)機(jī)
ALTER DATABASE DATAFILE 3 ONLINE;
5.使表空間只讀
ALTER TABLESPACE game READ ONLY;
6.使表空間可讀寫
ALTER TABLESPACE game READ WRITE;
五、刪除表空間
DROP TABLESPACE data01 INCL ING CONTENTS AND DATAFILES; 六、擴(kuò)展表空間
首先查看表空間的名字和所屬文件
select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;
1.增加數(shù)據(jù)文件
ALTER TABLESPACE game
ADD DATAFILE '/oracle/oradata/db/GAME02.dbf' SIZE 1000M;
2.手動(dòng)增加數(shù)據(jù)文件尺寸
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf'
RESIZE 4000M;
3.設(shè)定數(shù)據(jù)文件自動(dòng)擴(kuò)展
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf
AUTOEXTEND ON NEXT 100M
MAXSIZE 10000M; 設(shè)定后查看表空間信息
SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,
(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C
----------------------------------------------------------------------
背景
今天發(fā)現(xiàn)有一張采樣表從1月5號(hào)開始不記錄數(shù)據(jù)了,所以想查看一下表空間使用率,在網(wǎng)上零零散散找了很多資料,現(xiàn)在記錄如下,也不知道哪一個(gè)最準(zhǔn)確。還有一個(gè)就是網(wǎng)上拷貝的sql代碼格式太亂了,不好看,找到一個(gè)在線格式化工具。參考1
復(fù)制代碼
--查詢表空間使用情況
SELECT Upper(F.TABLESPACE_NAME) "表空間名",D.TOT_GROOTTE_MB "表空間大小(M)",D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空間(M)",To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99')|| '%' "使用比",F.TOTAL_BYTES "空閑空間(M)",F.MAX_BYTES "最大塊(M)"
FROM (SELECT TABLESPACE_NAME,Round(Sum(BYTES) / ( 1024 * 1024 ), 2) TOTAL_BYTES,Round(Max(BYTES) / ( 1024 * 1024 ), 2) MAX_BYTESFROM SYS.DBA_FREE_SPACEGROUP BY TABLESPACE_NAME) F,(SELECT DD.TABLESPACE_NAME,Round(Sum(DD.BYTES) / ( 1024 * 1024 ), 2) TOT_GROOTTE_MBFROM SYS.DBA_DATA_FILES DDGROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 1--查詢表空間的free space
select tablespace_name, count(*) AS extends,round(sum(bytes) / 1024 / 1024, 2) AS MB,sum(blocks) AS blocks from dba_free_space group BY tablespace_name;--查詢表空間的總?cè)萘?select tablespace_name, sum(bytes) / 1024 / 1024 as MB from dba_data_files group by tablespace_name;
--查詢表空間使用率
SELECT total.tablespace_name,Round(total.MB, 2) AS Total_MB,Round(total.MB - free.MB, 2) AS Used_MB,Round(( 1 - free.MB / total.MB ) * 100, 2)|| '%' AS Used_Pct
FROM (SELECT tablespace_name,Sum(bytes) / 1024 / 1024 AS MBFROM dba_free_spaceGROUP BY tablespace_name) free,(SELECT tablespace_name,Sum(bytes) / 1024 / 1024 AS MBFROM dba_data_filesGROUP BY tablespace_name) total
WHERE free.tablespace_name = total.tablespace_name;
復(fù)制代碼
上述語句查詢結(jié)果如下圖所示:參考2:
復(fù)制代碼
SELECT a.tablespace_name "表空間名",total "表空間大小",free "表空間剩余大小",( total - free ) "表空間使用大小",Round(( total - free ) / total, 4) * 100 "使用率 %"
FROM (SELECT tablespace_name,Sum(bytes) freeFROM DBA_FREE_SPACEGROUP BY tablespace_name) a,(SELECT tablespace_name,Sum(bytes) totalFROM DBA_DATA_FILESGROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
復(fù)制代碼
查詢結(jié)果參考3
復(fù)制代碼
SELECT TABLESPACE_NAME "表空間",To_char(Round(BYTES / 1024, 2), '99990.00')|| '' "實(shí)有",To_char(Round(FREE / 1024, 2), '99990.00')|| 'G' "現(xiàn)有",To_char(Round(( BYTES - FREE ) / 1024, 2), '99990.00')|| 'G' "使用",To_char(Round(10000 * USED / BYTES) / 100, '99990.00')|| '%' "比例"
FROM (SELECT A.TABLESPACE_NAME TABLESPACE_NAME,Floor(A.BYTES / ( 1024 * 1024 )) BYTES,Floor(B.FREE / ( 1024 * 1024 )) FREE,Floor(( A.BYTES - B.FREE ) / ( 1024 * 1024 )) USEDFROM (SELECT TABLESPACE_NAME TABLESPACE_NAME,Sum(BYTES) BYTESFROM DBA_DATA_FILESGROUP BY TABLESPACE_NAME) A,(SELECT TABLESPACE_NAME TABLESPACE_NAME,Sum(BYTES) FREEFROM DBA_FREE_SPACEGROUP BY TABLESPACE_NAME) BWHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME)
--WHERE TABLESPACE_NAME LIKE 'CDR%' --這一句用于指定表空間名稱
ORDER BY Floor(10000 * USED / BYTES) DESC;
復(fù)制代碼
查詢結(jié)果復(fù)制代碼
select tablespace_name,max_gb,used_gb,round(100 * used_gb / max_gb) pct_usedfrom (select a.tablespace_name tablespace_name,round((a.bytes_alloc - nvl(b.bytes_free, 0)) / power(2, 30),2) used_gb,round(a.maxbytes / power(2, 30), 2) max_gbfrom (select f.tablespace_name,sum(f.bytes) bytes_alloc,sum(decode(f.autoextensible,'YES',f.maxbytes,'NO',f.bytes)) maxbytesfrom dba_data_files fgroup by tablespace_name) a,(select f.tablespace_name, sum(f.bytes) bytes_freefrom dba_free_space fgroup by tablespace_name) bwhere a.tablespace_name = b.tablespace_name(+)union allselect h.tablespace_name tablespace_name,round(sum(nvl(p.bytes_used, 0)) / power(2, 30), 2) used_gb,round(sum(decode(f.autoextensible,'YES',f.maxbytes,'NO',f.bytes)) / power(2, 30),2) max_gbfrom v$temp_space_header h, v$temp_extent_pool p, dba_temp_files fwhere p.file_id(+) = h.file_idand p.tablespace_name(+) = h.tablespace_nameand f.file_id = h.file_idand f.tablespace_name = h.tablespace_namegroup by h.tablespace_name)
order by 4;
------------------------------------------------------------------------------------