SQL SERVER数据库,想导入到B服务器并保留原数据

SQL SERVER数据库,想导入到B服务器并保留原数据,第1张

一:不太明白你的意思,我理解你的意思是你想把A服务器的数据库还原到B服务器,但是又不想把B服务器数据库覆盖是吧?如果是这样那么就简单了。
二:在A服务器中选择该数据库,备份出来。右键-任务-备份。(我的是2005的,如果你的是2000的那么可能 *** 作不太一样你可以在网上查下2000怎么备份)。
三:把备份出来的数据文件(数据库名bak),放到B服务器中,然后在B服务器打开SQL Server Management Studio,连接上数据库后。邮件点击数据库-新建数据库-新建数据库 *** 作比较简单,这里你的数据库名就不要和B服务器中已有的数据库名一样了。这里把数据库物理文件和日志文件路径设置好后,数据库就建成功了。然后右键该数据库-任务-还原-源设备-添加-找到刚才从A服务器拷贝过来的数据文件(数据库名bak)-勾选上它-点击左边的选项-在这里“还原为”处找到刚才我们新建的数据库的物理文件位置和日志文件位置,分别选中,然后就可以点击确定了。如果在这里提示出错。那么你需要重启一次数据库(在开始-运行中输入net stop mssqlserver后等待数据库停止,然后再输入net start mssqlserver启动数据库)然后再点击确定,则数据库还原成功。
四:排序规则不一样。可以通过在新建查询中输入如下代码即可。
这里我们在B服务器中打开数据库,新建查询,输入
use master
--清除本数据库所有连接,因为修改数据库排序规则要独占数据库, 执行时间可能会长一点
Alter DataBase 数据库名 Set Offline With RollBack After 10
--启用数据库
Alter DataBase 数据库名 Set Online
--修改排序规则为Chinese_PRC_CI_AS,注:本修改只影响被修改的数据库
Alter DataBase 数据库名 Collate Chinese_PRC_CI_AS
GO
以上 *** 作完成后,则大功告成。这里完成的基础是在A服务器的数据库版本和B服务器的数据库版本一致或者是A服务器是2000的数据库,B服务器是2005的数据库。累~~~~ 汗! 我知道还有其他的方法,但是自己不知道怎么 *** 作,有高手请指教,大家一起学习!

安装数据库时“指定实例名称无效”是设置错误造成的,解决方法为:

1、打开HeidiSQL,选择要查看的服务器连接,然后点击打开。

2、此时进入数据库服务器管理界面。

3、右击要修改的数据库实例,然后点击编辑。

4、修改数据库名称。

5、修改排序规则,然后点击确定。

6、此时数据库实例就修改即可。

随着 MySQL 8016 的发布,我们为 MGR 添加了一些功能,以增强其高可用性。其中一个功能是能够在某些情况下启用已离开组的成员自动重新加入,而无需用户干预。

为了理解这个功能的好处以及如何使用它,我们将快速查看它背后的概念以及它首先存在的动机。

介绍

MGR 允许 MySQL 用户轻松管理高可用组,并完成保证系统高可用所需的所有特征,例如容错或故障检测。

MGR 中提供的基本保证之一是该组呈现给用户的是一个不可分割的整体,这意味着一旦成员加入或离开该组,该更改将立即被其他成员得知。默认情况下,组内的数据本身最终是一致的,尽管可以被修改。为了实现这种保证,MGR 使用组成员服务,以及通过一致性算法检测有冲突的事务并中止它们。MGR 的这一方面超出了本文的范围,与成员自动重新加入功能并不完全相关,本文不作赘述。

组内新成员必须符合一些条件。其中新成员需要在事务方面赶上组进度(是通过选择组内一个成员来将已处理的事务流式传输给他,在 MGR 中称为“捐赠”)。最后,只要在此“分布式恢复”过程中没有遇到任何错误,组内新成员将被声明为 ONLINE 状态。

MGR 依靠组通信层 (GCS) 来管理组。该层实现了用于解决冲突事务的一致性算法,并强制执行一些通信特性。对于实现前面提到的组的不可分割视图,这些特性至关重要,如消息的总顺序、安全传递或视图同步等。

GCS 需要能够检测组中哪些成员失效或看起来失效。一旦这些成员被检测为失效,就将其从该组中移除,以便保持该组正常使用。为此 GCS 在每个成员中引入了一个故障检测器,用于分析组内交换的消息。如果它在一段时间内没有收到来自指定成员的消息,则故障检测器将对该成员产生“怀疑”,并认为该成员可能已经失效。成员从“怀疑”到真正失效的等待时间是可以配置的。

重新加入成员存在的问题

我们已经了解 MGR 必须为了高可用提供的策略,以及它如何实现,接下来请看示例:

一个小组由三个成员组成,其中一个成员偶尔会遇到丢失数据包、断连或者其它导致无法解决的错误情况的影响组内通信。还要考虑这些错误持续时间超过 group_replication_member_expel_timeout的值。

其中一个组员发生故障,小组的其他成员将决定踢出该成员。问题是,一旦该成员重新入组,他将被组驱逐加入失败,需要通过手动干预。

如果该成员的驱逐超时属性设置不为 0,则它将在被驱逐前等待满足该时间量(将超时设置为 0 意味着他将永远等待)。超时后成员将被驱逐并重新建立连接,并且无法重新加入旧组,需要再次手动干预。

于此,当存在网络故障时,显然需要手动干预。

在 MySQL 8016 中,我们引入了自动重新加入组的功能,一旦成员被驱逐出组,它就会自动尝试重新加入该组,直到达到预设的次数为止。有时每次重试之间至少等待5分钟。

如何启动自动重新加入?

可以通过将group_replication_autorejoin_tries设置为所需的重试次数来开启并使用自动重新加入功能。

  SET GLOBAL group_replication_autorejoin_tries = 3

默认值为 0,表示服务器禁用自动重新加入。

如何验证自动重新加入?

与 MySQL 中的许多功能一样,自动重新加入过程是可以监测的。自动重新加入的可检测性依赖于性能模式基础架构,阶段式收集有关数据。

他们获取以下信息:

事件发生的线程ID(THREAD_ID)

活动名称(EVENT_NAME)

起止时间戳以及事件的总持续时间(TIMER_START,TIMER_END 和 TIMER_WAIT)

在事件停止之前完成的工作单位和预估工作单位(WORK_COMPLETED,WORK_ESTIMATED)

因此,当自动重新加入过程开始时,它将在performance schema中注册一个名为“stage / grouprpl / Undergoing auto-rejoinprocedure”的事件。使用表performance_schemaevents_stage_current,  performance_schemaevents_stages_summary_global_by_event_name和performance_schemaevents_stages_history_long我们可以观察到以下内容:

是否正在进行自动重新加入程序

到目前为止,已经减少重试的次数

直到下一次重试的估计剩余时间

自动重新加入过程状态

可以通过过滤包含“auto-rejoin”字符串的活动事件来查找自动重新加入过程状态(即,是否正在进行):

SELECT COUNT() FROM performance_schemaevents_stages_current

WHERE EVENT_NAME LIKE '%auto-rejoin%';

COUNT()

1

查询结果存在,证明服务器上运行了自动重新加入过程。

到目前为止的重试次数

如果正在进行自动重新加入程序,我们可以通过选择阶段事件上的工作单元数来检查到目前为止尝试的重试次数:

SELECT WORK_COMPLETED FROM performance_schemaevents_stages_current WHERE

EVENT_NAME LIKE '%auto-rejoin%';

WORK_COMPLETED

1

在这个例子中,到目前为止只有一次尝试。

预计到下次重试的剩余时间

在每次重新加入尝试之间,服务器将处于 5 分钟的可中断睡眠中。 重新加入尝试直到成功或失败之间的时间是无法估计的。 因此,为了粗略估计剩余时间,我们可以将到目前为止尝试的重试次数乘以 5 分钟,并减去到目前为止的阶段事件所花费的时间,以估计我们还需要多长时间:

SELECT (3000 - ((TIMER_WAIT10e-12) - 3000 num_retries)) AS time_remaining FROM

(SELECT COUNT() - 1 AS num_retries FROM

performance_schemaevents_stages_current WHERE EVENT_NAME LIKE '%auto-rejoin%') AS T,

performance_schemaevents_stages_current WHERE EVENT_NAME LIKE '%auto-rejoin%';

time_remaining

300

所以在这个例子中,在下一次重新加入之前还有 30 秒。注意性能模式表中的所有时间记帐都以微秒精度保持,因此我们将 TIMER_WAIT 缩放为秒。

使用自动重新加入与驱逐超时的权衡

到目前为止,在这篇文章中我们只关注自动重新加入。实际上,有两种不同的方法可以实现离开组的成员的重新加入:

设置自动重新加入尝试次数来实现自动重新加入

设置该成员的驱逐超时时间然后配合手动干预

能有延缓删除组内可疑成员,并且如果配置为足够长的驱逐超时时间,则增加了重新建立连接的机会,再次与组进行交互。

虽然这两个功能实现了相同的目标,但它们的工作方式是不同的,并且需要权衡。通过使用驱逐超时,您可以维护组中可疑的成员,其缺点是您无法添加或删除成员或选择新的主机。如果通过使用自动重新加入,该成员将不再是该组的正常组员,将保持在 superreadonly 模式,直到重新加入该组。但在此期间,重新加入成员的同步旧数据的可能性将增加。自动重新加入过程可监控,而驱逐超时不是真正可监控的。

所以,总结一下:

驱逐超时的优点

- 该成员一直在该组内

- 可能更适合足够小的网络故障

驱逐超时的缺点

- 在怀疑某个成员时,无法在该组上添加/删除成员

- 在怀疑某个成员时,无法选择新的主机

- 您无法监控此过程

自动重新加入的优点

- 该组将在没有重新加入成员的情况下运行,您可以添加/删除成员并选择新的主机

- 您可以监控该过程

自动重新加入的缺点

- 您增加了重新加入成员上过时读取的可能性

- 可能不适合足够小的网络故障

总而言之,我从启用自动重新加入中获得了什么?

通过启用自动重新加入,您可以减少对MySQL实例的手动干预的需要。您的系统

更加适应瞬间网络故障,同时满足对容错性和高可用的保证。

摘要

我们引入了一个名为group_replication_autorejoin_tries的新系统变量,允许用户设置 MGR 成员在被驱逐或与组的大多数人失去联系后尝试重新加入组的次数。

默认情况下,此自动重新加入过程处于关闭状态。它能帮助用户在面对瞬间网络故障时避免对 MGR 成员进行手动干预。

问题是由于WINXP和EXCEL2003采用不同的排序方式,要修改以下项目:
HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\Currentversion\\Policies\\Explorer\\NoStrCmpLogical
HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Currentversion\\Policies\\Explorer\\NoStrCmpLogical
DWORD值修改成1即可,没有这一项,请添加!

详细信息:

概要
本文讨论排序由 WindowsXP 和 Windows2003Server 用于文件和文件夹名称包含数字、 包含有关如何在 WindowsXP 和 Windows2003Server 排序次序是不同于 2000, 中排序次序并描述您如何修改 WindowsXP 和 Windows2003Server 中排序顺序行为。
回到顶端

更多信息
通过 WindowsXP 和 Windows2003Server 用于文件和文件夹名称包含数字排序次序是不同于排序次序由 Windows 2000 使用。 以下示例显示由两到 WindowsExplorer 中列表文件夹 *** 作系统个文件夹名称包含数字时使用排序次序中差别:

WindowsXP 和 WindowsServer 2003 中 :
Ie4_01
Ie4_128
Ie5
Ie6
Ie401sp2
Ie501sp2

Windows 2000 中 :
Ie4_01
Ie4_128
Ie401sp2
Ie5
Ie501sp2
Ie6

默认情况下, 文件中包含字符串中 WindowsXP 和 Windows2003Server 数字中, 文件夹名称被认为是数字内容, 不文本。 文件夹和文件名称中数字排序根据其数值。

排序这些文件夹时, 本文中前面描述示例中 Ie401sp2 文件夹 Ie6 文件夹后列出按升序排序因为 401 是比 6 数值高值名称。 在以下示例, 注意下列文件, 数字, 其名称包含在 WindowsXP 和 Windows2003Server, 和 Windows 2000 中如何排序:
WindowsXP 和 WindowsServer 2003 中 :
5txt
11txt
88txt

Windows 2000 中 :
11txt
5txt
88txt

回到顶端

要配置策略来修改排序次序是 WindowsXP 或 Windows 2003 服务器中
可以设置策略并配置 WindowsXP 以使用排序次序由 2000 使用或 WindowsXP 默认排序。 策略设置都存储在以下注册表值:
HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\Currentversion\\Policies\\Explorer\\NoStrCmpLogical HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\Currentversion\\Policies\\Explorer\\NoStrCmpLogical

HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Currentversion\\Policies\\Explorer\\NoStrCmpLogical
要获得此功能, 必须安装 WindowsXP 的最新服务包。 此功能最初 Windows XP Service Pack 1 (SP 1) 中提供。 有关如何获取最新 ServicePack 用于 WindowsXP, 请单击下列文章编号以查看 Microsoft 知识库中相应:
322389 ( >sql server 2000的unicode编码有特殊性,仅仅在rails中使用utf8编码,和把全部rails项目文件格式改成utf8之外,还是不够的。仅仅这样做,只是部分中文字符能够正确处理,而且存入sql server2000中的中文数据,也完全是乱码。正确的配置方法应该如下。
1 ms sql server2000中数据字段全部要选择成n打头的类型,比如ntext,nvarchar等。
2安装ADO Driver
安装one -click installer 来安装ruby 的话就已经安装了所有连接SQL Server使用的需求包但是,并没有安装ADO Driver
这样来安装它:
在Ruby目录下找到这个目录: \ruby\lib\ruby\site_ruby\18\DBD 例如:我的Ruby安装在D:\ruby中,所以是这个目录D:\ruby\lib\ruby\site_ruby\18\DBD 在该目录中创建一个ADO文件夹 下载Ruby-DBI,将lib/dbd_ado/ADOrb文件拷贝到X:/ruby/lib/ruby/site_ruby/18/DBD/ADO/ADOrb
3 配置databaseyml:Java代码
development:
adapter: sqlserver
database: database_name
host: server_name
username: user_name
password: your_pw_here
development:
adapter: sqlserver
database: database_name
host: server_name
username: user_name
password: your_pw_here
4在environmentrb添加下面代码
require 'win32ole'
WIN32OLEcodepage = WIN32OLE::CP_UTF8
在这里稍微解释下第四部分的设置。sql server 2000中使用的unicode 并非是utf8,ado的默认链接编码都是当前系统设置的code pages相关的。
一般的windows设置都是非unicode的,比如简体中文windows系统下一般都是gb2312, 在rails中databaseyml设置encoding: utf8,对于sql server没有任何用处。
为了迫使sql server接受utf8数据,必须修改ado链接的code pages值为utf8,才能让ado部分代码在接受rails传入的utf8数据之后,不做任何额外的处理 否则的话,ado部分代码会根据当前系统的默认code pages值来处理这里字符数据。
于是在中文windows系统上,从utf8的rails项目中传入的数据,会被当作gb2312编码的数据来传递到sql server2000中,于是sql server2000中存入的数据会成为乱码,也有部分数据在处理过程中出错,导致sql 语句执行出错。比如常见的中文字符右边的单引号会不见的情况。
不设置 WIN32OLEcodepage = WIN32OLE::CP_UTF8,你的整个系统编码配置是这样的
rails(utf8)<-->ado(根据当前系统cp来取得编码,或是gb2312或是其他)<-->sql server 2000 (unicode)
整个系统编码不一至
WIN32OLEcodepage = WIN32OLE::CP_UTF8 这句代码就是为了更改cp值整个系统编码配置是这样的
rails(utf8)<-->ado(utf8)<-->sql server 2000 (unicode)
整个系统编码一至,整个系统中不会再出现任何乱码
注:以上转自:jack发表在javaeye网站上的文章,地址:>

1、首先打开谷歌浏览器,点击浏览器右上角的三个点如下图所示。

2、然后在打开的下拉菜单中,选择“设置”,如下图所示。

3、然后在打开的设置页面中,找到并点开“高级”选项,如下图所示。

4、然后在打开的页面中,找到“保护您和您的设备不受危险网站的侵害”一项,将其右侧的开关关闭。

5、这样,再打开刚才那个网页时,就不会有提示了。

实际上游戏上的排行榜,比如战力,金币等,大家只关注最前面的N名,没有必要进行全服排序。没到这个范围的,可以提示比如”百名开外”这样的用词。
做了这个设计上的简化之后,这就是一个堆排序的top N的问题了。
至于其他人提到的可以做全局排序的方案,你权且看看当开阔眼界吧。做产品的时候,还是先找平衡的方式实现需求,而不是为了炫技。
离线排序,就是给你一个数组,你把它排好序,然后万事大吉。
这种排序直接std::sort,因此下面不谈。
在线排序,要求你维护一个有序序列。在任意时刻可以进行插入、删除、修改、查询排名 *** 作。
提供两种思路。
一、平衡树
平衡树中,查询一个节点的排名是 的复杂度(对每个节点记下子树大小)
题目描述中的有序链表思路,我怀疑题主根本没有实现过。因为普通链表是不能二分的,需要使用“跳表”——平衡树的一种。
使用平衡树,上述四种 *** 作均可以 完成。常数较大。

//首先按字符个数排序,然后按相对应的字符大小排序
function mySort(list){
var len=0;
var add="";
for(var i=0;i<listlength;i++){
var str=list[i];
if(strlength>len){
len=strlength;
}
}

for(var i=0;i<len;i++){
add+="0"
}

for(var i=0;i<listlength;i++){
var strOne=add+list[i];
list[i]=strOnesubstring(strOnelength-len);
}
listsort();
}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13495176.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-18
下一篇 2023-08-18

发表评论

登录后才能评论

评论列表(0条)

保存