大型软件公司.Net面试题(二)

简介:

6、答案
一个中型或大型公司往往由地理上分散的部门所组成,这些部门通常需要进行数据共享。针对这些共享数据,可以将其存储在某个站点上,需要的用户都从这个站点上存取。这种方案的优点是数据的一致性容易保证,但其缺点也是很突出的,那就是该站点的负载大、网络负载大,远程用户的数据响应迟缓。数据复制技术可以有效地解决这个问题,它通过将这些共享数据复制到位于不同地点的多个数据库中,从而实现数据的本地访问,减少了网络负荷,并提高了数据访问的性能,而且通过对数据库中的数据定期同步(通常是每天晚上),从而确保了所有的用户使用同样的、最新的数据。该技术适用于用户数量较大、地理分布较广、而且需要实时地访问相同数据的应用模式。

数据复制的概念及特点

1、数据复制的概念及分类

数据复制,就是将数据库中的数据拷贝到另外一个或多个不同的物理站点上,从而保持源数据库与目标数据库中指定数据的一致性。

按照数据复制的实时性,数据复制可分为同步数据复制和异步数据复制。同步数据复制是指将本地生产数据以完全同步的方式复制到异地,每一本地IO交易均需等待远程复制的完成方予以释放。异步数据复制则是指将本地生产数据以后台同步的方式复制到异地,每一本地IO交易均正常释放,无需等待远程复制的完成。同步复制实时性强,远端数据与本地数据完全同步。但这种方式受带宽影响较大,数据传输距离较短。异步复制不影响本地交易,传输距离长,但其数据比本地数据略有延迟。在异步复制环境中,对于所有应用最关键的就是要确保数据的一致性。

按照复制站点的类型,数据复制可分为多主控站点复制、物化视图复制及混合复制。多主控站点复制也称为对等站点复制,其中每个站点都是主控站点,都需要与其他站点进行信息交流,各站点之间是平等的。物化视图复制包含一个主控站点、一个或多个物化视图站点,

物化视图中的内容可以为目标主对象在某个时间点的全部拷贝或部分拷贝,其中目标主对象既可以是主控站点上的表也可以是物化视图站点上的主物化视图。混合复制包含多个主控站点和多个物化视图站点,是主控站点复制和物化视图复制的结合体,适合于复杂的业务情况。

2、数据复制的特点

数据复制通过在多个站点上建立备份,能够提高数据的安全性,同时也提高了数据的可用性,这是因为如果一个站点出现了问题,用户可以选择其他站点继续进行操作,应用系统还可继续运行,从而数据复制提供了容错保护机制。

然而数据复制最基本的功能是提高数据库的性能。它通过将远程数据库中的数据复制到本地,使得应用能够就近访问数据,从而降低网络传输负载,提高效率。而且在数据复制系统中,可以提供多个站点之间的负载平衡,让这几个用户使用这个服务器,另外几个用户可以

使用其他的服务器,以避免某些站点负载过重。

物化视图还提供了按子集进行复制,这样各站点就可只复制自己需要的数据,也能减轻网络的传输量。

数据复制的实现方法

在具体的实现之前,首先要做好设计与规划。这就需要细致分析具体的业务情况,设计出一套能够满足业务需要的方案。通常在设计过程中,需要确定出要建立的数据库站点,各站点的类型,需要复制的数据对象,以及同步方式、冲突解决方案等内容。

在设计完成之后,就可具体来实现数据复制,实现主要包括以下几步:

(1)创建复制站点

(2)创建组对象

(3)配置冲突解决方案

下面我们举一个例子来说明各步具体需要完成的工作。在这个例子中我们采用多主控站点复制方式,设有两个主控站点和两个共享数据表。两个主控站点分别为:处理站点(cl.world)和解释站点(js.wo rld);两个数据表为测区( survey)和测线( line)。

STEP1 创建复制站点

(1)首先以SYSTEM身份登陆主站点数据库cl.worldCONNECT system/manager@cl.world

(2)创建用户—复制管理员,并为该用户授权复制管理员负责复制站点的创建和管理,每个复制站点都必须创建复制管理员:

CREATE USER repadmin IDENTIFIED BY repadmin;

BEGIN

 DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => ’repadmin’);

END;

(3)为本站点指定传播者

传播者负责将本地最新更新的数据传播到其他站点上:

BEGIN

 DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => ’repadmin’);

END;

(4)为本站点指定接收者

接收者负责接收其他站点上的传播者传送过来的数据:

BEGIN

DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (

 username => ’repadmin’,

 privilege_type => ’receiver’,

 list_of_gnames => NULL);

END;

(5)确定清除时间

为了使传送过来事务队列不致过大,需要将成功加载的事务从事物队列里清除掉,这里设定每小时清除一次。

CONNECT repadmin/repadmin@cl.world

BEGIN

 DBMS_DEFER_SYS.SCHEDULE_PURGE (

next_date => SYSDATE,

interval => ’SYSDATE + 1/24’,

delay_seconds => 0);

END;

在建立好站点cl.world后,以同样的方法创建站点js. world。

(6)创建各主控站点之间的调度链接

创建各主控站点之间的调度链接需要先在各主控站点间建立数据库链接,之后为每个数据库链接定义调度时间。

首先,在处理站点上建立与解释站点的数据库链接,这里需要先建立一个公用数据库链接,供其他私有数据库链接来使用。

CONNECT SYSTEM/MANAGER@cl.world

CREATE PUBLIC DATABASE LINK js.world USING ’js.world’;

CONNECT repadmin/repadmin@cl.world

CREATE DATABASE LINK js.world CONNECT TO repadmin

IDENTIFIED BY repadmin;

同样,在解释站点上建立与处理站点的数据库链接

CONNECT SYSTEM/MANAGER@js.world

CREATE PUBLIC DATABASE LINK cl.world USING ’cl.world’;

CONNECT repadmin/repadmin@js.world

CREATE DATABASE LINK cl.world CONNECT TO repadmin

IDENTIFIED BY repadmin;

调度链接确定本站点上的事务向其他站点发送的频度,下面的代码为10分钟一次:

CONNECT repadmin/repadmin@cl.world

BEGIN

DBMS_DEFER_SYS.SCHEDULE_PUSH (

destination => ’js.world’,

interval => ’SYSDATE + (1/144)’,

next_date => SYSDATE,

parallelism => 1,

execution_seconds => 1500,

delay_seconds => 1200);

END;

在解释站点上做相同的工作STEP2 创建主控组在复制环境中,Oracle用组来管理复制对象。通过将相关的复制对象放在一个组里,从而方便对大量数据对象的管理。

这里我们假设用户模式integr ation 在处理站点和解释站点都已存在,而且表测区(survey )和测线(line)也已经创建。

(1)创建主控组对象

CONNECT repadmin/repadmin@cl.world

BEGIN

DBMS_REPCAT.CREATE_MASTER_REPGROUP (

gname => ’inte_repg’);

END;

(2)向主控组中添加数据对象,将测区表survey加入到组inte_repg中

BEGIN

DBMS_REPCAT.CREATE_MASTER_REPOBJECT (

gname => ’inte_repg’,

type => ’TABLE’,

oname => ’survey’,

sname => ’integration’,

use_existing_object => TRUE,

copy_rows => FALSE);

END;

以同样的方法将测线表line 加入到组inte_repg中

(3)在主控组中添加其他参与复制的站点,数据库之间的同步方式在此指定

BEGIN

DBMS_REPCAT.ADD_MASTER_DATABASE (

gname => ’inte_repg’,

master => ’js.world’,

use_existing_objects => TRUE,

copy_rows => FALSE,

propagation_mode => ’ASYNCHRONOUS’);

END;

(4)如果可能出现冲突,则需要配置冲突解决方案。冲突解决方案将在后面介绍。

(5)为每个对象生成复制支持

BEGIN

DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT (

sname => ’integration’,

oname => ’survey’,

type => ’TABLE’,

min_communication => TRUE);

END;

测线表line也一样

(6)重新开始复制

BEGIN

DBMS_REPCAT.RESUME_MASTER_ACTIVITY (

gname => ’inte_repg’);

END;


以同样的方式设置解释站点。设置成功后,数据复制过程就宣告完毕,库中的数据就可进行复制。

数据复制中冲突的解决方案

在复制环境中,尽管在数据库和应用程序设计过程中,会尽量避免各站点间冲突的发生,但完全避免冲突的可能性还是比较小的,那么一旦冲突发生,就需要一个按照具体业务规则的冲突解决机制,来使得各站点的数据保持一致。

首先需要分析哪些对象容易出现冲突。通常来说,静态的数据变化少,冲突出现的可能性也小;而有些数据变化非常大,冲突出现的可能性也大。确定了冲突易发的对象后,需要确定怎样解决冲突,比如在各站点之间建立优先次序,在数据不一致时,以某个站点上的为

准;或以某个站点上最新的修改为准。

Oracle提供了多中冲突解决方案,具体包括:针对更新冲突的方案、针对唯一性冲突的方案、针对删除冲突的方案。除了这些方案以外,用户还可以自定义冲突解决方法。每种方案都有自己的适用情况,那么我们需要根据具体的业务来选择合适的冲突解决方案。

结束语

本文详细介绍了分布式系统Oracle中的数据复制技术,在具体应用中,还有许多比较复杂的问题需要解决,比如主控组中如果包含循环依赖的表或自相关的表时如何处理;如何利用模版机制来创建物化视图站点;如何对数据复制环境进行管理与维护。这些问题需要在实际

应用中逐步探索,深入研究。

7、答案
select a.* from b.b a

8、答案

对于oracle数据库来说,可能出现的问题包括:
1. 回滚区间空间不足 --- 解决方法,增加表空间
2. 数据表空间不足 ---- 增加数据表空间
3. 表空间不足 ---- 增加表空间(oracle数据表有空间限制)
4. 临时表空间不足 --- 因为计算索引使用临时表空间,增加表空间或者暂时不使用索引,数据导入完毕再重新建立索引
5.另外一些原因,主要是垃圾数据造成的,比如外键匹配,主键冲突,单一索引冲突等。

9、答案
DELETE FROM TABLE_NAME 
WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D 
WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);



本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2010/12/19/1910323.html,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
66 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
1月前
|
开发框架 算法 搜索推荐
C# .NET面试系列九:常见的算法
#### 1. 求质数 ```c# // 判断一个数是否为质数的方法 public static bool IsPrime(int number) { if (number < 2) { return false; } for (int i = 2; i <= Math.Sqrt(number); i++) { if (number % i == 0) { return false; } } return true; } class Progr
58 1
|
1月前
|
并行计算 安全 Java
C# .NET面试系列四:多线程
<h2>多线程 #### 1. 根据线程安全的相关知识,分析以下代码,当调用 test 方法时 i > 10 时是否会引起死锁? 并简要说明理由。 ```c# public void test(int i) { lock(this) { if (i > 10) { i--; test(i); } } } ``` 在给定的代码中,不会发生死锁。死锁通常是由于两个或多个线程互相等待对方释放锁而无法继续执行的情况。在这个代码中,只有一个线程持有锁,且没有其他线程参与,因此不
105 3
|
7月前
|
开发框架 Java 中间件
.NET/.NET Core相关面试题
.NET/.NET Core相关面试题
|
7月前
|
SQL 搜索推荐 算法
一份阅读量突破10万+的C#/.NET/.NET Core面试宝典(基础版)
一份阅读量突破10万+的C#/.NET/.NET Core面试宝典(基础版)
|
1月前
|
SQL 存储 关系型数据库
C# .NET面试系列十:数据库概念知识
#### 1. 为什么要一定要设置主键? 设置主键是数据库设计中的一个重要概念,有几个主要原因: 1、唯一性 ```c# 主键必须保证表中的每一行都有唯一的标识。这样可以避免数据冗余和不一致性。如果没有主键或者主键不唯一,就可能出现数据混乱或错误。 ``` 2、查询性能 ```c# 数据库系统通常会使用主键来加速数据检索。主键通常会被索引,这样可以更快速地找到特定行的数据,提高查询效率。 ``` 3、关联性 ```c# 主键常常用于建立表与表之间的关系。在关系数据库中,一个表的主键通常与其他表中的外键建立关联,这种关系对于数据的一致性和完整性非常重要。 ``` 4、数据完
131 1
C# .NET面试系列十:数据库概念知识
|
1月前
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
174 2
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
65 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
100 5
|
1月前
|
XML 数据可视化 C#
C# .NET面试系列五:WPF
<h2>WPF #### 1. WPF 由哪两部分组成? Windows Presentation Foundation (WPF) 由两个主要部分组成: 1、XAML (eXtensible Application Markup Language) ```c# 这是一种基于 XML 的标记语言,用于定义用户界面的结构和外观。XAML允许开发人员使用声明性语法来描述应用程序的用户界面元素,而不是使用传统的编程方式。XAML 被广泛用于定义 WPF 窗体、控件、布局和动画。 ``` 2、Code-behind 文件 ```c# 这是包含与用户界面相关逻辑的代码文件。通常,开发人员可
74 4