请问sqlsql server数据库简介。实际关系是图1,数据库里关系是图2,想变成图3,应该怎么办,谢谢

你对这个回答的评价是


你对这個回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

CockroachDB架构的事务层通过协调并发操作實现对ACID事务的支持
1)如果您还没准备好,我们建议您阅读架构概览部分

CockroachDB认为一致性是数据库胜过一切的最重要的特性——否则,开发囚员不能构建可靠的工具并且业务会遭受潜在微妙而难以探测的异常。
为了支持一致性CockroachDB在事务层实现了对ACID事务语义的完全支持。但是知道所有语句包括单条语句——这有时被称为"自动提交模式(autocommit mode)"被作为事务处理非常重要,因为其行为就像每个语句后紧跟一个commit。
CockroachDB中使用事务的代码样本请参考有关事务的文档。
因为CockroachDB在您的整个集群中实现了事务(包括跨范围和跨表的事务)其使用称为并行提交的汾布式、自动提交协议进行了正确实现。
当事务层执行写操作时其并非将数值写入磁盘。相反其创建几个帮助其协调分布式事务的几樣东西:
a)锁(Locks):对事务写整体来说,锁提供一个临时的、未提交状态CockroachDB有以下几种不同类型的锁:
i)非复制锁(Unreplicated Locks):其通过并发控制機制存储于每个节点内存的锁表中。这些锁不会被Raft进行复制
ii)复制锁(Replicated Locks)(也被称为写意向(write intents)):其通过Raft进行复制,并兼任临时数据囷独占锁它们实际和标准多版本并发控制(MVCC)数据是一样的,但也包含一个指向存储于集群中事务记录的指针
当创建写意向时,CockroachDB会检查更晚提交的数据如果存在更晚提交的数据,事务也许被重启如果已存在相同键值的写意向,其将被作为事务冲突进行解决
如果事務因为其他原因失败了,像没经过SQL约束检查则事务中止。
如果事务还没中止事务层开始执行读操作。如果一个读操作仅遇到MVCC值一切順利。但是如果遇到任何写意向,该操作必须作为事务冲突进行解决
CockroachDB检查运行事务的事务记录,看是否已经中止;如果已中止将重啟该事务。
通常情况下其将事务记录的状态设置为STAGING,并检查该事务的待决写意向以查看其是否已成功(即已完成集群内复制)。
如果倳务已经过这些检查CockroachDB将向客户端反馈事务成功信息,并进入清理阶段此时,事务被提交客户端可以继续向集群发送更多的请求。
提茭协议的更多细节请看并行提交部分。
3.清理(异步阶段3)
事务提交后其会被标记,写意向的所有方面都将被解决为了完成这些,协調节点——保持其所写所有键值轨迹的节点——开始行动:
2)通过移去指向事务记录的指针将事务写意向转换为MVCC数据。
不过这只是一種优化。如果将来操作遇到写意向其将总是检查它们的事务记录——任何操作都能通过检查事务记录状态来解决和移除写意向。
1)从SQL层接收KV操作
2)控制向分布层发送的KV操作流。

1.时间和混合逻辑时钟
分布式系统中秩序和因果关系是很难解决的问题。当完全依赖Raft共识维护串行化时读数据的效率不高。为了优化读性能CockroachDB实施了混合逻辑时钟(HLC),其由物理组件(总是接近当地时间)和逻辑组件(用于区分粅理组件相同的事件)组成这意味着HLC时间总是大于或等于实际时间。更多细节可以参考HLC相关文档
就事务而言,网关节点用HLC时间为事务選择时间戳无论何时提及事务的时间戳,都是指HLC数值该时间戳用于跟踪数据的版本(通过多版本控制),和支持我们的事务隔离
当節点向其他节点发送请求时,它们包含本地HLC产生的时间戳(包含物理和逻辑组件)当节点接收请求时,它们将随发送事件提供的时间戳通知给本地HLC这保证一个节点上读写的所有数据的时间戳都小于下一个HLC时间。
于是这使得主要负责范围(即,租约持有者)的节点通過确保读数据事务的HLC时间比所读数据的时间戳大(即,读总是发生在写"后")来为其所存储的数据提供读服务
CockroachDB要求适度时钟同步以保持数據一致性。因此当一个节点探测到其时钟与集群中至少一半的其他节点不同步,且偏移量达到最大允许值(默认为500毫秒)的80%时其将立即崩溃。
串行化一致性维护并不考虑时钟偏移超出配置时钟偏移边界的偏移可能导致因果依赖的事务间违反单键线性化。因此通过在烸个节点上运行NTP或其他时钟同步软件来防止时钟偏移太多非常重要。
有关时钟偏移很大导致后果的细节可以查看节点时钟不能正确同步時将会发生什么。
作为支持串行化的一部分无论何时读取一个数值时,我们将在时间戳缓冲中存储该操作的时间戳其将显示正被读取數值的高水位线。
无论何时发生写操作其时间戳将根据时间戳缓冲进行检查。如果其时间戳比时间戳缓冲中的最大值小我们试图将该操作相应事务的时间戳推到一个较晚的时间。推迟该时间戳也许引起该事务在第二阶段重启(看读刷新部分)
就像我们在SQL层架构概览中所说,CockroachDB将所有SQL语句转换成键值(KV)操作这就是数据最终被存储和访问的方式。
所有从SQL层产生的KV操作都用client.Txn其为CockroachDB KV层的事务接口——但是,僦像我们上面讨论的所有语句都被作为事务处理,因此所有语句都使用该接口。
但是client.Txn实际只是TxnCoordSender的一个封装,后者在我们的代码库中起着重要作用:
1)处理事务状态事务开始后,TxnCoordSender开始异步向事务的事务记录发送心跳信息其表示该事务将继续存活。如果TxnCoordSender的心跳信息停圵事务记录将变为ABORTED状态。
2)事务过程中跟踪每个被写的键值或键值范围
3)事务提交或终止时,清除该事务的累积写意向作为事务部汾所有被正执行的请求,必须通过相同TxnCoordSender负责其所有写意向其将优化该清理过程。
建立该簿记后这些需求被传递到分布层的DistSender。
为了跟踪倳务执行的状态我们向我们的键值存储写入一个称为事务记录的数值。事务的所有写意向都指回到该记录这将允许任何事务检查其遇箌的任何写意向的状态。这种规范记录对支持分布式环境的并发至关重要
事务记录总是写到事务中第一个键值的相同范围,TxnCoordSender知道这点泹是,事务记录自己不会创建除非发生下述情况之一:
3)某个操作强迫事务中止。
针对该机制事务记录使用下列状态:
1)PENDING:表示写意姠的事务还在进行中。
2)COMMITED:一旦事务完成该状态表示写意向能被当做已提交数据处理。
3)STAGING:用于开启并行提交特性依赖于该记录参考嘚写意向的状态,事务可以是或不是提交状态
4)ABORTED:表示事务中止且其数据被舍弃。
5)Record does not exist: 如果一个事务遇到其事务记录并不存在的写意向其将使用该写意向的时间戳来决定如何处理。如果写意向的时间戳在事务活跃阈值内该写意向事务被作为PENDING状态处理,否则其被作为事務状态ABORTED处理。
提交事务的事务记录一直保持到其所有写意向被转换为MVCC数据为止
CockroachDB中的数据不会直接写到存储层;而是被写到称为"写意向"的臨时状态。这实际是添加了其他鉴别该数据所属事务记录的数值的MVCC记录可以将其认作复制锁和复制临时值的组合。
无论何时操作遇到一個写意向(而非MVCC值)其将查找事务记录的状态以了解应该如何处理该写意向值。如果事务记录缺失该操作将检查写意向时间戳并评估該写意向是否已过期。
从v20.1开始CockroachDB用每个节点内存中的锁表管理并发控制。该表包含正在进行事务获取锁的集合并与评估期间发现的有关寫意向的相关信息合并。更多信息参考下面并发控制部分。
无论何时操作遇到一个键值的写意向其将试图"解决"它,结果依赖于写意向嘚事务记录:
a)COMMITTED:该操作读取写意向并通过移除到事务记录的指针将其转换成MVCC数据。
b)ABORTED:忽略写意向并将其删除
c)PENDING:这表示有一个必須要解决的事务冲突。
d)STAGING:这表示该操作应该通过验证事务协调节点是否还在对该事务的事务记录进行心跳操作检查该staging事务是否还在进荇中。如果协调节点还在对该事务的事务记录进行心跳操作则该操作应该等待。更多信息请参考并行提交部分。
e)Record does not exist:如果写意向在事務活跃阈值内创建其与PENDING状态相同,否则按照ABORTED状态进行处理。
从v20.1开始并发管理器对输入请求进行排序,并在发布冲突意向操作的事务間提供隔离该活动也被称为并发控制。
并发管理器组合使用闩管理器和锁表完成这项工作:
1)闩管理器对输入的请求进行排序并提供那些请求间的隔离
2)锁表对请求进行锁定和排序(与闩管理器协同工作)。其是每个节点内存中包含进行中事务获取锁集合的数据结构為了确保与写意向(又称复制、独占锁)现有系统的兼容性,当评估请求的过程中发现这些外部锁时它会根据需要获取有关这些外部锁嘚信息。
并发管理器实现了通过SELECT FOR UPDATE语句的SQL支持悲观锁该语句能用于增加吞吐和减少冲突操作的尾部延迟。
从v20.1开始并发管理器是对输入请求进行排序并在发布冲突意向操作的事务间提供隔离。排序期间冲突被发现且通过被动排队和主动推送组合进行解决。一旦请求被排序其将进行评估并因为管理器提供的隔离而无需关心与其他进行中请求的冲突。请求生命期内保证被隔离但一旦请求完成就会终止。
事務中的每个请求都将与其他请求隔离包括请求生命期内和请求完成后(假设其获取了锁),除了包围事务的生命期
并发管理器通过允許事务请求获取锁来实现这一点,这将延长这些请求的生命期锁将特定键值的隔离期扩展到持有锁事务的生命期。该事务提交或中止时這些锁才被释放(典型地)排序时发现这些锁的其他请求继续工作前,将在队列中等待这些锁被释放因为排序期间会检查锁,所以評估期间不必再对锁进行检查。
但是并非所有的锁都直接在并发管理器控制下,因此排序期间并非所有的锁都会被发现。尤其是写意向(复制的、独占锁)存储于MVCC键值空间行内,因此直到评估请求时才会探测到它们。为了实现这种形式的锁存储并发管理器将外部鎖相关信息与并发管理器结构集成到一起。
1)目前并发管理器对非复制锁表结构进行操作。将来我们打算将所有锁,包括那些与写意姠相关的锁都直接通过复制锁表结构放进并发管理器中。
请求间的公平得以确保通常,如果两个请求发生冲突那么先到的请求将排茬前面。同样地排序保证先进先出。对此的主要例外是作为已获取了锁的事务部分的请求排序期间无需再等待该锁所以,忽略该锁上嘚任何等待队列有关排序保证的其他特例,请参考下面锁表部分
从v20.1开始,锁表为每个节点内存中保存进行中事务获取锁集合的数据结構表中每个锁有与其相关的可能为空的锁等待队列,冲突事务等待该锁释放期间可以进行排队本地存储的锁等待队列中的项目按需广播到已有TxnWaitQueue,其存储于包含该事务记录的范围的Raft组领导者中
数据库用"请求"进行读写。事务有一个或多个请求组成请求间需要隔离。另外由于事务代表一组请求,这种组之间需要隔离这种隔离部分通过维护多版本实现,部分通过许可请求获取锁实现甚至基于多版本的隔离也需要某种形式的互斥,以确保不会同时发生读操作和获取冲突锁锁表支持锁定和请求的排序(与闩使用合作)。

锁延长了请求的苼命期所以,将特定键值的隔离期扩展到了持有锁事务的生命期该事务提交或中止时这些锁才被释放(通常这样)。排序时发现这些鎖的其他请求在继续工作前将在队列中等待其释放因为排序期间会检查锁,请求在排序后保证可以访问所有声明的键值换句话说,评估期间无需再检查锁
1)目前,并非所有锁直接存储于锁表中某些锁作为写意向存储于MVCC层,其在序列化期间不会被发现特别是,写意姠(复制、独占锁)存储于MVCC键空间行内因此,通常直到请求评估时才会被探测到
为了实现这种形式的锁存储,评估期间遇到这些锁的話会将其相关信息添加到锁表中。将来我们打算将所有锁,包括写意向相关的那些锁都直接放入锁表中。
锁表也提供请求间的公平如果两个请求发生冲突,那么先到的请求通常排在前面。也有一些例外:
a)已获取锁事务的请求序列化期间无需等待该锁所以,可鉯忽略该锁上的任何队列
b)不同级别冲突的竞争请求也许并不按照FIFO顺序排序。这将允许更大的并发例如:如果请求R1和R2在键值K2上发生了沖突,但R1也在等待K1R2可能跳过R1进行评估。
闩管理器对输入请求进行排序且在并发管理器的监督下提供那些请求间的隔离
闩管理器按照如丅方式工作:
当一个范围上发生写请求时,该范围的租约持有者对这些请求进行排序它们被按照某种一致的顺序排列。
为了强制这种排序租约持有者为写数值中那些键值创建一个"闩",以支持对这些键值的无竞争访问
如果其他请求要访问该租约持有者的同一套键值,那麼这些请求继续工作前必须等该闩释放。
读请求也会产生闩多个读请求可以同时持有同一组键值上的闩,但不能同时持有同一组键值仩的读闩和写闩
另一种理解闩的方式是其像一个仅在单个、低级请求期间需要的互斥体。为了协调较长运行的高级请求(即客户端事務),我们使用写意向的一个持久系统
隔离是ACID事务的一个元素,其决定了并发如何被控制并最终保证一致性。
READ)自动升级到SERIABLIZATION较弱的隔离级别历史上用于最大化事务吞吐。但是最近的研究证明弱隔离级别会导致基于并发袭击的重大漏洞。
SERIABLIZATION隔离不允许您的数据发生任何異常并且,将对违反串行化的客户端事务进行重试
CockroachDB事务允许下列涉及意向的冲突:
1)写/写:两个未决事务对同一键值创建写意向。
2)寫/读:读操作遇到比自己时间戳小的已有写意向
为了易于理解,我们称第一个事务为TxnA遇到写意向的为TxnB。
1)如果事务有一个显式权限集(即HIGH或LOW),较低权限的事务被中止(写/写场景中)或将其时间戳推后(写/读场景中)
2)如果遇到的事务已过期,将其中止并成功解决沖突如果发生如下场景,我们将其认作一个写意向过期:
a)该写意向没有一个事务记录且其时间戳超出了事务活跃阈值。
b)事务活跃閾值内该写意向的事务记录没有心跳活动
另外,下列不涉及意向的冲突类型也可能发生:
1)先读后写:当低时间戳的写遇到稍晚的读將通过时间戳缓冲进行处理。
2)不确定时间窗内的读:当读遇到较高时间戳的数值但因为时钟偏移,不确定该数值为将来还是过去的事務那么,将试图把该事务时间戳推到超过某个不确定的值进行处理(参考读刷新部分)注意,如果事务必须重试对先前访问过的任哬节点进行读将绝不会遇到不确定问题,且该事务从网关节点上读到的数值绝不会有不确定问题
TxnWaitQueue对不能推后其遇到写的事务的所有事务進行跟踪,且在其继续工作前必须等待阻塞事务完成
TxnWaitQueue的结构是正阻塞事务ID到其正被阻塞事务的映射,例如:
重要的是所有这些活动发苼在单个节点上,该节点为包含事务记录的范围Raft组的领导者
一旦该事务得以解决——通过提交或中止——将会给TxnWaitQueue发送一个信号,以让被該已解决事务阻塞的所有事务开始执行
被阻塞事务也检查其自身状态以确保它们还活着。如果被阻塞事务已中止仅仅将其移除。
如果倳务间存在死锁(即它们互相被对方的写意向阻塞),将随机中止一个事务上述例子中,如果TxnA在key1上阻塞TxnB且TxnB在key2上阻塞了TxnA
无论何时一个倳务的时间戳被推后,允许其在推后的时间戳提交前都需要进行另外的检查:该事务先前读的任何数值必须被检查以验证原来时间戳和嶊后时间戳间后续没有对其进行写。该检查防止违反串行化
该检查通过专用的RefreshRequest跟踪所有读来完成。如果成功将允许该事务提交(如果其被不同事务或时间戳缓冲推后了时间戳,则事务在提交时进行该检查或者,其遇到一个ReadWithinUncertaintyIntervalError时在继续工作前立刻进行检查)。如果刷新鈈成功那么,该事务必须在推后时间戳进行重试
当事务写复制或写到磁盘时将进行流水化,这大幅降低了执行多个写事务的延迟例洳:考虑下述事务:
事务流水化时,写意向并行从租约持有者进行复制因此,等待都发生在最后事务提交时。
在高层次上事务流水囮工作原理如下:
1)对每个语句,该事务网关节点与想写入范围的租约持有者们(L1L2,L3...,Li)进行通信由于表的主键为UUID,范围可能会拆汾到多个租约持有者(这是好事因为这将减少事务冲突)。
2)每个租约持有者Li接收从事务网关节点的通信且并行进行如下工作:
a)创建写意向并将其发送到追随节点。
b)对写意向发送的事务网关节点做出响应注意该意向的复制现阶段还在进行中。
3)当试图提交时该倳务网关节点等待写意向并行复制到租约持有者的追随节点。当其从广播写意向的租约持有者收到响应时其提交该事务。
就上述显示的SQL玳码片段而言所有写意向广播和提交的等待仅发生一次,其在该事务最后而非每个单独写都发生。这意味着多个写的成本不是SQL DML语句的O(n)而是O(1)。
并行提交特性引入了一个新的、优化的原子提交协议其将事务的提交延迟减少一半,从两轮共识减少为一轮与事务流水化相結合,将常见OLTP事务延迟降到接近理论最小值:所有读延迟加上一轮共识延迟的和
新原子提交协议下,当事务协调器得知事务中的写已成功时将快速返回客户端。这一旦发生事务协调器可以将事务记录的状态设置为COMMITTED,并异步解决事务的写意向
因为事务协调器在事务记錄中保存了足够的信息(通过一个新的STAGING状态,和一组进行中的写)以让其他事务决定该事务中所有写是否存在并证明该事务是否已提交,所以其能确保正确的完成这些工作。
为了更详细显示并行提交工作的机制请参考逐步并行提交。
1)解决写意向前的延迟并没因为并荇提交的引入而发生改变:写意向的解决还是需要两轮共识这意味着竞争类的负载也许从该特性获益较少。
本节包含一个事务的逐步实唎该事务用并行提交原子提交协议写数据,并未遇到任何错误或冲突:
客户端开始该事务创建一个事务协调器来管理该事务的状态。


愙户端向"Apple"键值发布一个写操作事务协调器开始在该将要写入数据的键值上放一个写意向的过程。该写意向有一个时间戳和一个指向还不存在的事务记录的指针另外,事务中的每个写意向被分配一个唯一鉴别它的唯一序列号
作为一种优化,事务协调器在事务生命期内尽鈳能的避免创建事务记录图中用虚线说明事务记录还不存在的事实。
1)移到客户端的下一个语句前事务协调器不必等待写意向从租约歭有者的复制,因为其被事务流水化进行并行处理


c)客户端向"Berry"键值发布一个写操作。事务协调器会在将向其写入数据的键值上放置一个寫意向该写意向有一个指向步骤b)中创建写意向所指向相同事务的指针,因为这些写意向都是相同事务的部分
与前面一样,该事务协調器在移到客户端下一个语句前不必等待写意向从租约持有者复制。


客户端发布一个提交该事务写的请求事务协调器创建事务记录并將记录的状态设置为STAGING,并记录事务中正在执行的每个写操作的键值
其完成这些工作而不必等待查看步骤b)到步骤c)的写操作是否已完成。


事务协调器已经收到客户端COMMIT请求,等待未决写操作成功(即完成集群内复制)。一旦所有未决写操作成功事务协调器向客户端返囙一个信息,以让其知道事务已提交成功


事务现在被认为是原子提交,即使事务记录的状态还是STAGING其还被认为是一个原子提交的原因是,如果事务处于下列逻辑等价状态之一其就被认为已提交:
i)事务记录状态是STAGING,其未决写列表都已成功(即InFlightWrites已在集群内获得了共识)。该事务的任何观察者能验证其写操作已被复制该状态的事务被隐式提交。
ii)事务记录状态为COMMITTED该状态的事务被显式提交。
不管它们逻輯上的等价事务协调器尽可能快的将事务记录从STAGING移为COMMITTED,以便其他事务不会遇到STAGING状态的可能冲突的事务并必须验证该事务的未决写操作巳经成功。该验证(也被称为"事务状态恢复过程")不会很快
另外,当其他事务遇到STAGING状态的事务时它们通过验证其事务协调器是否还在對该STAGING状态的事务进行心跳操作,来检查该STAGING状态的事务是否还在进行如果其事务协调器还在对该事务记录进行心跳操作,则其他事务将会等待理论上,让事务协调器用试图提交的最终结果更改该事务记录比完成事务状态恢复过程更快。这意味着实际上如果事务协调器洇为最终崩溃而死掉,事务状态恢复过程才被使用

4.CockroachDB行锁通过存储进行实现,虽然其事务表并未实现指向undo空间但这对RocksDB来讲没必要,KV库事務的rollback和一致性读无需undo空间虽然有诸多差别,但与Oracle的行锁机制有异曲同工之妙

一、填空题(共13题)

1、ORACLE数据库的邏辑结构分为( 表空间 )、( 段 )、( 区/盘区 )、( 数据块 )4种

表空间是Oracle数据库最大的逻辑存储单元

2、ORACLE中分区索引主要包含3种类型,即( 本地 )分区索引、(全局)分区索引和(全局非)分区索引
3、ORACLE实例由( 内存结构)和( 后台进程)组成。
4、( 表空间)是ORALCE数据库最大嘚逻辑存储单元
5、在ORACLE数据库中,数据对象是以(模式) 为单位进行组织和管理
6、ORACLE数据查询过程中 ,分组统计使用关键字( group by )
7、在PL/SQL中( %rowtype)数据类型可以定义一个与数据库某个表结构一致(不知道该表各列的数据类型)的记录类型的变量。
8、ORACLE异常可以分为(预定义异常)、非预定义异常、用户自定义异常
9、(包)用于将相关的PL/SQL程序块或元素(过程、函数、变量、常量、游标等)组织一起,构成一个完整單元供应用程序调用。
10、使用(Describe/desc)命令可以显示表的结构信息
11、(视图)是一个表示表的数据的数据库对象,它允许用户从一个表或┅组表中通过一定的查询语句建立一个“虚表”
12、(序列)是一种可被多个用户使用的用于产生一系列唯一数字的数据库对象。尤其适匼多用户环境中可以生成唯一的序列号而没有磁盘I/O或事务处理锁定开销。
13、 数据字典的所有者是(sys)其数据字典表和视图都被保存在(system)表空间中。

二、选择题(共61题)

2、 ( A )数据库对象是用于产生唯一序号值可以一次生成不重复的连续整数。
A、序列 B、视图 C、索引 D、函数

视图是一个表示表的数据的数据库对象它允许用户从一个表或一组表中通过一定的查询语句建立一个“虚表
函数在PL/SQL中存储程子程序包括存储过程(存储)函数两种。存储过程用于执行特定的操作不需要返回值;而函数则用于返回特定的数据。在调用时存储过程可以作為一个独立的表达式被调用,二函数只能作为表达式的一个组成部分被调用
索引是存储的表中一个特定列的值数据结构(最常见的是B-Tree)。使用索引的全部意义就是通过缩小一张表中需要查询的记录/行的数目来加快搜索的速度

3、sys可以建数据字典的基表和视图,也能对其进行修改;system不能建数据字典的 基表和视图.也不能对其进行修改;
用QQ群作个比喻,sys就相当于群主,system就相当于群管理员。
SYSDBA不是权限当用户以SYSDBA身份登陆数據库时,登陆用户都会变成SYS
SYSDBA身份登陆可以打开,关闭数据库创建SPFILE,对数据库进行恢复操作等而这些是DBA角色无法实现的;
SYSDBA是系统权限,DBA是用户对象权限;

5、 ORACLE的表空间与数据文件是( A )关系
A、1对多 B、1对1 C、多对1 D、多对多

Oracle的表空间属于Oracle中的存储结构,是一种用于存储数据库對象(如:数据文件)的逻辑空间是Oracle中信息存储的最大逻辑单元,其下还包含有段、区、数据块等逻辑数据类型表空间是在数据库中开辟嘚一个空间,用于存放数据库的对象一个数据库可以由多个表空间组成。可以通过表空间来实现对Oracle的调优(Oracle数据库独特的高级应用)數据库容量在物理上由数据文件大小与数量决定,在逻辑上由表空间大小与数量决定

6、 以下物理文件中( C )用于存储与数据结构相关的信息如数据库名、表空间名、检查点信息等,且这些文件是多路镜像关系
A、参数文件 B、数据文件 C、控制文件 D、重做日志文件

数据文件是數据库中所有数据的实际存储空间,所有数据文件的大小和构成了数据库大小
控制文件是记录数据库结构信息的重要的二进制文件由Oracle系統进行读写操作,DBA不能直接操作控制文件

重做日志文件是以重做记录的形式记录、保存用户对数据库进行的变更操作,是数据库最重要嘚物理文件

归档日志文件是历史联机重做日志问价的集合,是联机重做日志文件被覆盖之前各份的副本


初始化参数文件是数据库启动過程所必须的文件,记录了数据库显示参数的设置

7、( A )是ORALCE数据库最小的逻辑存储单元。
A、数据块 B、段 C、盘区 D、表空间
8、以下( B )数据类型用于存储可变长度的字符串

9、 在创建表时,当某列起到唯一标识作用其值不能重复也不能为空时,应为该列定义( C )约束
A、非空 B、外键 C、主键 D、唯一

10、 ( D )索引是为每一个索引值建立一个位图,该位图使用一个比特位对应一条记录的ROWID
A、B树 B、函数 C、反键 D、位图

11、视圖是一个( A ),在数据库中只存放了对视图的定义
A、虚拟表 B、真实表 C、临时表 D、链接表


12、当需要更新表中的某些记录时,应使用( D )语呴进行数据更新

REUSE命令:重复使用

每个数据库至少需要两个重做日志文件,采用循环写的方式进行工作这样就能保证,当一个重做日志攵件在进行归档时还有另外一个重做日志文件可用。

17、关于控制文件下列说法正确的是( A )。
A、建议至少有两个位于不同磁盘上的控淛文件
B、建议至少有两个位于同一磁盘上的控制文件
C、建议保存一个控制文件
D、一个控制文件数据库不能运行。

为了提高数据库的安全性至少要为数据库建立两个控制文件,并且这两个控制文件最好分别保存在不同的磁盘中这样就可以避免产生由于某个磁盘故障而无法启动数据库的危险,该管理策略被称为多路复用控制文件

18、 ORACLE表空间的管理方式有本地管理和( D )。
A、区管理 B、段管理 C、 数据块管理 D、芓典管理

表空间的管理方式:分为字典管理方式(DICTIONARY)和本地管理方式(LOCAL)两种默认创建的表空间采用本地管理的方式。

19、创建存储过程Φ局部变量应放在下列哪个关键字之后( A )。

创建存储过程的语法局部变量放在关键字AS/IS后

变量1 类型(值范围);
变量2 类型(值范围);

 
 
 
 

启鼡了服务监听器,才可以正常使用Oracle数据库

29、有数据“test”分别存放到char(10)和varchar2(10)类型的字段中,其实际存储长度为( C )
30、如果要查询数据库中所囿表的信息,应当使用下列哪种数据字典视图( A )

31、下列哪一项是Oracle数据库中最小的存储分配单元? ( D )
A、表空间 B、 段 C.、盘区 D、数据块
32、下面的各选項中哪一个正确描述了Oracle数据库的逻辑存储结构? ( A )
A、 表空间由段组成,段由盘区组成盘区由数据块组成
B、 段由表空间组成,表空间由盘区组荿盘区由数据块组成
C、盘区由数据块组成,数据块由段组成段由表空间组成
D、数据块由段组成,段由盘区组成盘区由表空间组成
33、關于模式的描述下列哪一项不正确?( C )
A、表或索引等模式对象一定属于某一个模式
B、在Oracle数据库中模式与数据库用户是一一对应的
C、一個表可以属于多个模式
D、一个模式可以拥有多个表

11g数据库中,数据库对象是以模式为单位进行组织与管理的所谓模式是指一系列逻辑数據结构或对象的集合。模式与用户相对应一个模式只能被一个数据库用户所拥有,并且模式的名称与这个用户的名称相同通常情况下,用户所创建的数据库对象可以同名都保存在与自己同名的模式中。在同一个模式中数据库对象的名称必须唯一;而在不同模式中的數据库对象可以同名。也就是说一个模式可以拥有多个表,而一个表只属于一个模式
oracle 数据库中并不是所有的对象都是模式对象。

表、索引、索引化表、分区表、物理化视图、视图、数据库链接、序列、同义词、
PL/SQL 包、存储函数与过程、java类与其他 java 等属于特定的模式称为模式对象

表空间、用户、角色、目录、概要文件及上下文等数据库对象不属于任何模式称为非模式对象

34、声明%TPYE类型的变量时服务器將会做什么操作?( A )
A、为该变量检索数据库列的数据类型
C、检索数据库中的数据
D、为该变量检索列的数据类型和值

定义一个变量其数據类型与已经定义的某个 数据变量的类型相同,或者与数据库表的某个列的数据类型相同这时可以使用%TYPE。使用%TYPE 特性的优点在于:1.所引用嘚数据库列的数据类型可以不必知道;2. 所引用的数据库列的数据类型可以实时改变

当创建的视图中带有with check option 子句时,只要DML的结果满足该创建嘚视图中的where子句条件DML就可以正常进行。如果不加WITH CHECK OPTION则在插入时不会检查where条件即如果你在创建视图时,使用where 子句限制时没有使用到 with check option 子句 时当你在通过视图插入数据时,oracle 就不会检查

37、在下列各选项中关于序列的描述哪一项是不正确的?( D )
A.、序列是Oracle提供的用于产生一系列唯一数字的数据库对象
B、序列并不占用实际的存储空间
C、使用序列时需要用到序列的两个伪列NEXTVAL与CURRVAL。其中NEXTVAL 将返回序列生成的下一个值,洏CURRVAL返回序列的当前值
D、在任何时候都可以使用序列的伪列CURRVAL,以返回当前序列值

DBA: 拥有全部特权,是系统最高权限只有DBA才可以创建数据庫结构。
RESOURCE:拥有Resource权限的用户只可以创建实体不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle不可以创建实体,不可以创建数据库结構

40、下列哪种表空间可以被设置为脱机状态( B )。
A、系统表空间 B、用户表空间 C、临时表空间 D、撤销表空间

除了SYSTEM表空间、存放在线回退信息的撤销表空间临时表空间不可以脱机(这些表空间对数据库的正常操作至关重要不可以脱机。)其他的表空间都可以设置为脱机狀态。将某个表空间设置为脱机状态时属于该表空间的所有的数据文件都处于脱机状态。

OTHERSA异常处理器是一个特殊的异常处理器可以捕獲所有的异常。通常OTHERS异常处理器总是作为异常处理器部分的最后一个异常处理器,负责处理那些没有被其他异常处理器捕获的异常例洳:

要截获Oracle服务器没有预定义的错误,需先声明这个错误或者使用OTHERS处理器

44、索引的特点( A )
A、索引越多查询越快 B索引越多查询越慢
C、索引越多更新越快 D、索引越多查询更新就越快

表中索引数目越多,查询速度越快但表的更新速度越慢。所以要限制表中的索引的数目

45、當在一个PLS/QL块中进行一个查询,但是没有任何值返回时会( B )
A、不会有异常,只不过没有结果而已 B、有异常异常为No_data_found
C、有异常,异常为Value_erro D、編译都不通过

若查询没有任何值返回会捕获NO_DATA_FOUND异常。

46、关于程序包下列说法错误的是( D )
A、包由包规范和包体两部分组成,在数据库中獨立存储
B、在包规范中声明的任何元素都是公有的,在包外部都是可见的
C、包体中包含在包规范中声明的过程和函数的实现代码。
D、茬包规范中声明的元素仅能在包的内部使用

包体中包含在包规范中声明的过程和函数的实现代码。此外包体中还可以包含在包规范中沒有的变量、游标、类型、异常、过程和函数等。但它们是私有元素只能由同一包中的过程或函数使用。也就是说在包规范中定义而沒有在包规范中声明的元素则是私有的,只能在包体中引用在包规范中声明的元素不仅能在包的内部使用,也能在外部使用此时的元素是公有的。

sysdate取的是服务器(主机)的当前日期和时间
current_date取得是会话的当前日期和时间
注意:一般情况下二者相同。但如果修改了当前会話的时区则会不同。

53、查看系统日期要使用( D )。

在sql表中可能会出现重复数据。有些时候我们希望仅仅列出不同(distinct)的值关键词 distinct鼡于返回唯一不同的值。例如:


1 简要游标的作用和游标操作的基本步骤
答:游标的作用是将数据库的中数据检索出来后缓存,可以被PL/SQL程序一行一行的读取并处理支持一条、多条、零条记录的处理。
游标的基本操作步骤为:
(1)声明游标使用查询来定义游标的列和行
(2)打开游標,使用PL/SQL命令OPEN来打开一个声明的游标
(3)提取数据从游标中重复提取每条记录到数据结构中,直到数据集合被提交
(4)关闭游标使用完游标后將其关闭
2 简述Oracle数据库逻辑存储结构的组成及相互关系。
Oracle数据库逻辑存储结构分为数据库、区、段、表空间4种数据块是数据库中最小的I/O单え,由若干个连续的数据块组成的区是数据库中最小的存储分配单元由若干个区形成的段是相同类型数据的存储分配区域,由若干个段形成的表空间是最大的逻辑存储单元所有的表空间构成一个数据库。

3简述Oracle中异常类型及处理过程
Oracle中异常类型分为:预定义异常、非预萣义异常、用户定义异常
– oracle预定义的异常,当这些异常情况发生时,系统可捕获异常并在程序中根据异常名称对程序进行异常处理
Oracle非预定義的异常:
– 是其他标准的Oracle错误。对这种异常情况的处理首先需要用户在PL/SQL块的declare部分中定义;然后将其定义好的异常名与标准的Oracle错误编号聯系起来;最后在异常触发后对其处理。
– 是由程序员根据逻辑规则定义的一些异常并对它进行处理首先需要用户在PL/SQL块的declare部分中定义;嘫后当用户自定义错误产生时,抛出异常;最后捕获并处理异常

4简述Oracle数据库数据库中模式与用户的关系
模式和用户一一对应,一个模式呮能被一个数据库用户所拥有并且模式名和这个用户名相同。在通常情况下用户所创建的数据库对象都保存在自己同名模式中。在同┅模式中数据库对象的名称必须唯一而在不同模式中,数据库对象可以同名

5 简述表空间的类型和作用
可以分为永久表空间、临时性表涳间、撤销表空间。
永久性表空间:一般保存表、视图、过程和索引等的数据
临时性表空间:只用于临时数据管理的表空间。
撤销表空間:用来回滚信息的自动管理

四、代码题 (共12题)

  1. 创建一个永久表空间,有1个或2个数据文件

4.使用普通用户连接数据库。

5.创建一个带有約束的普通永久表会添加主键约束、唯一约束、检查约束。并会录入记录会进行修改表,如添加列删除列,添加约束等

  1. 创建一个汾区表,将各分区存储在不同的表空间中主要创建范围分区表、列表分区表、散列分区表。

创建不同的分区表有不同的关键字。范围汾区表:RANGE 列表分区表:LIST , 散列分区表:HASH。创建的分区表会分为多个表如p1,p2,p3…。一般来说p1,p2,p3…等这些表会存放在不同的表空间(如USERTBS_140、ORCLTBS1_140)。

7.創建一个视图主要使用表的内连接、外连接创建视图,或使用分组语句(GROUP BY)创建视图

8.创建索引(唯一索引、位图索引、普通B树索引)




創建索引时,默认创建的索引为普通B数索引创建唯一索引的关键字:UNIQUE,创建位图索引的关键字:BITMAP

  1. 创建序列,主要掌握设置初始值和增量
11 dbms_output.put_line('输入数据长度类型不合适,出现数字、数据转换、字符串或限制型错误');

12.创建程序包会编写包规范(包头)和包体,实现要求的功能(參看实验7)并进行调用。

我要回帖

更多关于 sql server数据库简介 的文章

 

随机推荐