Oracle基本操作笔试面试题之表操作Word格式文档下载.docx
- 文档编号:19222794
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:15
- 大小:20.04KB
Oracle基本操作笔试面试题之表操作Word格式文档下载.docx
《Oracle基本操作笔试面试题之表操作Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Oracle基本操作笔试面试题之表操作Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
表名修改后,索引还在
表迁移,(从一个表空间迁移到另外一个表空间)
altertabletable_namemovetablespacetablespace_namenologgingparallele4;
将表从一个表空间迁移到另外一个表空间,必须进行索引重建,存储过程、触发器、其
他程序包都需要编译,以免执行报错。
例如:
表压缩:
不同表空间:
altertabletable_namemovetablespacetablespace_namecompress;
相同表空间:
altertabletable_namemovecompress;
表统计信息收集
execdbms_stats.gather_table_stats(ownname=>
username,tabname
=>
table_name,degree=>
10,cascade=>
true,estimate_percent=>
25);
test,tabname
data_table1_name1,degree=>
4,cascade=>
30);
selecta.row2_id,sum(nvl(b.item_value,0))
fromzk.name_201001a,zk.table_name_201001b
wherea.so_row1=b.so_row1anda.row_ain(1,4,5)anda.row2_id=XXXXXXXand
book_row3_idin(NNNNNXXX1,NNNNNXXX2,NNNNNXXX3,NNNNNXXX4,
NNNNNXXX5,NNNNNXXX6)groupbya.row_id;
表语句执行很慢,检查执行计划,zk.table_name_201001b不引用索引,做表分析、重建索引都无
效,执行计划中均没有引用索引,最后强制使用索引效果明显,执行计划改变,索引引用。
效果明
显
select/*+index(bpk_table_name_201001)*/
a.serv_id,sum(nvl(b.item_value,0))
fromzk.name_201001a,zk.table_name_201001b
wherea.so_row1=b.so_row1anda.busi_codein(1,4,5)anda.row2_id=XXXXXXXand
NNNNNXXX5,NNNNNXXX6)
groupbya.row2_id;
2、分区表创建
为了使大量的数据在读写操作和查询中速度更快,Oracle提供了对表和索引进行分区的技术,
以改善大型应用系统的性能。
使用分区的优点:
A、增强可用性:
如果表的某个分区出现故障,表在其他分区的数据仍然可用;
B、维护方便:
如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
C、均衡I/O:
可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能;
D、改善查询性能:
对分区对象的查询可以仅搜索自己关心的分区,提高检索速度
Oracle数据库提供对表或索引的分区方法有三种:
1、范围分区
2、Hash分区(散列分区)
3、列表分区
4、范围—散列分区
5、范围—列表分区
2.1、范围分区表
分区表表创建:
一般都是按照时间来创建
createtabletable_name
(
row1char1notnull,
row2char2notnull,
、、、、、、
rownnumbernotnull
)
partitionbyrange(paration_row)
partitionpartition_name1valueslessthan(to_date(value_name,yyyy-mm-dd,
nls_calendar=gregorian))tablespacetablespace_name1,
partitionpartition_name2valueslessthan(to_date(value_name,yyyy-mm-dd,
nls_calendar=gregorian))tablespacetablespace_name2,
、、、、、、、、、、
partitionpartition_namenvalueslessthan(to_date(value_name,yyyy-mm-dd,
nls_calendar=gregorian))tablespacetablespace_namen,
partitionpartmaxvalueslessthan(maxvalue)
tablespaceora_data
pctfree10
initrans16
maxtrans255
storage
initial64k
minextents1
maxextentsunlimited))
Insertintotable_name1asselect*fromtable_name2
表分区删除:
altertable表名truncatepartition分区名称dropstorage;
分区删除以后,需要重新创建索引。
分区分割:
altertabletable_namesplitpartitionpartmaxat(to_date(values_name,yyyy-mm-dd))into
(partitionprtition_namexxtablespacetablespace_name,partitionpartmax);
分区查询:
select*fromtable_namepartition(partition_name);
2.2、hash分区表(散列分区)
Hash分区表创建:
hash分区表的分区数量一般是2的n次幂,这样记录分布在各个分区上就
比较均匀,可以进行I/O的均衡。
rownNUMBERnotnull
partitionbyhash(paration_row)
partitionpartition_name1tablespacetablespace_name1,
partitionpartition_name2tablespacetablespace_name2,
partitionpartition_name3tablespacetablespace_name3
partitionpartition_nameXtablespacetablespace_nameX
insertintotable_name1asselect*fromtable_name2
Select*Fromtable_namePartition(partition_name);
hash分区表一般由于数据分布均衡性,查
询不是
通过对分区的操作进行的。
update、insert操作同普通表。
2.3、列表分区表
散列分区表创建:
partitionbylist(paration_row)
partitionpartition_name1
values
(row_value1,row_value3,row_value8)
tablespace
tablespace_name1,
partitionpartition_name2
(row_value4,row_value6,row_value7)
tablespace_name2,
partition
partition_name3
(row_value9,row_value10,row_value11,row_value12,row_value15)
tablespacetablespace_name3
partitionpartition_nameXvalues(default)tablespacetablespace_nameX
表的插入、更新、删除和普通表相同,在hash分区和list分区中,比较困难的操作是:
从一张5
千万以上的表中,要删除一千万条记录比较困,可以通过以下方法进行清理:
第一种方法:
a创建中间表和表备份,b进行数据插入,c进行锁表,d进行表名修改,e进行索引创建
和存储过程编译,f进行表truncate操作
第二种方法:
直接创建job进行delete删除:
这样长期做,会降低表的执行效果
a进行备份数据,b进行表记录删除,每次删除1000——2000条记录,不然会发生锁表,c重
建索引,d进行表分析。
declare
v_lognumnumber;
数据库中拥有的日志文件数
v_needarcnumber;
需要归档的日志文件数
selectcount
(1)intov_lognumfromv$log;
loop
selectcount
(1)intov_needarcfromv$archive;
ifv_needarc
exit;
endif;
deletefrom
对象.table_namewhere条件1and条件2andrownum
ifsql%rowcount=0then
commit;
––––––—————-----------
createorreplaceprocedureprocedure_name(exp_date1varchar2,exp_date2varchar2)
as
del_sqlvarchar2(1024);
v_cinteger;
del_sql:
=deletefrom对象.表名awhereexists(select1from对象.表名bwhere
条件1and
条件2and、、、、
条件n)andrownum
foriin1..10000loop
executeimmediatedel_sqlusingexp_date1,exp_date2;
endprocedure_name;
3、分区操作
添加分区
altertabletable_partition_nameaddpartitionpartition_namevalueslessthan
(to_date(row_values,'
yyyy-mm-dd));
以上添加的分区界限应该高于最后一个分区界限。
altertabletable_partition_name
modifypartitionpartition_name
add
subpartition
subpartition_name
values(row_values);
删除分区
以下代码删除表分区:
altertabletable_partition_namedroppartitionpartition_namestorage;
如果删除的分区是表中唯一的分区,那么此分区将不能被删除,要想删除此分区,必须删除
表
截断分区
截断某个分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。
当表
中即使只有一个分区时,也可以截断该分区。
通过以下代码截断分区:
altertabletable_partition_nametruncatepartitionpartition_name;
合并分区
合并分区是将相邻的分区合并成一个分区,结果分区将采用较高分区的界限,值得注意的是,不能
将分区合并到界限较低的分区。
以下代码实现了partition_name1与partition_name分区的合并:
altertabletable_partition_namemergepartitionspartition_name1,partition_name2intopartition
partition_name2;
拆分分区
拆分分区将一个分区拆分两个新分区,拆分后原来分区不再存在。
注意不能对HASH类型的分
区进行拆分。
altertabletable_partition_namesblitpartitionpartition_name1
at(to_date(row_value,'
yyyy-mm-dd))
into(partitionpartition_name1,partitionpartition_name2);
接合分区(coalesca)
结合分区是将散列分区中的数据接合到其它分区中,当散列分区中的数据比较大时,可以增加
散列分区,然后进行接合,值得注意的是,接合分区只能用于散列分区中。
通过以下代码进行接合
分区:
altertabletable_hash_partition_namecoalescapartition;
重命名表分区
以下代码将partition_name1更改为partition_name2
altertabletable_partition_namerenamepartitionpartition_name1topartition_name2;
相关查询
跨分区查询
selectsum(*)from
(selectcount(*)cnfromtable_partition_namepartition(partition_name1)
unionall
selectcount(*)cnfromtable_partition_namepartition(partition_name2));
查询表上有多少分区
select*fromuser_tab_partitionswheretable_name=table_partition_name
查询索引信息
selectobject_name,object_type,tablespace_name,sum(value)
fromv$segment_statistics
wherestatistic_namein(physicalreads,'
physicalwrite,'
logicalreads)andobject_type=index
groupbyobject_name,object_type,tablespace_nameorderby4desc
显示数据库所有分区表的信息:
select*fromdba_part_tables
显示当前用户可访问的所有分区表信息:
select*fromall_part_tables
显示当前用户所有分区表的信息:
select*fromUSER_PART_TABLES
显示表分区信息显示数据库所有分区表的详细分区信息:
select*fromdba_tab_partitions
显示当前用户可访问的所有分区表的详细分区信息:
select*fromall_tab_partitions
显示当前用户所有分区表的详细分区信息:
select*fromuser_tab_partitions
显示子分区信息显示数据库所有组合分区表的子分区信息:
select*fromdba_tab_subpartitions
显示当前用户可访问的所有组合分区表的子分区信息:
select*fromall_tab_subpartitions
显示当前用户所有组合分区表的子分区信息:
select*fromuser_tab_subpartitions
显示分区列显示数据库所有分区表的分区列信息:
select*fromdba_part_key_columns
显示当前用户可访问的所有分区表的分区列信息:
select*fromall_part_key_columns
显示当前用户所有分区表的分区列信息:
select*fromuser_part_key_columns
显示子分区列显示数据库所有分区表的子分区列信息:
select*fromdba_subpart_key_columns
显示当前用户可访问的所有分区表的子分区列信息:
select*fromall_subpart_key_columns
显示当前用户所有分区表的子分区列信息:
select*fromuser_subpart_key_columns
怎样查询出oracle数据库中所有的的分区表
select*fromuser_tablesawherea.partitioned=yes
删除一个表的数据是
truncatetabletable_name;
删除分区表一个分区的数据是
altertabletable_partition_nametruncatepartitionpartition_nameNdropstorage;
4、表状态查询
Select*FromDba_Tab_PartitionsWhereTable_Name=’%表名%’;
Selectowner,index_name,status,degree,table_namefromdba_indexeswhere
table_name=’table_name’;
selectowner,bytes/1024/1024,segment_nam,segment_type,tablespace_namefromdba_segments
where
segment_name=’table_name’andsegment_type=’TABLE’;
5、DDL语句操作
创建表
基本语法:
create[globaltemporary]tabletable_name(
column_nametype[constraintconstraint_defdefaultdefault_exp]
[,column_nametype[constraintconstraint_defdefaultdefault_exp]])
[oncommit{delete|preserve}rows]
tablespacetab_space;
其中:
1)globaltemporary说明改表的行都是临时的,这种表就称为临时表。
行的有效期由oncommit字句指定。
临时表对于所有的会话都是可见的,但是这些行则是特定于
某个会话的。
2)table_name指定了要分配给该表的名称。
3)column_name指定了要分配给某个列的名称。
4)type指定了对某个列的类型。
5)constraint_def指定了对某个列的约束的定义。
6)default_def指定了一个表达式,用来为某个列赋予默认值。
7)oncommit控制临时表中行的有效期。
delete说明这些行在事务的末尾要被删除。
preserve说明这些行在会话的末尾要被删除。
若对临时表没有指定oncommit选项,那末默认值是
delete。
8)tab_space为该表指定表空间。
若没有指定表空间,该表就被存储在该用户的默认表空间中。
获得有关表的信息可以通过如下操作获取有关表的信息:
对表执行describe命令。
descorder_status_temp
注意desc是SQL*PLUS命令,在SQL中不能执行。
查询user_tables,它是数据字典的一部分。
另:
查询用户可访问的表的相关信息,可以查询
all_tables。
selecttable_name,tablespace_name,temporary
fromuser_tables
wheretable_namein(table_name,OR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 基本 操作 笔试 试题