Oracle大表改为分区表及表空间切换方案 一.            背景 由于之前数据库表和索引放在一个表空间导致表空间数据文件增长太快,文件数量即将达到Oracle表空间的限制,需要对表(没有分区,有些表数据量多达几十亿,文件大小TB级)进行表空间迁移,并对某些表改造为分区表. 二.            可选方案分析 1.    使用IMP/EXP 导入(import)导出(export)工具年头已久,将数据导出为二进制文件,将会在11g r2之后废弃,只用于遗留数据的导入导出 此工具可…
Oracle单表的简单查询 查看表结构 desc emp; 查询所有列 Select * from emp; 查找所以部门编号(查指定的列) select deptnofrom emp; 查找编号不同的部门编号(去重) selectdistinct deptnofrom emp; 查找ename为SMITH的员工职位,工资,部门编号 select job,sal,deptnofrom emp t  where t.ename='SMITH'; 查找员工的年薪 NVL( string1, repl…
Oracle单表的复杂查询 select avg(sal),max(sal),deptnofrom empgroupby deptno; orderby deptno; 查询工资高于500或者是岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J? or job='manager')and enamelike'J%'; 按照部门号升序而雇员的工资降序排列 select *from emporderby deptnoasc , saldesc ; assum,enamefrom em…
Oracle单表去重 去重有两层含义,一:是记录完全一样.二:是符合一定条件的认为是重复. 根据表的数量,去重可划分为:单表去重和多表关联去重.   对于去重,一般最容易想到的是用distinct,而distinct只能对记录完全重复的记录保留一条. distinct使用的是二重循环的方式来去重的,如果数据量非常大的时候,会导致性能急剧下降. 我们前一篇文章已经给出了详解,你可以去查看 Oracle单表去重复(一)    下面是一个单表去重的测试,认为name字段相同的即为重复记录,要查询出一个…
去重有两层含义,一:是记录完全一样:二:是符合一定条件的认为是重复. 根据表的数量,去重可划分为:单表去重和多表关联去重.   对于去重,一般最容易想到的是用distinct,而distinct只能对记录完全重复的记录保留一条. distinct使用的是二重循环的方式来去重的,如果数据量非常大的时候,会导致性能急剧下降. 例如:select distinct 字段名 from 原表; 此应用案例,主要有删除表中的完全重复的记录: insert into 临时表 select distinct 字…
听了猫大师的课,对Oracle CBO又加深了一步理解: 单表选择率: selectivity=1/ndv*a4nulls ocard来自dba_tables.num_rows ndv 来自dba_tab_col_statistics中的num_distinct where 条件为 owner='' AND table_name='' and column_name='' a4nulls 来自dba_tab_col_statistics中的num_nulls where  条件为 owner='…
-- 单表查询 -- 查询表的所有数据, *代表所有 -- select * from [表名]; -- 查询表中指定字段的值 -- select [字段1], [字段2] ... from [表名]; -- 给查询结果中的字段使用别名 -- 在字段后面使用关键字 as ( 字段名 as "别名" ), -- as关键字可以省略不写, 别名中没有特殊符号的话, 双引号也可以不写 -- select [字段1] [空格] [别名], [字段2] as [别名] ... from [表名]…
1.修改分区表分区表空间 SELECT 'ALTER TABLE ' || table_owner || '.' || TABLE_NAME || ' MOVE PARTITION ' || PARTITION_NAME || ' TABLESPACE D_TBS_NEW;' FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER = 'OWNER' AND TABLE_NAME IN ('TABLE_NAMES') ALTER TABLE OWNER.TABLENA…
不考虑硬件诸如内存,存储等硬件的限制. 一张表理论能存储多少条记录呢? 假设: 一个tablespace中包含1022个datafiles, 单个datafiles的最大是32G 假设每个block是16k,每个block中有160条记录, 每个表可以有(1024*1024)-1个分区表 那么一张表理论最大存储记录数约为: 1.一个表空间tablespace的最大值:datafile个数 × 单个datafile的大小 1022 × 32G  =32704 G 2.换算成k (32704 G *…
1.1.TAB_TAOBAO_BILL 1.1.1检查下这张表是否可以在线重定义,无报错表示可以,报错会给出错误信息: exec dbms_redefinition.can_redef_table('ycheng', 'P_TAB_TAOBAO_BILL');   1.1.2.expdp导出表进行备份(这里的DATA_PUMP_1目录是/data1/dpdump) expdp \'\/ as sysdba\' directory=DATA_PUMP_1 tables=TAB_TAOBAO_BIL…