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;
------------------------------------------------------------------------------------

Oracle 同义词、DBLINK、表空间的使用相关推荐

  1. oracle 同义词,表空间,表分区

    同义词:synonym 私有同义词: 一般普通用户自己建立的同义词,用于创建这需要create synonym权限 grant create synonym to scott; create syno ...

  2. oracle 10g磁盘管理,Oracle 10g UNDO表空间过大导致磁盘空间不足的解决

    在Oracle 10g数据库的应用中,出现了UNDO表空间过大导致磁盘空间不足而崩溃的现象(ORA-30036: unable to extend segment by 8 in undo table ...

  3. Oracle 基础篇 --- 表空间的操作

    2019独角兽企业重金招聘Python工程师标准>>> ###更改表空间 ####1 重命名表空间 将表空间 /home/oracle/app/oracle/product/11.2 ...

  4. Oracle的逻辑结构(表空间、段、区间、块)——Oracle数据块(一)

    Oracle 的逻辑结构 ( 表空间.段.区间.块 ) --块 Oracle 存储数据的最小单位是数据块.Oracle 管理 数据库 数据文件的存储空间被称为数据块,一个数据块是数据库使用的最小数据单 ...

  5. oracle中表空间创建,Oracle 如何创建表空间

    在Oracle中如何创建表空间呢?主要有两种方式:一种是用sql命令的方式,另外一种是通过Oracle客户端Enterprise Manager Console来创建.下面分别介绍一下: 1 通过sq ...

  6. [Oracle]理解undo表空间

    [Oracle]理解undo表空间 一.回退段介绍 在Oracle数据库中,当某个事物对数据进行修改时,Oracle首先将数据的原始值保存到一个回退段中.一个事物只能将它的回退信息保存到一个回退段中, ...

  7. Oracle数据库查看表空间sql语句、查看Oracle数据库表空间剩余 、修改表空间、库备份

    一  Oracle数据库查看表空间sql语句 1.oracle查看表空间当前用户 SQL>  select  username,default_tablespace  from user_use ...

  8. Linux下和Windows下创建Oracle数据库,表空间,Oracle用户

    通过SSH工具或是XShell工具进入远程Linux下. 其中,通过SSH工具登录的界面如下: 其中Host Name是远程服务器的ip地址.User Name是服务器的一个用户名,端口号默认22,C ...

  9. oracle undo 缩小,缩小Oracle的系统表空间(SYSTEM、TEMP、UNDOTBS1、SYSAUX)

    缩小Oracle的系统表空间(SYSTEM.TEMP.UNDOTBS1.SYSAUX) 一.基础环境 操作系统:Windows 或 Linux 数据库版本:Oracle Database 11.2.0 ...

  10. Oracle笔记之表空间

    Oracle中有一个表空间的概念,一个数据库可以有好几个表空间,表放在表空间下. 1. 创建表空间 创建表空间使用create tablespace命令: CREATE TABLESPACE foo_ ...

最新文章

  1. 关于JVM 内存的 N 个高频面试问题!
  2. 形态数轴上的反密码子和氨基酸
  3. oracle数据库更改字符集
  4. Enter Further Contact Person error message
  5. DEEPIN教程 - 本地安装Typora
  6. ORACLE查询通用查询被锁对象以及解锁方案
  7. 芝加哥计算机科学硕士录取难度,美国cs研究生申请难度有多大?
  8. IMA-ADPCM 算法
  9. 音视频的采集、编码、封包成 mp4 输出
  10. 漫话:如何给女票解释华为鸿蒙OS是怎样牛逼实现跨平台的?
  11. 火狐浏览器 附件组件 Xpath 使用
  12. 南京邮电大学通信考研经验
  13. 11月全国程序员平均工资出炉,我给同行丢脸了。。。
  14. 隐藏式超远无线充电,可隔空5~10公分正常充电。
  15. HCE技术在城市一卡通中的应用探讨
  16. java 传参数报文给and_技术岛-技术改变生活
  17. 运行删除指定文件库rimraf
  18. 步步精心,打造高德 AR 实景步行导航(设计篇)
  19. css3切角文本框_CSS3如何实现4个切角
  20. TSC打印机打印条形码和二维码,applet实现方式

热门文章

  1. HTML5+CSS3构建同页面表单间的动画切换
  2. 【Redis学习】Redis数据类型及存储结构
  3. %@taglib prefix=c uri=http://java.sun.com/jsp/jst1/core%报错
  4. [转]Tomcat优化之内存、并发、缓存
  5. VIJOS 1052贾老二算算术 (高斯消元)
  6. Sass 基础(三)
  7. 打造自己的XP+SP3无人值守安装光盘
  8. 60 分钟极速入门 PyTorch
  9. 腾达fh365虚拟服务器,腾达(Tenda)FH365路由器怎么设置?
  10. java求任意个数集合的笛卡尔积,Java中任意集的笛卡尔积