oracle临时表空间的增删改查操作(精)
- 格式:doc
- 大小:18.50 KB
- 文档页数:6
oracle创建表空间、用户如果是在Windows系统下,请先点击“开始”,然后点“运行”,输入cmd并点击“确定”,打开命令行窗口如果是在Linux的图形窗口,请右键点击桌面并点击“打开终端”,然后输入su - oracl 做好上述准备工作以后,输入以下命令:sqlplus /nolog回车后,将出现提示符SQL>这时输入conn / as sysdba一般即可登录,如果失败的话,可以试一下用conn sys/sys用户的密码as sysdba来重试一下接下来,我们看看您当前的数据库文件一般都是放在哪里的:select name from v$datafile;windows下可能看到的结果如下:SQL> select name from v$datafile;NAME--------------------------------------------------------------------------------D:\oracle\oradata\orcl\system01.dbfD:\oracle\oradata\orcl\undotbs01.dbfD:\oracle\oradata\orcl\cwmlite01.dbfD:\oracle\oradata\orcl\drsys01.dbfD:\oracle\oradata\orcl\indx01.dbfD:\oracle\oradata\orcl\tools01.dbf说明您的数据文件是放在D:\oracle\/oradata\orcl\ 这个目录下的Linux下可能看到的结果如下:SQL> select name from v$datafile;NAME--------------------------------------------------------------------------------/oracle/oradata/orcl/system01.dbf/oracle/oradata/orcl/undotbs01.dbf/oracle/oradata/orcl/cwmlite01.dbf/oracle/oradata/orcl/drsys01.dbf/oracle/oradata/orcl/indx01.dbf/oracle/oradata/orcl/tools01.dbf说明您的数据文件是放在/oracle/oradata/orcl/ 这个目录下的好,我们可以开始创建数据库表空间了,创建数据库表空间的命令格式如下:create tablespace 表空间名datafile '对应的文件名' size 大小;举例如下:对于上述的windows情况:create tablespace wbppcs datafile 'D:\oracle\oradata\orcl\wbppcs.dbf' size 3000m;3000m指的是3000MB对于上述的Linux的情况:create tablespace wbppcs datafile '/oracle/oradata/orcl/wbppcs.dbf' size 3000m;至此,所需的表空间已建立接下来我们开始创建用户,创建用户的命令格式如下:create user 用户名identified by 密码default tablespace 用户默认使用哪一个表空间;修改用户的权限:grant 角色1,角色2 to 用户名;举例如下:create user wbppcs identified by wbppcs123 default tablespace wbppcs;给用户授权:grant dba, connect to wbppcs;=============================================================================== ==============================================================oracle创建表空间和用户授权SYS用户在CMD下以DBA身份登录:在CMD中打sqlplus/nolog //匿名登录然后再conn/as sysdba //以dba身份登录//创建临时表空间create temporary tablespace bigoa_temptempfile 'E:\oracle\product\10.2.0\oradata\orcl\bigoa_temp.dbf'size 50mautoextend onnext 50m maxsize 2048mextent management local;//创建数据表空间create tablespace bigoaloggingdatafile'E:\oracle\product\10.1.0\oradata\orcl\bigoa.dbf'size 50mautoextend onnext 50m maxsize 2048mextent management local;//查看数据表空间select tablespace_name from dba_data_files;//创建用户并指定表空间create user swoa identified by oadefault tablespace bigoatemporary tablespace temp;//给用户授予权限grant connect,resource,dba,CTXAPP,create view to swoa;以后以该用户登录,创建的任何数据库对象都属于user_temp和user_data表空间,这就不用在每创建一个对象给其指定表空间了//修改用户口令alter user user_name identified by password;撤权:revoke 权限... from 用户名;删除用户命令drop user swoa cascade;//删除表空间drop tablespace bigoa_temp including contents and datafiles cascade constraints;//including contents 删除表空间的内容,如果删除表空间之前表空间中有内容,而未加此参数,表空间删不掉//cascade constraints 同时删除tablespace中表的外键参照//数据导出注:退出到cmd命令下再运行下列命令1、将数据库TEST完全导出,用户名system密码manager,导出到D:daochu.dmp中exp pobaoa/oa@orcl file=d:/zyoa0809.dmp full=y //不用加full=y,加上的意思是连同系统表一起导出exp sjsoa/oa@orcl file=d:/sjsoa1224.dmp full=y //不用加full=y,加上的意思是连同系统表一起导出2、将数据库中system用户与sys用户的表导出exp system/manager@TEST file=d:daochu.dmp owner=(system,sys)3、将数据库中的表inner_notify notify_staff_relat导出exp aichannel/aichannel@TESTDB2 file=d:datanewsmgnt.dmp tables=(inner_notify,notify_staff_relat)exp swoa/oa@orcl file=f:/swoa11.dmp tables=(OA_CALENDAR)exp bigoa/bigoa@orcl file=f:/bigoatemp.dmp tables=(OA_CALENDAR)4、将数据库中的表table1中的字段field1以“00”开头的数据导出exp system/manager@TEST file=d:daochu.dmp tables=(table1) query="where filed1 like '00%'"//数据导入注:退出到cmd命令下再运行下列命令1、将D:daochu.dmp中的数据导入TEST数据库中imp aichannel/aichannel@HUST full=y file=d:datanewsmgnt.dmp ignore=y有的表已经存在,所以会报错,加上ignore=y就可以了imp pobaoa/oa@orcl file=f:\zyoa0916.dmp full=y ignore=yimp sjsoa/oa@orcl file=f:/bigoatemp.dmp full=y2、将d:daochu.dmp中的表table1导入imp system/manager@TEST file=d:daochu.dmp tables=(table1)select INSTANCEID,NID,TITLE,NODENAME,ASSIGNER,NODEBEGIN,initiatorname,'办理状态'As blzt from view_wf_todo where actor='%USERID%' order by nodebegin descsqlplus / as sysdba。
Oracle表空间大文件表空间,小文件表空间大文件表空间只能放置一个数据文件,但是这个数据文件可以包含4G个数据块。
小文件表空间可以放置1024个数据文件。
System,sysaux表空间被创建为小文件表空间,默认如果不指定的话是创建的小文件表空间。
表空间的的区段管理方式:区管理方式分为两种:数据字典管理方式和本地管理方式在创建数据字典管理方式的表空间时,可以在default storage字句中设置initial,next,minextents,naxextents,pciincrease等参数来设置区的存储管理方式,这样如果在这种表空间中创建表,索引等方案对象时,没有使用default storage字句,他们就会自动机继承表空间的存储参数设置。
本地管理方式:本地管理方式可以通过两个关键字来指定表空间的区的分配方式Uniform:统一分配,所有区的大小都相同Autoallocate:自动分配,这是默认分配方式,区的大小随着表的大小自动的改变。
在这种表空间中,创建所有的方案对象都不用storage来设置initial,next,minextents,naxextents,pciincrease等参数,即使设置了也会被忽略。
段管理方式:段管理方式主要是指oracle用来管理段中已用数据块和空闲数据块的机制。
包括:1.manual:这时,oracle使用可用列表来管理段的空闲数据块,这是默认设置2.auto:这时,oracle使用位图来管理段的已用数据块和空闲数据块。
可用列表是传统的段管理方式,段中所有的空闲数据块都被放入一个列表中,在需要存储空间时就在该列表中进行搜索。
位图采用自动方式能够提供更好的存储利用率,在这种模式下,用户不需要在创建方案对象时指定pctfree,pctused,freelist,freelist group等参数来设置段的存储管理方式,即使设置了也会被忽略。
表空间的状态:读写状态和脱机状态脱机状态:normal状态,temporary状态,immediate状态,for recovry状态。
Oracle tablespace (表空间)的创建、删除、修改、扩展及检查等oracle 数据库表空间的作用1.决定数据库实体的空间分配;2.设置数据库用户的空间份额;3.控制数据库部分数据的可用性;4.分布数据于不同的设备之间以改善性能;5.备份和恢复数据。
--oracle 可以创建的表空间有三种类型:1.temporary: 临时表空间,用于临时数据的存放;create temporary tablespace "sample"......2.undo : 还原表空间. 用于存入重做日志文件.create undo tablespace "sample"......3.用户表空间: 最重要,也是用于存放用户数据表空间create tablespace "sample"......--注:temporary 和undo 表空间是oracle 管理的特殊的表空间.只用于存放系统相关数据.--oracle 创建表空间应该授予的权限1.被授予关于一个或多个表空间中的resource特权;2.被指定缺省表空间;3.被分配指定表空间的存储空间使用份额;4.被指定缺省临时段表空间。
select tablespace_name "表空间名称",status "状态",extent_management "区管理方式",allocation_type "磁盘扩展管理方式",segment_space_management "段管理方式" from dba_tablespaces;--查询各个表空间的区、段管理方式--1、建立表空间--语法格式:create tablespace 表空间名datafile '文件标识符' 存储参数[...]|[minimum extent n] --设置表空间中创建的最小范围大小|[logging|nologging]|[default storage(存储配置参数)]|[online|offline]; --表空间联机\脱机|[permanent|temporary] --指定该表空间是用于保存永久的对象还是只保存临时对象 |[...]--其中:文件标识符=’文件名’[size整数[k\m][reuse]--实例create tablespace data01datafile '/oracle/oradata/db/data01.dbf' size 500muniform size 128k; --指定区尺寸为128k,如不指定,区尺寸默认为64kcreate tablespace "test"loggingdatafile 'd:\oracle\oradata\oracle\sample.ora' size 5m,'d:\oracle\oradata\oracle\dd.ora' size 5mextent management localuniform segment space managementauto;--详解/*第一: create tablespace "sample"创建一个名为"sample" 的表空间.对表空间的命名,遵守oracle 的命名规范就可了. 第二: logging 有nologging 和logging 两个选项,nologging: 创建表空间时,不创建重做日志.logging 和nologging正好相反, 就是在创建表空间时生成重做日志.用nologging时,好处在于创建时不用生成日志,这样表空间的创建较快,但是没能日志,数据丢失后,不能恢复;但是一般我们在创建表空间时,是没有数据的,按通常的做法,是建完表空间,并导入数据后,是要对数据做备份的;所以通常不需要表空间的创建日志,因此,在创建表空间时,选择nologging,以加快表空间的创建速度.第三: datafile 用于指定数据文件的具体位置和大小.datafile 的文件是建立表空间后创建的,不过文件路径必须存在才是合法的datafile设置如: datafile 'd:\oracle\oradata\ora92\luntan.ora' size 5m说明文件的存放位置是'd:\oracle\oradata\ora92\luntan.ora' , 文件的大小为5m.如果有多个文件,可以用逗号隔开:如:datafile 'd:\oracle\oradata\ora92\luntan.ora' size 5m, 'd:\oracle\oradata\ora92\ dd.ora' size 5m但是每个文件都需要指明大小.单位以指定的单位为准如5m 或500k.对具体的文件,可以根据不同的需要,存放大不同的介质上,如磁盘阵列,以减少io竟争. 指定文件名时,必须为绝对地址,不能使用相对地址.第四: extent management local 存储区管理方法在字典中管理(dictionary):将数据文件中的每一个存储单元做为一条记录,所以在做dm操作时,就会产生大量的对这个管理表的delete和update操作.做大量数据管理时,将会产生很多的dm操作,严得的影响性能,同时,长时间对表数据的操作,会产生很多的磁盘碎片.本地管理(local):用二进制的方式管理磁盘,有很高的效率,同进能最大限度的使用磁盘.同时能够自动跟踪记录临近空闲空间的情况,避免进行空闲区的合并操作。
Oracle的crud操作Crud操作就是c (create) r (retrieve/read) u (update) d(delete)Insert添加操作1、插入的数据应与字段的数据类型相同Create table test10(id number);insert into test10(id)values(12);2、数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中Create table test11(name varchar2(2));insert into test11(name)values(‘ssss’);错误3、在values中列出的数据位置必须与被加入的列的排列位置相对应Create table test12( id number, name varchar2(64));Insert into test12 (id,name) values (‘shunping’,12);错误4、字符和日期数据应包含在单引号中Create table test13 (name varchar2(64),birthday);Insert into test13(name ,birthday)values(shunping,11-may-11);错误5、插入空值,不指定或insert into table value(null)Create table test14(name varchar2(64),age number);Insert into test14(name,age) values(‘shunping’,null);正确6、如果给表的每一列都添加值的话,则可以不带列名Insert into 表名values(列值...);向students中添加数据insert into students values(1,'zs','n','11-may-13',23.34,'hello'); insert into students values(2,'ls','n','11-may-13',23.34,'hello2'); insert into students values(3,'ww','s','11-july-13',23.34,'hello3'); Update 操作1、基本语法Update 表名set 列名=表达式[列名=表达式,....] where 条件2、使用的注意事项(1)update语法可以新值更新原有表行中的各列把zs这个人的性别改成supdate students set sex='s' where name='zs';Set 字句指示要修改哪些列和要修改哪些值把zs这个人的奖学金改为 10update students set fellowship=10 where name='zs';把所有学生的奖学金都提高10%update students set fellowship=fellowship*1.1;Where字句指定应更新哪些行。
C#--Oracle数据库基本操作(增、删、改、查)写在前⾯:常⽤数据库:类似于上篇有关SQLserver的C#封装,⼩编对Oracle数据库进⾏了相应的封装,⽅便后期开发使⽤,主要包括Oracle数据库的连接、增、删、改、查,如有什么问题还请各位⼤佬指教。
后续也将对其他⼏个常⽤的数据库进⾏相应的整理。
话不多说,直接开始码代码。
引⽤:由于微软在.框架4.0中已经决定撤销使⽤System.Data.OracleClient,造成在VS中⽆法连接Oracle数据库,但它还依旧存在于.架构中,我们可以通过⾃⼰引⽤。
具体⽅法如下:(1)在需要引⽤的程序集引⽤⽂件夹上右击,选择添加引⽤(2)选择浏览选项(3)找到⽬录 C:\Windows\Microsoft.\Framework\v2.0.50727(4)找到 System.Data.OracleClient.dll ⽂件(5)点击确定。
OK,引⽤完成using System.Data; //DataSet引⽤集using System.Data.OracleClient; //oracle引⽤先声明⼀个SqlConnectionprivate OracleConnection oracle_con;//声明⼀个OracleConnection⽅便使⽤Oracle打开:/// <summary>/// Oracle open/// </summary>/// <param name="link">link statement</param>/// <returns>Success:success; Fail:reason</returns>public string Oracle_Open(string link){ try { oracle_con = new OracleConnection(link); oracle_con.Open(); return "success"; } catch (Exception ex) { return ex.Message; }}Oracle关闭:/// <summary>/// Oracle close/// </summary>/// <returns>Success:success Fail:reason</returns>public string Oracle_Close(){ try { if (oracle_con == null) { return "No database connection"; } if (oracle_con.State == ConnectionState.Open) { oracle_con.Close(); oracle_con.Dispose(); } else { if (oracle_con.State == ConnectionState.Closed) { return "success"; } if (oracle_con.State == ConnectionState.Broken) { return "ConnectionState:Broken"; } } return "success"; } catch (Exception ex) { return ex.Message; }}Oracle的增删改:/// <summary>/// Oracle insert,delete,update/// </summary>/// <param name="sql">insert,delete,update statement</param>/// <returns>Success:success + Number of affected rows; Fail:reason</returns>public string Oracle_Insdelupd(string sql){ try { int num = 0; if (oracle_con == null) { return "Please open the database connection first"; } if (oracle_con.State == ConnectionState.Open) { OracleCommand oracleCommand = new OracleCommand(sql, oracle_con); num = oracleCommand.ExecuteNonQuery(); } else { if (oracle_con.State == ConnectionState.Closed) { return "Database connection closed"; } if (oracle_con.State == ConnectionState.Broken) { return "Database connection is destroyed"; } } return "success" + num; } catch (Exception ex) { return ex.Message.ToString(); }}Oracle的查:/// <summary>/// Oracle select/// </summary>/// <param name="sql">select statement</param>/// <param name="record">Success:success; Fail:reason</param>/// <returns>select result</returns>public DataSet Oracle_Select(string sql, out string record) try { DataSet dataSet = new DataSet(); if (oracle_con != null) { if (oracle_con.State == ConnectionState.Open) { OracleDataAdapter oracleDataAdapter = new OracleDataAdapter(sql, oracle_con); oracleDataAdapter.Fill(dataSet, "sample"); oracleDataAdapter.Dispose(); record = "OK"; return dataSet; } if (oracle_con.State == ConnectionState.Closed) { record = "Database connection closed"; } else if (oracle_con.State == ConnectionState.Broken) { record = "Database connection is destroyed"; } } else { record = "Please open the database connection first"; } record = "error"; return dataSet; } catch (Exception ex) { DataSet dataSet = new DataSet(); record = ex.Message.ToString(); return dataSet; }}⼩编发现以上这种封装⽅式还是很⿇烦,每次对Oracle进⾏增删改查的时候还得先打开数据库,最后还要关闭,实际运⽤起来⽐较⿇烦。
【总结】Oracle数据库查看表空间和增加表空间⼀、Oracle查看表空间的名称及其⼤⼩查看表空间的名称及其⼤⼩的SQL语句:select t1.tablespace_name,round(sum(bytes/(1024*1024)),0) tablespace_Size_MBfrom dba_tablespaces t1, dba_data_files t2where t1.tablespace_name = t2.tablespace_namegroup by t1.tablespace_name;查询结果:TABLESPACE_NAME TABLESPACE_SIZE_MB------------------------------ ------------------DLOTTEY 276480SYSAUX 48450UNDOTBS1 20000INDEXMT 10240USERS 1041SYSTEM 10240UNDOTBS2 20000MMLOTTERY 2150408 rows selected.⼆、Oracle查看表空间的具体使⽤情况⽅法1:(未排序)select a.tablespace_name "tablespace_name",totalspace "totalspaceM",freespace "freespaceM",round((1-freespace/totalspace)*100,2) "round%"from(select tablespace_name,round(sum(bytes)/1024/1024) totalspace from dba_data_files group by tablespace_name) a,(select tablespace_name,round(sum(bytes)/1024/1024) freespace from dba_free_space group by tablespace_name) bwhere a.tablespace_name=b.tablespace_name;查询结果:tablespace_name totalspaceM freespaceM round%------------------------ ----------- ---------- ----------DLOTTEY 276480 232415 15.94SYSAUX 48450 9683 80.01UNDOTBS1 20000 19741 1.3INDEXMT 10240 10024 2.11USERS 1041 138 86.74SYSTEM 10240 4344 57.58UNDOTBS2 20000 19601 2MMLOTTERY 215040 36279 83.138 rows selected.⽅法⼆:(查询结果排序) select a.tablespace_name,a.bytes/1024/1024 "Sum MB",(a.bytes-b.bytes)/1024/1024 "used MB",b.bytes/1024/1024 "free MB",round(((a.bytes-b.bytes)/a.bytes)*100,2) "percent_used"from(select tablespace_name,sum(bytes) bytes from dba_data_files group by tablespace_name) a,(select tablespace_name,sum(bytes) bytes,max(bytes) largest from dba_free_space group by tablespace_name) bwhere a.tablespace_name=b.tablespace_nameorder by ((a.bytes-b.bytes)/a.bytes) desc;查询结果:TABLESPACE_NAME Sum MB used MB free MB percent_used---------------------- ---------- ---------- ---------- ------------USERS 1041.25 903.375 137.875 86.76MMLOTTERY 215040 178761 36279 83.13SYSAUX 48450 38767 9683 80.01SYSTEM 10240 5896.125 4343.875 57.58DLOTTEY 276480 44065.4375 232414.563 15.94INDEXMT 10240 215.625 10024.375 2.11UNDOTBS2 20000 399.3125 19600.6875 2UNDOTBS1 20000 257.5 19742.5 1.298 rows selected.三、Oracle查看表空间物理⽂件的名称及⼤⼩set lines 150;col tablespace_name for a20;col file_name for a60;1、查询所有的表空间SQL语句:select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_space_MBfrom dba_data_filesorder by tablespace_name;2、查询指定的表空间SQL语句:select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_space_MBfrom dba_data_fileswhere tablespace_name = 'MMLOTTERY'order by tablespace_name;查询结果:TABLESPACE_NAME FILE_ID FILE_NAME TOTAL_SPACE_MB------------------- ---------- ------------------------------------------- --------------MMLOTTERY 18 +DATA/ora11g/datafile/mmlottery01.dbf 30720MMLOTTERY 19 +DATA/ora11g/datafile/mmlottery02.dbf 30720MMLOTTERY 20 +DATA/ora11g/datafile/mmlottery03.dbf 30720MMLOTTERY 22 +DATA/ora11g/datafile/mmlottery04.dbf 30720MMLOTTERY 23 +DATA/ora11g/datafile/mmlottery05.dbf 30720MMLOTTERY 26 +DATA/ora11g/datafile/mmlottery06.dbf 30720MMLOTTERY 27 +DATA/ora11g/datafile/mmlottery07.dbf 307207 rows selected.四、Oracle查看表真实占⽤的空间SQL语句:select t.owner,t.segment_name,t.segment_type,sum(t.bytes/1024/1024) used_MBfrom dba_segments twhere owner = 'MMLOTTERY'group by owner,segment_name,segment_typeorder by used_MB desc;查询结果:OWNER SEGMENT_NAME SEGMENT_TYPE USED_MB------------------- -------------------------------- ------------------ ----------MMLOTTERY TB_ORIGINAL_ORDERDETAILS TABLE 1792MMLOTTERY TB_LOTTERY_SALEDETAIL TABLE 1472MMLOTTERY TB_LOTTERYSCHEMEINFO_ADD TABLE 1280MMLOTTERY TEST_007 TABLE 1152MMLOTTERY TB_ACCOUNT_OPERATE_DETAIL TABLE 808MMLOTTERY PK14 INDEX 377MMLOTTERY PK14_11 INDEX 312MMLOTTERY PK14_13 INDEX 200MMLOTTERY PK14_12 INDEX 160MMLOTTERY TB_BONUS_ORDERDETAILS TABLE 160MMLOTTERY TB_WINBONUS_DETAIL TABLE 14411 rows selected.五、Oracle 增加表空间语法:alter tablespace {表空间名字} add datafile '物理数据⽂件路径' SIZE 『初始⼤⼩M』 AUTOEXTEND ON NEXT 『⾃动扩展⼤⼩M』例⼦:alter tablespace MMLOTTERY add datafile '+DATA/ora11g/datafile/mmlottery08.dbf' size 30720m autoextend on next 200m;注意:如果添加表空间的⽂件名重复,那么会报错,如下:SQL> alter tablespace MMLOTTERY add datafile '+DATA/ora11g/datafile/mmlottery08.dbf' size 30720m autoextend on next 200m;alter tablespace MMLOTTERY add datafile '+DATA/ora11g/datafile/mmlottery08.dbf' size 30720m autoextend on next 200m*ERROR at line 1:ORA-01537: cannot add file'+DATA/ora11g/datafile/mmlottery08.dbf' - file already part of database若 datafile 加错到表空间,则执⾏删除操作。
Oracletablespace(表空间)的创建、删除、修改、扩展及检查等第一篇:Oracle tablespace (表空间)的创建、删除、修改、扩展及检查等Oracle tablespace(表空间)的创建、删除、修改、扩展及检查等oracle 数据库表空间的作用1.决定数据库实体的空间分配;2.设置数据库用户的空间份额;3.控制数据库部分数据的可用性;4.分布数据于不同的设备之间以改善性能;5.备份和恢复数据。
--oracle 可以创建的表空间有三种类型: 1.temporary: 临时表空间,用于临时数据的存放;create temporary tablespace “sample”......2.undo : 还原表空间.用于存入重做日志文件.create undo tablespace “sample”......3.用户表空间: 最重要,也是用于存放用户数据表空间create tablespace “sample”......--注:temporary 和 undo 表空间是oracle 管理的特殊的表空间.只用于存放系统相关数据.--oracle 创建表空间应该授予的权限1.被授予关于一个或多个表空间中的resource特权;2.被指定缺省表空间;3.被分配指定表空间的存储空间使用份额;4.被指定缺省临时段表空间。
select tablespace_name “表空间名称”,status “状态”,extent_management “区管理方式”,allocation_type “磁盘扩展管理方式”,segment_space_management “段管理方式” from dba_tablespaces;--查询各个表空间的区、段管理方式--1、建立表空间--语法格式: create tablespace 表空间名 datafile '文件标识符' 存储参数 [...] |[minimum extent n]--设置表空间中创建的最小范围大小 |[logging|nologging]|[default storage(存储配置参数)] |[online|offline];--表空间联机脱机|[permanent|temporary]--指定该表空间是用于保存永久的对象还是只保存临时对象|[...]--其中:文件标识符=’文件名’[size整数[km][reuse]--实例create tablespace data01 datafile '/oracle/oradata/db/data01.dbf' size 500m uniform size 128k;--指定区尺寸为128k,如不指定,区尺寸默认为64k create tablespace “test” logging datafile 'd:oracleoradatao raclesample.ora' size 5m, 'd:oracleoradataoracledd.ora' size 5m extent management local uniform segment space management auto;--详解/* 第一: create tablespace “sample” 创建一个名为“sample” 的表空间.对表空间的命名,遵守oracle 的命名规范就可了.第二: logging 有nologging 和 logging 两个选项, nologging: 创建表空间时,不创建重做日志.logging 和nologging正好相反, 就是在创建表空间时生成重做日志.用nologging时,好处在于创建时不用生成日志,这样表空间的创建较快,但是没能日志,数据丢失后,不能恢复;但是一般我们在创建表空间时,是没有数据的,按通常的做法,是建完表空间,并导入数据后,是要对数据做备份的;所以通常不需要表空间的创建日志,因此,在创建表空间时,选择 nologging,以加快表空间的创建速度.第三: datafile 用于指定数据文件的具体位置和大小.datafile 的文件是建立表空间后创建的,不过文件路径必须存在才是合法的datafile设置如: datafile 'd:oracleoradataora92luntan.ora' size 5m 说明文件的存放位置是'd:oracleoradataora92luntan.ora' , 文件的大小为5m.如果有多个文件,可以用逗号隔开: 如:datafile 'd:oracleoradataora92luntan.ora' size 5m, 'd:oracleoradataora92dd.ora' size 5m 但是每个文件都需要指明大小.单位以指定的单位为准如 5m 或 500k.对具体的文件,可以根据不同的需要,存放大不同的介质上,如磁盘阵列,以减少io竟争.指定文件名时,必须为绝对地址,不能使用相对地址.第四: extent management local 存储区管理方法在字典中管理(dictionary):将数据文件中的每一个存储单元做为一条记录,所以在做dm操作时,就会产生大量的对这个管理表的delete和update操作.做大量数据管理时,将会产生很多的dm操作,严得的影响性能,同时,长时间对表数据的操作,会产生很多的磁盘碎片.本地管理(local):用二进制的方式管理磁盘,有很高的效率,同进能最大限度的使用磁盘.同时能够自动跟踪记录临近空闲空间的情况,避免进行空闲区的合并操作。
oracle中常用的一些语句--增删改查(精)如何查找、删除表中重复的记录方法原理:1、Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在ORACLE中的哪一个数据文件、块、行上。
2、在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大rowid的就可以了,其余全部删除。
实现方法:SQL》 create table a (2 bm char(4), --编码3 mc varchar2(20) --名称4 )5 /表已建立。
SQL》 insert into a values(‘1111’,‘1111’);SQL》 insert into a values(‘1112’,‘1111’);SQL》 insert into a values(‘1113’,‘1111’);SQL》 insert into a values(‘1114’,‘1111’);SQL》 insert into a select * from a;插入4个记录。
SQL》 commit;完全提交。
SQL》 select rowid,bm,mc from a;ROWID BM MC------------------ ---- -------000000D5.0000.0002 1111 1111000000D5.0001.0002 1112 1111000000D5.0002.0002 1113 1111000000D5.0003.0002 1114 1111000000D5.0004.0002 1111 1111000000D5.0005.0002 1112 1111000000D5.0006.0002 1113 1111000000D5.0007.0002 1114 1111查询到8记录。
查出重复记录SQL》select rowid,bm,mc from a where a.rowid!=(select max (rowid)from a b where a.bm=b.bm and a.mc=b.mc);ROWID BM MC------------------ ---- --------------------000000D5.0000.0002 1111 1111000000D5.0001.0002 1112 1111000000D5.0002.0002 1113 1111000000D5.0003.0002 1114 1111删除重复记录SQL》 delete from a a where a.rowid!=(select max(rowid)from a b where a.bm=b.bm and a.mc=b.mc);删除4个记录。
表的增删改查创建表CREATE TABLE [用户名.]表名(列名数据类型 [default 默认值] [,...]...);SQL> create table t1 (2 id number(10),3 name varchar2(20),4 password varchar2(30));SQL> create table tab1 as select * from emp where sal>2000; SQL> create table tab2 as select * from emp where 1=2;增加修改删除列增加一列ALTER TABLE [用户名.]表名ADD (列名1 数据类型[DEFAULT 表达式],[列名2 数据类型],...)SQL> desc t1;名称是否为空? 类型------------- -------- ---------------ID NUMBER(10)NAME VARCHAR2(20)PASSWORD VARCHAR2(30)SQL> alter table t1 add (sal number(10));SQL> desc t1;名称是否为空? 类型--------------- -------- --------------------ID NUMBER(10)NAME VARCHAR2(20)PASSWORD VARCHAR2(30)SAL NUMBER(10)SQL> alter table t1 add (job varchar(10));SQL> desc t1;名称是否为空? 类型------------------ -------- ----------------ID NUMBER(10)NAME VARCHAR2(20)PASSWORD VARCHAR2(30)SAL NUMBER(10)JOB VARCHAR2(10)修改表已存列的数据类型与列名重命名语法格式:ALTER TABLE 表名MODIFY (列名1,数据类型 [DEFAULT 表达式],列名2,数据类型,...)SQL> desc t1;名称是否为空? 类型-------------------- -------- ---------------ID NUMBER(10)NAME VARCHAR2(20)PASSWORD VARCHAR2(30)SAL NUMBER(10)JOB VARCHAR2(10)SQL> alter table t1 modify (sal varchar2(20));SQL> desc t1;名称是否为空? 类型--------------------- -------- ---------------ID NUMBER(10)NAME VARCHAR2(20)PASSWORD VARCHAR2(30)SAL VARCHAR2(20)JOB VARCHAR2(10)SQL> alter table t1 rename column job to comm;SQL> desc t1;名称是否为空? 类型-------------------- -------- ---------------ID NUMBER(10)NAME VARCHAR2(20)PASSWORD VARCHAR2(30)SAL VARCHAR2(20)COMM VARCHAR2(10)SQL> alter table t1 modify (comm number(10));SQL> desc t1;名称是否为空? 类型------------------------ -------- ---------------ID NUMBER(10)NAME VARCHAR2(20)PASSWORD VARCHAR2(30)SAL VARCHAR2(20)COMM NUMBER(10)删除表里的某列ALTER TABLE 表名 DROP COLUMN 列名;SQL> desc t1;名称是否为空? 类型------------------------------ -------------------ID NUMBER(10)NAME VARCHAR2(20)PASSWORD VARCHAR2(30)SAL VARCHAR2(20)COMM NUMBER(10)SQL> alter table t1 drop column comm;SQL> desc t1;名称是否为空? 类型------------------------ -------- -------------------ID NUMBER(10)NAME VARCHAR2(20)PASSWORD VARCHAR2(30)SAL VARCHAR2(20)间接删除表里已存在的列删除表里的列特别是删除大表里的列是特耗资源的所以在删除一个列时可以先把要删除的列打标记,标记成无用列 ,然后等系统不忙时在彻底删除这个列语法格式:ALTER TABLE 表名 SET UNUSED COLUMN 列名;把一个列设置成无用列注意一下事项⎽必需在8i以上版本适用⎽该列被设置成无用列后,并不是删除了而是设置成无用标记而已还需要手工删除这个列⎽设置成无用列后,无法用sqlplus或是sql 语句看到的⎽oracle把设置成无用列当作删除列处理⎽可以适用DROP UNUSED (列名) 选项删除被设置成无用的列⎽因为该语句是DDL语句没有恢复无用列的命令然后等系统不忙时在用ALTER TABLE 表名DROP UNUSED COLUMN;SQL> alter table t1 set unused column sal;SQL> desc t1;名称是否为空? 类型----------------------- -------- --------------ID NUMBER(10)NAME VARCHAR2(20)PASSWORD VARCHAR2(30)SQL> alter table t1 drop unused column;SQL> desc t1;名称是否为空? 类型------------------------ -------- --------------ID UMBER(10)NAME VARCHAR2(20)PASSWORD VARCHAR2(30)truncate table 截断表当一个表里的数据不再需要时,可以适用truncate table 全部删除表里的数据,该语句为DDL语句无法适用rollback 来回滚数据语法格式:TRUNCATE TABLE 表名特点:⎽删除表中的数据行,但保留表的结构⎽truncate 是DDL 语句,如果没有备份数据无法恢复⎽truncate 删除表中的数据行后,立即释放磁盘空间如果只删除数据,而保留数据结构适用truncate 如果既要删除数据,也要删除表结构适用DROP语法格式:DROP TABLE 表名特点:⎽DROP删除表中的所有数据行和表的结构⎽DROP 也删除表的所有索引⎽提交所有挂起事务所有基于被DROP的表的视图别名依然保留但已经无效对象表的重命名语法格式:RENAME 旧表名 TO 新表名SQL> rename t1 to table1;SQL> desc t1;ERROR:ORA-04043: 对象 t1 不存在SQL> desc table1;名称是否为空? 类型---------------------- -------- -------------ID NUMBER(10)NAME VARCHAR2(20)PASSWORD VARCHAR2(30)删除一个表DROP TABLE TABLENAMESQL> drop table tab1;SQL> select * from tab;TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- DEPT TABLEEMP TABLEBONUS TABLESALGRADE TABLEBIN$DCVrueY1SDSmKp/kGnvFpA==$0 TABLETAB2 TABLETABLE1 TABLE清空闪回回收站SQL> purge Recyclebin;回收站已清空。
Oracle tablespace (表空间的创建、删除、修改、扩展及检查等oracle 数据库表空间的作用1.决定数据库实体的空间分配;2.设置数据库用户的空间份额;3.控制数据库部分数据的可用性;4.分布数据于不同的设备之间以改善性能;5.备份和恢复数据。
--oracle 可以创建的表空间有三种类型:1.temporary: 临时表空间, 用于临时数据的存放;create temporary tablespace "sample"......2.undo : 还原表空间. 用于存入重做日志文件.create undo tablespace "sample"......3.用户表空间: 最重要, 也是用于存放用户数据表空间create tablespace "sample"......--注:temporary 和 undo 表空间是oracle 管理的特殊的表空间. 只用于存放系统相关数据.--oracle 创建表空间应该授予的权限1.被授予关于一个或多个表空间中的resource 特权;2.被指定缺省表空间;3.被分配指定表空间的存储空间使用份额;4.被指定缺省临时段表空间。
select tablespace_name " 表空间名称",status " 状态",extent_management " 区管理方式",allocation_type " 磁盘扩展管理方式",segment_space_management " 段管理方式" from dba_tablespaces;--查询各个表空间的区、段管理方式--1、建立表空间--语法格式:create tablespace 表空间名datafile ' 文件标识符' 存储参数 [...]|[minimum extent n] --设置表空间中创建的最小范围大小|[logging|nologging]|[default storage(存储配置参数]|[online|offline]; --表空间联机\脱机|[permanent|temporary] --指定该表空间是用于保存永久的对象还是只保存临时对象 |[...]--其中:文件标识符=’文件名’[size整数[k\m][reuse]--实例create tablespace data01datafile '/oracle/oradata/db/data01.dbf' size 500muniform size 128k; --指定区尺寸为128k, 如不指定,区尺寸默认为64k create tablespace "test"loggingdatafile 'd:\oracle\oradata\oracle\sample.ora' size 5m,'d:\oracle\oradata\oracle\dd.ora' size 5mextent management localuniform segment space managementauto;--详解/*第一: create tablespace "sample"创建一个名为 "sample" 的表空间. 对表空间的命名, 遵守oracle 的命名规范就可了. 第二: logging 有 nologging 和 logging 两个选项,nologging: 创建表空间时, 不创建重做日志.logging 和nologging 正好相反, 就是在创建表空间时生成重做日志.用nologging 时, 好处在于创建时不用生成日志, 这样表空间的创建较快, 但是没能日志, 数据丢失后, 不能恢复;但是一般我们在创建表空间时, 是没有数据的, 按通常的做法, 是建完表空间, 并导入数据后, 是要对数据做备份的;所以通常不需要表空间的创建日志, 因此, 在创建表空间时, 选择 nologging, 以加快表空间的创建速度.第三: datafile 用于指定数据文件的具体位置和大小.datafile 的文件是建立表空间后创建的,不过文件路径必须存在才是合法的datafile 设置如: datafile 'd:\oracle\oradata\ora92\luntan.ora' size 5m说明文件的存放位置是 'd:\oracle\oradata\ora92\luntan.ora' , 文件的大小为5m. 如果有多个文件, 可以用逗号隔开:如:datafile 'd:\oracle\oradata\ora92\luntan.ora' size 5m,'d:\oracle\oradata\ora92\dd.ora' size 5m但是每个文件都需要指明大小. 单位以指定的单位为准如 5m 或 500k.对具体的文件, 可以根据不同的需要, 存放大不同的介质上, 如磁盘阵列, 以减少io 竟争. 指定文件名时, 必须为绝对地址, 不能使用相对地址.第四: extent management local 存储区管理方法在字典中管理(dictionary:将数据文件中的每一个存储单元做为一条记录, 所以在做dm 操作时, 就会产生大量的对这个管理表的delete 和update 操作.做大量数据管理时, 将会产生很多的dm 操作, 严得的影响性能, 同时, 长时间对表数据的操作, 会产生很多的磁盘碎片.本地管理(local:用二进制的方式管理磁盘, 有很高的效率, 同进能最大限度的使用磁盘.同时能够自动跟踪记录临近空闲空间的情况,避免进行空闲区的合并操作。
oracle 临时表空间的增删改查操作oracle 临时表空间的增删改查1、查看临时表空间(dba_temp_files视图)(v_$tempfile视图)select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;select status,enabled, name, bytes/1024/1024 file_size from v_$tempfile;--sys用户查看2、缩小临时表空间大小alter database tempfile'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TELEMT\TEMP01.DBF' resize 100M;3、扩展临时表空间:方法一、增大临时文件大小:SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ resize100m;方法二、将临时数据文件设为自动扩展:SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ autoextend on next 5m maxsize unlimited;方法三、向临时表空间中添加数据文件:SQL> alter tablespace temp add tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ size 100m;4、创建临时表空间:SQL> create temporary tablespace temp1 tempfile‘/u01/app/oracle/oradata/orcl/temp11.dbf’ size 10M;5、更改系统的默认临时表空间:--查询默认临时表空间select * from database_properties whereproperty_name='DEFAULT_TEMP_TABLESPACE';--修改默认临时表空间alter database default temporary tablespace temp1;所有用户的默认临时表空间都将切换为新的临时表空间:select username,temporary_tablespace,default_ from dba_users;--更改某一用户的临时表空间:alter user scott temporary tablespace temp;6、删除临时表空间删除临时表空间的一个数据文件:SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ drop;删除临时表空间(彻底删除:SQL> drop tablespace temp1 including contents and datafiles cascade constraints;7、查看临时表空间的使用情况(GV_$TEMP_SPACE_HEADER视图必须在sys用户下才能查询)GV_$TEMP_SPACE_HEADER视图记录了临时表空间的使用大小与未使用的大小dba_temp_files视图的bytes字段记录的是临时表空间的总大小SELECT temp_used.tablespace_name,total - used as "Free",total as "Total",round(nvl(total - used, 0 * 100 / total, 3 "Free percent"FROM (SELECT tablespace_name, SUM(bytes_used / 1024 / 1024 usedFROM GV_$TEMP_SPACE_HEADERGROUP BY tablespace_name temp_used,(SELECT tablespace_name, SUM(bytes / 1024 / 1024 totalFROM dba_temp_filesGROUP BY tablespace_name temp_totalWHERE temp_used.tablespace_name = temp_total.tablespace_name8、查找消耗资源比较的sql语句Select ername,se.sid,su.extents,su.blocks * to_number(rtrim(p.value as Space,tablespace,segtype,sql_textfrom v$sort_usage su, v$parameter p, v$session se, v$sql swhere = 'db_block_size'and su.session_addr = se.saddrand s.hash_value = su.sqlhashand s.address = su.sqladdrorder by ername, se.sid9、查看当前临时表空间使用大小与正在占用临时表空间的sql语句select sess.SID, segtype, blocks * 8 / 1000 "MB", sql_textfrom v$sort_usage sort, v$session sess, v$sql sqlwhere sort.SESSION_ADDR = sess.SADDRand sql.ADDRESS = sess.SQL_ADDRESSorder by blocks desc;10、临时表空间组介绍1)创建临时表空间组:create temporary tablespace tempts1 tempfile '/home/oracle/temp1_02.dbf' size 2M tablespace group group1;create temporary tablespace tempts2 tempfile '/home/oracle/temp2_02.dbf' size 2M tablespace group group2;2)查询临时表空间组:dba_tablespace_groups视图select * from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME------------------------------ ------------------------------GROUP1 TEMPTS1GROUP2 TEMPTS23)将表空间从一个临时表空间组移动到另外一个临时表空间组:alter tablespace tempts1 tablespace group GROUP2 ;select * from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME------------------------------ ------------------------------GROUP2 TEMPTS1GROUP2 TEMPTS24)把临时表空间组指定给用户alter user scott temporary tablespace GROUP2;5)在数据库级设置临时表空间alter database <db_name> default temporary tablespace GROUP2;6)删除临时表空间组 (删除组成临时表空间组的所有临时表空间drop tablespace tempts1 including contents and datafiles;select * from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME------------------------------ ------------------------------GROUP2 TEMPTS2drop tablespace tempts2 including contents and datafiles;select * from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME11、对临时表空间进行shrink(11g新增的功能)--将temp表空间收缩为20Malter tablespace temp shrink space keep 20M;--自动将表空间的临时文件缩小到最小可能的大小ALTER TABLESPACE temp SHRINK TEMPFILE ’/u02/oracle/data/lmtemp02.dbf’;临时表空间作用Oracle临时表空间主要用来做查询和存放一些缓冲区数据。
临时表空间消耗的主要原因是需要对查询的中间结果进行排序。
重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长。
直到耗尽硬盘空间。
网上有人猜测在磁盘空间的分配上,oracle使用的是贪心算法,如果上次磁盘空间消耗达到1GB,那么临时表空间就是1GB。
也就是说当前临时表空间文件的大小是历史上使用临时表空间最大的大小。
临时表空间的主要作用:索引create或rebuild;Order by 或 group by;Distinct 操作;Union 或 intersect 或 minus;Sort-merge joins;analyze.。