1.创建一个分区表,并插入一些数据,同时查询出每个分区的数据。
答:创建分区表如下
2.创建一个视图,并给出一个查询语句。
3.在当前用户下创建一个同义词,用于查询scott用户下的dept表,并给出一个查询语句。
报错了,原因是没有创建同义词的权限,使用sysdba授权test后即可创建同义词成功。
4.创建一个sequence,并给出一个获得sequence号的语句。
答:创建一个最小值为1,最大值为1000,每次增加1的序号,其中如果设置了CACHE值,ORACLE将在内存里预先放置一些sequence,以使存取速度更快。cache里面的取完后,oracle自动再取一组到cache。 但是,使用cache可能会跳号, 当遇到数据库突然异常down掉(shutdown abort),cache中的sequence就会丢失.
因此,推荐在create sequence的时候使用 nocache 选项。
第一次nextval返回的是初始值,随后的nextval会自动增加你定义的increment by值,然后返回增加后的值。currval总是返回当前SEQUENCE的值,但是在第一次nextval初始化之后才能使用currval,否则会出错。一次nextval会增加一次sequence的值。
5.创建一个指向本地数据库的dblink,并通过dblink查询一个表中的数据。
答:本地数据库名为orcl,为本地数据库创建一个dblink,查询表scott.dept中的数据
6.创建一个表空间,并在这个表空间上创建一张表。
答:创建表空间scott_dataspace,在这个表空间上创建一个表t_t
7.将数据库设置为归档模式,并进行一次日志切换,观察归档文件的产生。
答:查看数据库当前的模式时否为归档模式
将数据库设置为归档模式
正常关闭数据库,关闭后,启动数据库实例到mount状态,将数据库设置为归档模式,打开数据库后,查看当前数据库的日志模式
进行日志切换,产生归档日志
查看归档日志存放路径,并找到日志
8.说说你是如何理解commit和checkpoint的。
答:checkpoint与commit的区别
commit:提交事务,将修改数据产生的日志写到磁盘上。为的是保护数据,通过将redo日志写到磁盘上来确保相应数据的修改。因为redo日志写入磁盘的速度相当快,而oracle认为,只要修改数据产生的redo已经安全的写到磁盘上了,那么相应的数据修改是否写到磁盘就不重要了。
checkpoint:将脏数据写到磁盘上,缩短数据的恢复时间,为databuffer提供空闲空间。
有以下几点需要注意:写到磁盘上的数据不一定是已经提交的,只要是修改过的,都会写到磁盘上;数据写到磁盘上之前,这部分数据对应的日志信息必须提前写到磁盘上;alter system checkpoint 将只把已经commit的数据写到磁盘上;安全关闭数据库时,所有commit的数据会写到磁盘上。
9.说说你是如何理解redo和undo的作用的。
答:redo(重做信息)是Oracle 在线(或归档)重做日志文件中记录的信息,万一出现失败时可以利用这些数据来“重放”(或重做)事务。undo(撤销信息)是Oracle 在undo 段中记录的信息,用于取消或回滚事务。
重做日志文件(redo log file)对Oracle 数据库来说至关重要。它们是数据库的事务日志。Oracle维护着两类重做日志文件:在线(online)重做日志文件和归档(archived)重做日志文件。这两类重做日志文件都用于恢复;其主要目的是,万一实例失败或介质失败,它们就能派上用场。
从概念上讲,undo 正好与redo 相对。你对数据执行修改时,数据库会生成undo 信息,这样万一你执行的事务或语句由于某种原因失败了,或者如果你用一条ROLLBACK 语句请求回滚,就可以利用这些undo信息将数据放回到修改前的样子。redo 用于在失败时重放事务(即恢复事务),undo 则用于取消一条语句或一组语句的作用。与redo 不同,undo 在数据库内部存储在一组特殊的段中,这称为undo段(undosegment)。
从概论上讲,redo与undo正好相对,当我们对数据进行修改时,会生成undo信息,以便回到更改前的状态。万一我们执行的事务或语句由于某种原因而导致失败,或者用一条rollback语句请求回滚,就可以利用这些undo信息将数据恢复到修改前的样子。redo用于在失败时重放事务(即事务恢复),确保数据不会丢失。undo则用于取消一条语句或一组语句的作用。
10.对于下面的操作,说一说redo和undo分别是在哪个阶段产生的
"update t set id=1 where id=2";
答:oracle获得该语句的执行计划之后,前往SGA区的database buffer cache区中查找存放id=1的数据块,如果没有,则将该数据块从数据文件中加载到buffer cache中。oracle将该数据块未被修改前的映像写入undo,此时产生一条undo记录,与此同时,undo段的数据块发生了改变会产生一条redo记录(任何数据块的改变都会redo),oracle会将buffer cache中id=1的数据块中id的值修改为2,此时数据块的改变会产生另一条redo记录。