本站用于记录日常工作内容,虚拟化云计算,系统运维,数据库DBA,网络与安全。
都知道alter table move 或shrink space可以收缩段,用来消除部分行迁移,消除空间碎片,使数据更紧密,但move 跟shrink space还是有区别的。 Move会移动高水位,但不会释放申请的空间,是在高水位以下(below HWM)的操作。 而shrink space 同样会移动高水位,但也会释放申请的空间,是在高水位上下(below and above HWM)都有的操作。 也许很难理解吧,看测试就知道了。 SQL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod PL/SQL Release 10.2.0.1.0 - Production CORE 10.2.0.1.0 Production TNS for 32-bit Windows: Version 10.2.0.1.0 - Production NLSRTL Version 10.2.0.1.0 - Production SQL> create table test (id number) storage (initial 10m next 1m) tablespace users; Table created. SQL> analyze table test compute statistics; Table analyzed. SQL> col SEGMENT_NAME for a10 SQL> select SEGMENT_NAME,EXTENTS,BLOCKS,INITIAL_EXTENT/1024/1024 init ...
Oracle 10g Shrink Table 详解[表空间收缩] 从10g开始,oracle开始提供Shrink的命令,假如我们的表空间中支持自动段空间管理 (ASSM),就可以使用这个特性缩小段,即降低HWM。这里需要强调一点,10g的这个新特性,仅对ASSM表空间有效,否则会报 ORA-10635: Invalid segment or tablespace type。 有关ASSM的详细信息,请参考我的Blog:Oracle 自动段空间管理http://blog.csdn.net/tianlesoftware/archive/2009/12/07/4958989.aspx 如果经常在表上执行DML操作,会造成数据库块中数据分布稀疏,浪费大量空间。同时也会影响全表扫描的性能,因为全表扫描需要访问更多的数据块。从oracle10g开始,表可以通过shrink来重组数据使数据分布更紧密,同时降低HWM释放空闲数据块。 segment shrink分为两个阶段: 1、数据重组(compact):通过一系列insert、delete操作,将数据尽量排列在段的前面。在这个过程中需要在表上加RX锁,即只在需要移动的行上加锁。由于涉及到rowid的改变,需要enable row movement.同时要disable基于rowid的trigger.这一过程对业务影响比较小。 2、HWM调整:第二阶段是调整HWM位置,释放空闲数据块。此过程需要在表上加X锁...
oracle时间函数to_date to_char 做模糊查询时,我们经常使用的时间函数: select * from student where birth > to_date( '2011-3-4' , 'yyyy-mm-dd hh24:mi:ss')//根据前面的年月日判断select * from student where birth > to_date( '2011-4-15 22:19:45' , 'yyyy-mm-dd hh24:mi:ss') //根据准确的时间去判断select t.vehicle_id from gps_vehicle t where t.install_date < to_date(20140801, 'yyyy-mm-dd hh24:mi:ss') and t.install_date > to_date(20131231, 'yyyy-mm-dd hh24:mi:ss') 对于初学者来说,日期处理那快一向是问题的集中地.今天刚刚看了个案例,将的就是ORACLE日期处理中的错误,其关键原因,就是TO_CHAR 和TO_DATE的用法不清晰,,事实上,这两个东西也特别容易混淆,为此,把他们的区别再介绍下.to char 是把日期或数字转换为字符串 to date 是把字符串转换为数据库中得日期类型 转换函数 TO_CHAR 使用TO_CHAR函数处理数字 TO_CHAR(number, '格式') TO_CHAR(salary,’$99,999.99’); 使用TO_CHAR函数处理日期 TO_CHAR(date,’格式’); TO_NUMBER 使用TO_NUMBER函数...
先获取大量表的名称GPS_HT_%,要导入的数据内容格式一样。再用过程导入数据,'insert into '||c.tname||' select * from gps_ht_0';create or replace procedure p_insert_gps_ht(a in number,b in number) is t_sql varchar2(2000);begin for c in (select tname from (select rownum sq, tname from tab where tname like 'GPS_HT_%' order by tname) where sq >= a and sq <= b) loop t_sql:='in...
UNDO表空间不足解决方法 确认UNDO表空间名称select name from v$tablespace; 检查数据库UNDO表空间占用空间情况以及数据文件存放位置;select file_name,bytes/1024/1024 from dba_data_files where tablespace_name like 'UNDOTBS1'; UNDO表空间不够用,有两种处理方法,1,扩大表空间大小;2,创建新的UNDO表空间,删除原来的 一、扩大UNDO表空间alter database UNDOTBS1 datafile '/opt/oracle/oradata/inms/undotbs02.dbf' resize 4000M; 二、创建新的UNDO表空间,删除原来的1、创建新的UNDO表空间,并设置自动扩展参数;create undo tablespace undotbs2 datafile '/oradata/oradata/ddptest/UNDOTBS1.dbf' size 2 1000m reuse autoextend on next 800m maxsize unlimited; 2、动态更改spfile配置文件;alter system set undo_tablespace=undotbs2 scope=both; 3、删除原有的UNDO表空间;drop tablespace undotbs1 including contents; 4、确认删除是否成功;select name from v$tablespace; 5、确定$ORACLE_HOME/dbs/spfileoinms.ora内容是否发生变更:&...
select file_name,bytes/1024/1024 from dba_data_files where autoextensible='YES'; 一般自动扩展最容易变得很大的就是untotbs /oradata/rmdb/undotbs01.dbf 32G 处理过程: (1) 生成autoextend off语句 select 'alter database datafile '''||file_name||''' AUTOEXTEND OFF;' from dba_data_files where autoextensible='YES'; (2) 新建一个undotbs create undo tablespace undotbs1 datafile '/opt/oracle/oradata/ora11g/undotbs01.dbf' size 500m; (3) 切换undotbs,并记录到spfile alter system set undo_tablespace=UNDOTBS2 scope=both; (4) 过几天再把undotbs1干掉 drop tablespace undotbs1 including contents and datafiles cascad...
Delete/Truncate删除,释放表空间、降低高水位线、resize释放磁盘空间相关优化汇总 阅读前注意:磁盘空间 表的数据库空间 表空间的数据库空间不同之处。 硬盘空间不足,打算删除数据库中的多余数据,但删除数据后,硬盘硬盘空间不能释放。【delete后用:alter table table_name move truncate后用:alter table table_name deallocate unused 均不可解决】解决方法:--delete/truncate删除,释放表空间、降低高水位线、resize释放磁盘空间相关优化汇总--查询DBF文件、数据库空间、高水位线占用情况select /*+ ordered use_hash(a,b,c) */ a.file_id, a.file_name, a.tablespace_name, a.filesize, b.freesize, (a.filesize - b.freesize) usedsize,--使用空间 c.hwmsize, c.hwmsize - (a.filesize - b.freesize) unsedsize_belowhwm,--未使用空间 a.filesize - c.hwmsize canshrinksize--文件大小 from (select tablespace_name,file_id, file_name, round(...
一客户机房新装的UPS不太稳定,好几次意外断电,第3次意外断电之后问题终于来了,数据库起不来了……数据库的硬件环境是一台IBM DS5020存储,2台IBM X3850 X5软件环境是Linux与Oracle 10g RAC数据库2个节点的asm都能正常启动,但数据库实例启动到mount状态后就停下没有反应了,等很久也不能前进到open状态。节点1上的alert日志有如下错误信息:ORA-1013 signalled during: ALTER DATABASE OPEN…………ORA-1089 signalled during: alter database open节点2上的alert日志有如下错误信息:Thu Dec 29 15:32:46 2011Errors in file /opt/oracle/admin/racdb/bdump/racdb2_p015_11496.trc:ORA-27090: Message 27090 not found; product=RDBMS; facility=ORALinux-x86_64 Error: 4: Interrupted system callAdditional information: 3Additional information: 128Additional information: 65536进一步查看/opt/oracle/admin/racdb/bdump/racdb2_p015_11496.trc,有如下信息:ORA-27090: Message 27090 not found; product=RDBMS; facility=ORALinux-x86_64 Error: 4: Interrupted system callAdditional information: 3Additional information: 128Additional information: 65536...
Oracle转移表和索引所在的表空间如果你将创建表和索引创建在USERS表空间下了,(注:在USERS表空间中是合理的),那么在以后的维护中将会出现很多麻烦。 如果是系统无法删除重建,所以必须考虑在不影响使用的情况下做该项工作。 1、表空间移动命令: alter table table_name move tablespacetablespace_name; 得到表空间移动语句: select ’alter table ’ || table_name || ’ move tablespacetablespace_name;’ fromuser_tables where tablespace_name = ’USERS’ 得到该连接用户下所有创建在USERS表空间下的表名。 2、执行所得到的语句,至此将表转移到新表空间中。3、重建索引 命令:alter index index_name rebuildtablespace tablespace_name; 得到重建索引语句 SELECT ’alter index ’||index_name||’ rebuild tablespacetablespace_name;’ FROMUSER_INDEXES T where t.table_owner=’’USER_NAME’’ andt.tablespace_name=’USERS’&n...
shell调用sqlplus各种情况示例shell调用sqlplus各种情况示例测试平台:RHEL5.5一、最简单的shell里调用sqlplus.$ vi test1.sh #!/bin/bash sqlplus-s acctmp/acctmp@newtest>/dev/null<<EOF set serveroutput on; exec ngoss.PROC_LOAD3GGROUPUSER; exit; EOF $ chmod +x test1.sh$ ./test1.sh二、把sqlplus执行结果传递给shell方法一注意sqlplus段使用老板键`了, 赋变量的等号两侧不能有空格.$ vi test2.sh #!/bin/bash #1) 优惠标识列字段为空 preferencetypenull=`sqlplus-s acctmp/acctmp@newtest<<END set pagesize 0 feedback off verify off headingoff echo off SELECT COUNT (*) FROMinfo.t_ci_wocardinfo WHERE preferencetype IS NULL ANDTO_CHAR (insertdate, 'yyyymmdd') = TO_CHAR (SYSDATE,'yyyymmdd'); exit; END` echo "本次csm所给沃家庭电子券优惠文件中优惠标识列为空总数为:"$preferencetypenull#若本次csm所给沃家庭电子券优惠文件中优惠标识列为空总数不为0需要特殊处理:打...
最新评论