日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle 同义词、DBLINK、表空间的使用

發布時間:2024/4/13 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 同义词、DBLINK、表空间的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Oracle 同義詞

Oracle同義詞創建及其作用 Oracle的同義詞(synonyms)從字面上理解就是別名的意思,和試圖的功能類似,就是一種映射關系。本文介紹如何創建同義詞語句,刪除同義詞以及查看同義詞語句。oracle的同義詞總結:從字面上理解就是別名的意思,和試圖的功能類似。就是一種映射關系。1.創建同義詞語句:create public synonym table_name for user.table_name;其中第一個user_table和第二個user_table可以不一樣。此外如果要創建一個遠程的數據庫上的某張表的同義詞,需要先創建一個Database Link(數據庫連接)來擴展訪問,然后在使用如下語句創建數據庫同義詞:create synonym table_name for table_name@DB_Link;當然,你可能需要在user用戶中給當前用戶(user2)授權: grant select/delete/update on user22.刪除同義詞:drop public synonym table_name;3.查看所有同義詞:select * from dba_synonyms同義詞擁有如下好處:節省大量的數據庫空間,對不同用戶的操作同一張表沒有多少差別;擴展的數據庫的使用范圍,能夠在不同的數據庫用戶之間實現無縫交互;同義詞可以創建在不同一個數據庫服務器上,通過網絡實現連接。 Oracle數據庫中提供了同義詞管理的功能。Oracle同義詞是數據庫方案對象的一個別名,經常用于簡化對象訪問和提高對象訪問的安全性。 AD:在Oracle中對用戶的管理是使用權限的方式來管理的,也就是說,如果我們想使用數據庫,我們就必須得有權限,但是如果是別人將權限授予了我們,我們也是能對數據庫進行操作的,但是我們必須要已授權的表的名稱前鍵入該表所有者的名稱,所以這就是比較麻煩的,遇到這種情況,我們該怎么辦呢?創建個Oracle同義詞吧!這樣我們就可以直接使用同義詞來使用表了。 1.同義詞的概念 Oracle數據庫中提供了同義詞管理的功能。同義詞是數據庫方案對象的一個別名,經常用于簡化對象訪問和提高對象訪問的安全性。在使用同義詞時,Oracle數據庫將它翻譯成對應方案對象的名字。與視圖類似,同義詞并不占用實際存儲空間,只有在數據字典中保存了同義詞的定義。在Oracle數據庫中的大部分數據庫對象,如表、視圖、同義詞、序列、存儲過程、包等等,數據庫管理員都可以根據實際情況為他們定義同義詞。 2.Oracle同義詞的分類 Oracle同義詞有兩種類型,分別是公用Oracle同義詞與私有Oracle同義詞。 1)公用Oracle同義詞:由一個特殊的用戶組Public所擁有。顧名思義,數據庫中所有的用戶都可以使用公用同義詞。公用同義詞往往用來標示一些比較普通的數據庫對象,這些對象往往大家都需要引用。 2)私有Oracle同義詞:它是跟公用同義詞所對應,他是由創建他的用戶所有。當然,這個同義詞的創建者,可以通過授權控制其他用戶是否有權使用屬于自己的私有同義詞。 3.Oracle同義詞創建及刪除 創建公有Oracle同義詞的語法:Create [public] synonym 同義詞名稱 for [username.]objectName; Drop [public] synonym 同義詞名稱 4.Oracle同義詞的作用 1) 多用戶協同開發中,可以屏蔽對象的名字及其持有者。如果沒有同義詞,當操作其他用戶的表時,必須通過user名.object名的形式,采用了Oracle同義詞之后就可以隱蔽掉user名,當然這里要注意的是:public同義詞只是為數據庫對象定義了一個公共的別名,其他用戶能否通過這個別名訪問這個數據庫對象,還要看是否已經為這個用戶授權。 2) 為用戶簡化sql語句。上面的一條其實就是一種簡化sql的體現,同時如果自己建的表的名字很長,可以為這個表創建一個Oracle同義詞來簡化sql開發。 3)為分布式數據庫的遠程對象提供位置透明性。 5.Oracle同義詞在數據庫鏈中的作用 數據庫鏈是一個命名的對象,說明一個數據庫到另一個數據庫的路徑,通過其可以實現不同數據庫之間的通信。 Create database link 數據庫鏈名 connect to user名 identified by 口令 using ‘Oracle連接串’; 訪問對象要通過 object名@數據庫鏈名。同義詞在數據庫鏈中的作用就是提供位置透明性 ------------------------------------------------------------------ Oracle同義詞創建及分配用戶創建同義詞權限 (1)--授權某個用戶crate synonym的權限,若用戶名為scott grant create synonym to scott (2)--創建同義詞 create [or replace] synonym syn_name from table_name; (3)--撤銷scott創建同義詞的權限 revoke create synonym from scott; (4)--刪除同義詞 Drop synonym syn_name注:在副表上創建同義詞create or replace synonym JC_GROUP1(對應副表中的組織機構表) for wlmqpb.ZHPT_DEPT(主表的數據庫名.主表的組織機構表);這樣創建成功后就可以直接在副表select ------------------------------------------------------------------------ Oracle的同義詞(synonyms)總結synonyms 英['s?n?n?mz] 美['s?n?n?mz] 同義詞( synonym的名詞復數 );和視圖的功能類似,是一種映射關系。(1)創建同義詞的語法create public synonym table_name for user.table_name;其中第一個user_table和第二個user_table可以不一樣。此外如果要創建一個遠程的數據庫上的某張表的同義詞,需要先創建一個Database Link(數據庫連接)來擴展訪問,然后在使用如下語句創建數據庫同義詞:create synonym table_name for table_name@DB_Link;create or replace synonym MONTHHOURS for HO_DEPT_MONTHHOURS@TRAININGLINK;你可能需要在user用戶中給當前用戶(user2)授權: grant select/delete/update on user2(2)刪除同義詞drop public synonyms table_name;(3)查詢所有同義詞select * from dba_synonyms;同義詞擁有如下好處:節省大量的數據庫空間,對不同用戶的操作同一張表沒有多少差別;擴展的數據庫的使用范圍,能夠在不同的數據庫用戶之間實現無縫交互;同義詞可以創建在不同一個數據庫服務器上,通過網絡實現連接 ------------------------------------------------------------------------------

DBLINK

1.查看dblinkselect owner,object_name from dba_objects where object_type='DATABASE LINK'; 或者select * from dba_db_links; 2.創建dblink 前提:創建dblink的用戶有對應的數據庫權限create public database link 或者create database link?可以使用grant create public database link,create database link to myAccount;來授權. 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,則創建的dblink就不是公共的,就只有創建者可以使用了. 補充:如何確定數據庫的servicename:1.在sqlplus中使用show parameter[s] service_names;注意parameter和parameters都可以2.使用select name,value from v$parameter where name='service_names'3.使用db link例如,在本機數據庫上創建了一個scott_rmthost的publicdblink(使用遠程主機的scott用戶連接),則用sqlplus連接到本機數據庫,執行select * fromscott.emp@scott_rmthot即可以將遠程數據庫上的scott用戶下的emp表中的數據獲取到.也可以在本地建一個同義詞來指向scott.emp@scott_rmthost,這樣取值就方便多了. 4.刪除注意:用戶有createpublic database link 或者create database link 權限.drop public database link dblinkname; --------------------- Oracle 創建 DBLink 的方法 當用戶要跨本地數據庫,訪問另外一個數據庫表中的數據時,本地數據庫中必須創建了遠程數據庫的dblink,通過dblink本地數據庫可以像訪問本地數據庫一樣訪問遠程數據庫表中的數據。下面講介紹我之前項目中如何在本地數據庫中創建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 :表示 遠程數據庫的用戶dbPassword:表示 遠程數據庫的密碼HOST : 表示遠程數據庫IPPORT : 表示遠程數據庫端口SERVICE_NAME : 遠程數據庫的實例名-- 查詢、刪除和插入數據和操作本地的數據庫是一樣的,只不過表名需要寫成“表名@dblink服務器”而已。 例如:如果想在本地數據庫中通過dblink訪問遠程數據庫'orcl'中dbName.tb_test表,sql語句如下所示select * from db.tb_test@TestDblink;DBLINK其他相關的知識:1、查看所有的數據庫鏈接,登錄管理員查看 select owner,object_name from dba_objects where object_type='DATABASE LINK'; 2.刪除數據庫連接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創建dblink報錯:ORA-01017、ORA-02063解決: 根據ORA-01017的提示是連接到另一方的用戶密碼錯誤,當9i或10g的版本的Oracle數據庫連接11g的版本時,會自動將密碼轉化為大寫。 **密碼最好用雙引號引起來,否則可能在連接的時候報錯create database link dblink名connect to 數據庫用戶名 identified by "數據庫密碼"using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))'; ?-- 如果創建全局 dblink,必須使用 systm 或 sys 用戶,在 database 前加 public。 ? create public database link dblink名connect to 數據庫用戶名 identified by "數據庫密碼"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》 創建表空間:Create tablespace tablespace_nameDatafile ‘E:\oracle\tablespace_datafile.dbf’ size 20MAutoextend onNext 5MMaxsize 50M;2》 添加數據文件:Alter tablespace tablespace_nameAdd datafile ‘E:\oracle\tablespace_new_add_datafile.dbf’Size 20MAutoextnend off;3》 更改數據文件大小:Alter database datafile ‘E:\oracle\tablespace_datafile.dbf’Resize 50M4》 更改表數據文件自增:Alter database datafile ‘E:\oracle\tablespace_new_add_datafile.dbf’Autoextend on5》 查詢所有表空間名字等 :user_tablespaces;6》 查詢默認表空間,臨時表空間:user_users7》 查詢表空間空閑情況:dba_free_space8》 查詢數據文件:dba_data_files9》 查詢表空間狀態:dba_tablespaces10》 移動數據文件:① :alter tablespace tablespace_name offline② :物理硬盤上移動數據文件③ :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;(刪除內容和文件)臨時表空間: 1》 創建臨時表空間:Create temporary tablespace tablespace_nameTempfile ‘E:\oracle\temptablespace_datafile.dbf’Size 5MAutoextend onNext 3MMaxsize 10M2》 添加數據文件:Alter tablespace tablespace_nameAdd tempfile ‘E:\oracle\temptablespace_new_add_datafile.dbf’Size 5M;3》 更改數據文件大小:4》 更改臨時文件狀態:Alter database tempfile ‘E:\oracle\temptablespace_datafile.dbf’ offline5》 創建臨時表空間組:Create temporary tablespace temptablespace_nameTempfile ‘E:\oracle\temptablespace_datafile.dbf’Size 5MTablespace group tablespace_group_name6》 把臨時表空間添加到表空間組: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;查看表數據文件情況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;查看數據庫的版本 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       總字節數, (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系統用戶的默認表空間和臨時表空間 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.查詢當前用戶默認表空間的使用情況 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; #指定區尺寸為128k,如不指定,區尺寸默認為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中查看剛創建的表空間的信息 二、建立UNDO表空間 CREATE UNDO TABLESPACE test_undo DATAFILE 'c:/oracle/oradata/db/test_undo.dbf' SIZE 50M UNDO表空間的EXTENT是由本地管理的,而且在創建時的SQL語句中只能使用DATAFILE和EXTENT MANAGEMENT子句。 ORACLE規定在任何時刻只能將一個還原表空間賦予數據庫,即在一個實例中可以有多個還原表空間存在,但只能有一個為活動的。可以使用ALTER SYSTEM命令進行還原表空間的切換。 SQL> ALTER SYSTEM SET UNDO_TABLESPACE = test_undo; 三、建立臨時表空間 CREATE TEMPORARY TABLESPACE test_temp TEMPFILE '/oracle/oradata/db/test_temp.dbf' SIZE 50M 查看系統當前默認的臨時表空間 select * from dba_properties where property_name like 'DEFAULT%' 改變系統默認臨時表空間 alter database default temporary tablespace test_temp; 四、改變表空間狀態 1.使表空間脫機 ALTER TABLESPACE test OFFLINE; 如果是意外刪除了數據文件,則必須帶有RECOVER選項 ALTER TABLESPACE game test FOR RECOVER; 2.使表空間聯機 ALTER TABLESPACE test ONLINE; 3.使數據文件脫機 ALTER DATABASE DATAFILE 3 OFFLINE; 4.使數據文件聯機 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 子句用來刪除數據文件 3. CASCADE CONSTRAINTS 子句用來刪除所有的引用完整性約束 六、擴展表空間 首先查看表空間的名字和所屬文件 select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name; 1.增加數據文件 ALTER TABLESPACE test ADD DATAFILE '/oracle/oradata/db/test02.dbf' SIZE 1000M; 2.手動增加數據文件尺寸 ALTER DATABASE DATAFILE 'c:/oracle/oradata/db/test01.dbf' RESIZE 100M; 3.設定數據文件自動擴展 ALTER DATABASE DATAFILE 'c:/oracle/oradata/db/test01.dbf' AUTOEXTEND ON NEXT 100M MAXSIZE 200M; 設定后可從dba_tablespace中查看表空間信息,從v$datafile中查看對應的數據文件信息 ================================================================================== 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創建表空間 SYS用戶在CMD下以DBA身份登陸: 在CMD中打sqlplus /nolog 然后再 conn / as sysdba //創建臨時表空間 create temporary tablespace user_temp tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; //創建數據表空間 create tablespace test_data logging datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; //創建用戶并指定表空間 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; --查詢表空間的總容量 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 #指定區尺寸為128k ,塊大小為默認8K #大文件表空間 create bigfile tablespace big_tbs datafile '/u01/big_tbs.dbf ' size 100G 2.建非標準表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 #常見錯誤 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.查看區大小與塊大小#區大小 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(默認64K) #非標準表空間的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.查表空間:#查數據文件 select * from v$dbfile; #所有表空間 select * from v$tablespace; #表空間的數據文件 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.建立臨時表空間create temporary tablespace temp_data tempfile '/u01/temp.db' size 5M; create bigfile temporary tablespace bigtem tempfile '/u01/bigtemp.db' size 5M; 8.改變表空間狀態 (0.)查看狀態 #表空間狀態 select tablespace_name,block_size,status from dba_tablespaces; #數據文件狀態 select name,block_size,status from v$datafile; (1.)表空間脫機alter tablespace test offline #如果意外刪除了數據文件 alter tablespace test offline for recover (2.)表空間聯機alter tablespace test online (3.)數據文件脫機select * from v$dbfile; alter database datafile 3 offline (4.)數據文件聯機recover datafile 3; alter database datafile 3 online; (5.)使表空間只讀alter tablespace test read only (6.)使表空間可讀寫alter tablespace test read write; 9.擴展表空間#首先查看表空間的名字和所屬文件及空間 select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name; #三種擴展方法 1.alter tablespace test add datafile '/u01/test02.dbf' size 10M(自動加一個datafile) 2.alter database datafile '/u01/test.dbf' resize 20M; 3.alter database datafile '/u01/test.dbf' autoextend on next 10M maxsize 1G; #設定后查看表空間信息 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.移動表空間的數據文件 #先確定數據文件據在表空間 SQL>select tablespace_name,file_name from dba_data_files where file_name='/u01/test.dbf'; #open狀態 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狀態 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.表空間和數據文件常用的數據字典與動態性能視圖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; --查詢表空間的總容量 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; //給用戶授予權限 grant connect,resource to username; //以后以該用戶登錄,創建的任何數據庫對象都屬于user_temp 和user_data表空間, 這就不用在每創建一個對象給其指定表空間了 撤權: revoke 權限... from 用戶名; 刪除用戶命令 drop user user_name cascade; 建立表空間 CREATE TABLESPACE data01 DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M UNIFORM SIZE 128k; #指定區尺寸為128k,如不指定,區尺寸默認為64k 刪除表空間 DROP TABLESPACE data01 INCL ING CONTENTS AND DATAFILES; 一、建立表空間 CREATE TABLESPACE data01 DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M UNIFORM SIZE 128k; #指定區尺寸為128k,如不指定,區尺寸默認為64k 二、建立UNDO表空間 CREATE UNDO TABLESPACE UNDOTBS02 DATAFILE '/oracle/oradata/db/UNDOTBS02.dbf' SIZE 50M #注意:在OPEN狀態下某些時刻只能用一個UNDO表空間,如果要用新建的表空間,必須切換到該表空間: ALTER SYSTEM SET undo_tablespace=UNDOTBS02; 三、建立臨時表空間 CREATE TEMPORARY TABLESPACE temp_data TEMPFILE '/oracle/oradata/db/TEMP_DATA.dbf' SIZE 50M 四、改變表空間狀態 1.使表空間脫機 ALTER TABLESPACE game OFFLINE; 如果是意外刪除了數據文件,則必須帶有RECOVER選項 ALTER TABLESPACE game OFFLINE FOR RECOVER; 2.使表空間聯機 ALTER TABLESPACE game ONLINE; 3.使數據文件脫機 ALTER DATABASE DATAFILE 3 OFFLINE; 4.使數據文件聯機 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; 六、擴展表空間 首先查看表空間的名字和所屬文件 select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name; 1.增加數據文件 ALTER TABLESPACE game ADD DATAFILE '/oracle/oradata/db/GAME02.dbf' SIZE 1000M; 2.手動增加數據文件尺寸 ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf' RESIZE 4000M; 3.設定數據文件自動擴展 ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf AUTOEXTEND ON NEXT 100M MAXSIZE 10000M; 設定后查看表空間信息 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 ---------------------------------------------------------------------- 背景 今天發現有一張采樣表從1月5號開始不記錄數據了,所以想查看一下表空間使用率,在網上零零散散找了很多資料,現在記錄如下,也不知道哪一個最準確。還有一個就是網上拷貝的sql代碼格式太亂了,不好看,找到一個在線格式化工具。參考1 復制代碼 --查詢表空間使用情況 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;--查詢表空間的總容量 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; 復制代碼 上述語句查詢結果如下圖所示:參考2: 復制代碼 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 復制代碼 查詢結果參考3 復制代碼 SELECT TABLESPACE_NAME "表空間",To_char(Round(BYTES / 1024, 2), '99990.00')|| '' "實有",To_char(Round(FREE / 1024, 2), '99990.00')|| 'G' "現有",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; 復制代碼 查詢結果復制代碼 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; ------------------------------------------------------------------------------------

?

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的Oracle 同义词、DBLINK、表空间的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。