三级数据库技术重点大汇总!

发布于 2018-08-29 14:27  编辑:simi
0
计算机等级考试题库 扫码微信刷题


20189月计算机等级考试即将开始,别再为不知怎么准备、怎么做计算机等级考试题库而担心啦!今天就跟着小编来一起看看三级数据库技术重点,取得理想的成绩吧!


2018年计算机三级数据库资料

 

1】用户如何有效地利用数据字典?

ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库的产生而产生, 随着数据库的变化而变化,体现为sys用户下的一些表和视图。数据字典名称是大写的英文字符。

 

数据字典里存有用户信息、用户的权限信息、所有数据对象信息、表的约束条件、统计分析数据库的视图等。我们不能手工修改数据字典里的信息。

 

很多时候,一般的ORACLE用户不知道如何有效地利用它。

dictionary   全部数据字典表的名称和解释,它有一个同义词dict

dict_column  全部数据字典表里字段名称和解释

 

如果我们想查询跟索引有关的数据字典时,可以用下面这条SQL语句:

SQL >select * from dictionary where instr(comments,’index’)>0;

如果我们想知道user_indexes表各字段名称的详细含义,可以用下面这条SQL语句:

SQL >select column_name,comments from dict_columns where table_name=’USER_INDEXES’;

依此类推,就可以轻松知道数据字典的详细名称和解释,不用查看ORACLE的其它文档资料了。

 

下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。

一、用户

查看当前用户的缺省表空间

SQL >select username,default_tablespace from user_users;

查看当前用户的角色

SQL >select * from user_role_privs;

查看当前用户的系统权限和表级权限

SQL >select * from user_sys_privs;

SQL >select * from user_tab_privs;

 

二、表

查看用户下所有的表

SQL >select * from user_tables;

查看名称包含log字符的表

SQL >select object_name,object_id from user_objects

where instr(object_name,’LOG’) >0;

查看某表的创建时间

SQL >select object_name,created from user_objects where object_name=upper(’&table_name’);

查看某表的大小

SQL >select sum(bytes)/(1024*1024) as "size(M)" from user_segments

where segment_name=upper(’ &table_name’);

查看放在ORACLE的内存区里的表

SQL >select table_name,cache from user_tables where instr(cache,’Y’)>0;

 

 

三、索引

查看索引个数和类别

SQL >select index_name,index_type,table_name from user_indexes order by table_name;

查看索引被索引的字段

SQL >select * from user_ind_columns where index_name=upper(’&index_name’);

查看索引的大小

SQL >select sum(bytes)/(1024*1024) as "size(M)" from user_segments

where segment_name=upper(’ &index_name’);

 

四、序列号

查看序列号,last_number是当前值

SQL >select * from user_sequences;

 

五、视图

查看视图的名称

SQL >select view_name from user_views;

查看创建视图的select语句

SQL >set view_name,text_length from user_views;

SQL >set long 2000; 说明:可以根据视图的text_length值设定set long 的大小

SQL >select text from user_views where view_name=upper(’&view_name’);

 

六、同义词

查看同义词的名称

SQL >select * from user_synonyms;

 

七、约束条件

查看某表的约束条件

SQL >select constraint_name, constraint_type,search_condition, r_constraint_name

from user_constraints where table_name = upper(’ &table_name’);

SQL >select c.constraint_name,c.constraint_type,cc.column_name

from user_constraints c,user_cons_columns cc

where c.owner = upper(’ &table_owner’) and c.table_name = upper(’&table_name’)

and c.owner = cc.owner and c.constraint_name = cc.constraint_name

order by cc.position;

 

八、存储函数和过程

查看函数和过程的状态

SQL >select object_name,status from user_objects where object_type=’FUNCTION’;

SQL >select object_name,status from user_objects where object_type=’PROCEDURE’;

查看函数和过程的源代码

SQL >select text from all_source where owner=user and name=upper(’&plsql_name’)

 

 

 

 

 

 

 

 

2SQLServer导入数据问题解决:

使用SQL Server的朋友可能有遇到这样的情况,在导入数据的时候,ID自增属性丢失了,本文就给大家介绍如何解决这个问题,这是在我遇到的时候做的总结,特分享给大家。

 

首先利用查询分析器连接上刚被导入数据的远程数据库,然后执行如下的SQL语句就可以修改指定的数据库表了(这里假设fromo为指定数据库表)

ALTER TABLE from DROP COLUMN id

ALTER TABLE from ADD id int IDENTITY(1,1)

上面第一个SQL语句用来删掉丢失了自增属性的id列,第二个SQL语句用来增加一个新的id列,并设置其为从1开始以1为步长自增。

 

因为使用时间长了,日志会膨胀得很夸张,所以可以执行以下sql语句,非常安全。

DUMP TRANSACTION 你的数据库名 WITH NO_LOG  清空日志

BACKUP LOG 你的数据库名 WITH NO_LOG

 

 

 

 

 

 

3】数据文件坏删除数据文件:

 

如果数据库运行在非归档模式:

1. MOUNT数据库 - startup mount

 

2. 删除数据文件 - alter database datafile xxx offline drop

 

3. 打开(OPEN)数据库 - alter database open

 

4. 查看属于该表空间的所有对象:

select owner, segment_name, segment_type

from dba_segments

where tablespace_name='tbs_name'

 

5. 导出该表空间的所有对象------exp命令来做

 

6. 删除表空间 - drop tablespace tbs_name including contents

 

7. 删除这个表空间的所有物理的数据文件Delete the physical datafiles belonging to the tablespace

 

8. 重建表空间,导入前面导出的DMP文件.

 

 

 

如果数据库是运行在归档模式:

1. MOUNT数据库 - startup mount

 

2. 删除数据文件 - alter database datafile xxx offline

(Note: offline这个数据文件,此数据文件还是属于这个数据库的一部分,只是在控制文件中将它的状态标记为offline.)

 

3. 在操作系统一级删除物理的数据文件

 

4. 打开(OPEN)数据库 - alter database open

 

5. 后面的可以做下面操作:

导出该表空间的对象

删除表空间

重建表空间并导入对象

 

 

如果数据库运行在归档模式下,并且数据文件有备份:

1.MOUNT数据库

 

2.OFFLINE数据文件:alter database datafile xxx offline;

 

3.将备份的数据文件拷贝到原来数据文件的位置.

 

4.将备份数据文件到目前的所有归档日志放到归档目录.

 

5.恢复数据文件:recover automatic datafile xxx(要输入全路径名)

 

6.然后ONLINE数据文件:alter database datafile xxx online;

 

7.打开(OPEN)数据库:alter database open;

 

8.做一次数据库的关机全备份.

 

 

 

 

 

 

4】谈索引使用的误区:

结合实际,谈索引使用的误区

理论的目的是应用。虽然我们刚才列出了何时应使用聚集索引或非聚集索引,但在实践中以上规则却很容易被忽视或不能根据实际情况进行综合分析。

 

下面我们将根据在实践中遇到的实际问题来谈一下索引使用的误区,以便于大家掌握索引建立的方法。

 

1、主键就是聚集索引

这种想法笔者认为是极端错误的,是对聚集索引的一种浪费。虽然SQL SERVER默认是在主键上建立聚集索引的。

通常,我们会在每个表中都建立一个ID列,以区分每条数据,并且这个ID列是自动增大的,步长一般为1。我们的这个办公自动化的实例中的列Gid就是如此。

 

此时,如果我们将这个列设为主键,SQL SERVER会将此列默认为聚集索引。这样做有好处,就是可以让您的数据在数据库中按照ID进行物理排序,但笔者认为这样做意义不大。

 

显而易见,聚集索引的优势是很明显的,而每个表中只能有一个聚集索引的规则,这使得聚集索引变得更加珍贵。

 

从我们前面谈到的聚集索引的定义我们可以看出,使用聚集索引的最大好处就是能够根据查询要求,迅速缩小查询范围,避免全表扫描。在实际应用中,因为ID号是自动生成的,我们并不知道每条记录的ID号,所以我们很难在实践中用ID号来进行查询。这就使让ID号这个主键作为聚集索引成为一种资源浪费。其次,让每个ID号都不同的字段作为聚集索引也不符合“大数目的不同值情况下不应建立聚合索引”规则;当然,这种情况只是针对用户经常修改记录内容,特别是索引项的时候会负作用,但对于查询速度并没有影响。

 

在办公自动化系统中,无论是系统首页显示的需要用户签收的文件、会议还是用户进行文件查询等任何情况下进行数据查询都离不开字段的是“日期”还有用户本身的“用户名”。

通常,办公自动化的首页会显示每个用户尚未签收的文件或会议。虽然我们的where语句可以仅仅限制当前用户尚未签收的情况,但如果您的系统已建立了很长时间,并且数据量很大,那么,每次每个用户打开首页的时候都进行一次全表扫描,这样做意义是不大的,绝大多数的用户1个月前的文件都已经浏览过了,这样做只能徒增数据库的开销而已。

 

事实上,我们完全可以让用户打开系统首页时,数据库仅仅查询这个用户近3个月来未阅览的文件,通过“日期”这个字段来限制表扫描,提高查询速度。如果您的办公自动化系统已经建立的2年,那么您的首页显示速度理论上将是原来速度8倍,甚至更快。

在这里之所以提到“理论上”三字,是因为如果您的聚集索引还是盲目地建在ID这个主键上时,您的查询速度是没有这么高的,即使您在“日期”这个字段上建立的索引(非聚合索引)

 

下面我们就来看一下在1000万条数据量的情况下各种查询的速度表现(3个月内的数据为25万条)

(1)仅在主键上建立聚集索引,并且不划分时间段:

Select gid,fariqi,neibuyonghu,title from tgongwen

用时:128470毫秒(即:128)

(2)在主键上建立聚集索引,在fariq上建立非聚集索引:

select gid,fariqi,neibuyonghu,title from Tgongwen

where fariqi> dateadd(day,-90,getdate())

用时:53763毫秒(54)

(3)将聚合索引建立在日期列(fariqi)上:

select gid,fariqi,neibuyonghu,title from Tgongwen

where fariqi> dateadd(day,-90,getdate())

用时:2423毫秒(2)

虽然每条语句提取出来的都是25万条数据,各种情况的差异却是巨大的,特别是将聚集索引建立在日期列时的差异。事实上,如果您的数据库真的有1000万容量的话,把主键建立在ID列上,就像以上的第12种情况,在网页上的表现就是超时,根本就无法显示。这也是我摒弃ID列作为聚集索引的一个最重要的因素。

得出以上速度的方法是:在各个select语句前加:declare @d datetime

set @d=getdate()

并在select语句后加:

select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())

 

2、只要建立索引就能显著提高查询速度

事实上,我们可以发现上面的例子中,第23条语句完全相同,且建立索引的字段也相同;不同的仅是前者在fariqi字段上建立的是非聚合索引,后者在此字段上建立的是聚合索引,但查询速度却有着天壤之别。所以,并非是在任何字段上简单地建立索引就能提高查询速度。

从建表的语句中,我们可以看到这个有着1000万数据的表中fariqi字段有5003个不同记录。在此字段上建立聚合索引是再合适不过了。在现实中,我们每天都会发几个文件,这几个文件的发文日期就相同,这完全符合建立聚集索引要求的:“既不能绝大多数都相同,又不能只有极少数相同”的规则。由此看来,我们建立“适当”的聚合索引对于我们提高查询速度是非常重要的。

 

3、把所有需要提高查询速度的字段都加进聚集索引,以提高查询速度

上面已经谈到:在进行数据查询时都离不开字段的是“日期”还有用户本身的“用户名”。既然这两个字段都是如此的重要,我们可以把他们合并起来,建立一个复合索引(compound index)

很多人认为只要把任何字段加进聚集索引,就能提高查询速度,也有人感到迷惑:如果把复合的聚集索引字段分开查询,那么查询速度会减慢吗?带着这个问题,我们来看一下以下的查询速度(结果集都是25万条数据)(日期列fariqi首先排在复合聚集索引的起始列,用户名neibuyonghu排在后列)

(1)select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi>'2004-5-5'

查询速度:2513毫秒

(2)select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi>'2004-5-5' and neibuyonghu='办公室'

查询速度:2516毫秒

(3)select gid,fariqi,neibuyonghu,title from Tgongwen where neibuyonghu='办公室'

查询速度:60280毫秒

从以上试验中,我们可以看到如果仅用聚集索引的起始列作为查询条件和同时用到复合聚集索引的全部列的查询速度是几乎一样的,甚至比用上全部的复合索引列还要略快(在查询结果集数目一样的情况下);而如果仅用复合聚集索引的非起始列作为查询条件的话,这个索引是不起任何作用的。当然,语句12的查询速度一样是因为查询的条目数一样,如果复合索引的所有列都用上,而且查询结果少的话,这样就会形成“索引覆盖”,因而性能可以达到最优。同时,请记住:无论您是否经常使用聚合索引的其他列,但其前导列一定要是使用最频繁的列。

 

 

 

 

 

 

5oraclesqlserver相互操作:

一:sqlserver连接oracle

1.配置windowsODBC数据源:

开始菜单—》设置—》管理工具—》数据源(ODBC)—》进入配置用户DSN或者系统DSN均可以:

添加—》选择Microsoft ODBC for oracle—》自定义数据源名称(最好跟tns中连接串同名!)—》服务器名称

(必填!填写tns文件中的连接串名称)—》完成。

 

2.配置sqlserver2000中的连接服务器:

企业管理器—》安全性—》连接服务器—》右键新建连接服务器—》定义连接名称;

选其他数据源; 指定程序名称为:Microsoft OLE DB Provider for Oracle; 产品名称可不填;

数据源指定刚才ODBC中定义好的数据源名称; 提供程序字符串按以下格式填写:User ID=username;Password=userpasswd

(或者按如下格式:UID=username;PWD=userpasswd)

这里的用户名和密码对应所要连接的oracle数据库中的用户名和密码 —》 安全性标签页里:

设置用此安全上下文进行,并录入oracle的数据库用户名和密码—》服务器选项标签页可默认—》确定。

 

3.完成了。使用方法

sqlserver企业管理器—》安全性—》连接服务器打开刚建好的连接服务器—》点击表,

即可在右边窗口看到该oracle数据库用户拥有的的所有表名,但在这里还并不能查看表的记录,这个需要在sqserver的查询分析器中用具体sql实现!

访问表时,使用格式为: [连接服务器名]..[ORACLE用户].[表名]。必须为大写。更详细具体的使用这里不再赘述。

 

二:oracle连接sqlserver

1、安转透明网关

在自定义安转内

D:\oracle\ora92\tg4msql\admin\inittg4msql.ora tg4msql

 

2、在D:\oracle\ora92\network\admin\listener.ora内添加

(SID_DESC =

(GLOBAL_DBNAME = tg4msql)

(PROGRAM = tg4msql)

(ORACLE_HOME = D:\oracle\ora92)

(SID_NAME = tg4msql)

)

 

3、配置tns

tnsnames.ora

 

例子1

cdma =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = zhyg)(PORT = 1521))

)

(CONNECT_DATA =

(SID = tg4msql)

(SERVER = DEDICATED)

)

(HS=OK)

)

例子2

du =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = sha38)(PORT = 1521))

)

(CONNECT_DATA =

(SID = jf)

(SERVER = DEDICATED)

)

(HS=OK)

)

三、创建数据链路

CREATE PUBLIC DATABASE LINK DU CONNECT TO SA IDENTIFIED BY SA USING 'DU'

 



考无忧小编tips

不求时时刻刻在刷计算机等级考试题库,但求记住要劳逸结合刷题、复习。今天,你刷了多少题?复习了以上的三级数据库技术重点了吗?






文章推荐:

全国计算机等级考试可以不考一级直接考二级吗?

2018年全国计算机等级考试题库“二级MS Office 高级应用考试大纲”

全国计算机等级考试报考成功后可以退费吗?(内附计算机等级考试题库)



温馨提示:

考试想拿高分吗?更多计算机等级考试题库二级ms office试题请点击查看>>>二级ms office

想要了解更多的计算机等级考试题库请点击下载>>>计算机等级考试题库

想知道更多关于计算机等级考试题库的最新资讯吗?点击进入>>>计算机等级考试题库资讯




本文网址:http://www.k51.com.cn/info/jsjdjks/1808/2945900.html
选择分享到: