MS SQL Server 2000 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法

在使用数据库的过程中,经常会遇到数据库迁移或者数据迁移的问题,或者有突然的数据库损坏,这时需要从数据库的备份中直接恢复。但是,此时会出现问题,这里说明几种常见问题的解决方法。

一、孤立用户的问题

比如,以前的数据库的很多表是用户test建立的,但是当我们恢复数据库后,test用户此时就成了孤立用户,没有与之对应的登陆用户名,哪怕你建立了一个test登录用户名,而且是以前的用户密码,用该用户登录后同样没办法操作以前属于test的用户表。

这个问题有两种办法解决。

先说解决的前提条件。

首先,要用备份文件还原数据库,我们这里的数据库名为testdb,里面有属于用户test的用户表。这个很容易了操作了,不多讲了,在企业管理器中很方便可以恢复。恢复后,就产生了孤立用户test。

然后,用sa用户或者具有DBA权限的用户登录,创建一个test数据库登录用户,密码随便设置了,也可以和以前的保持一致。我们用它来对应孤立的test用户。

下面就有两种操作方法了,第一种就是改变对象的属主,第二种就是使登录用户和数据库的孤立用户对应起来。
    方法一:修改对象属主 

就是将原本属于数据库用户test的用户表,修改为属于dbo的用户表;然后修改test登录用户的数据库为testdb,就可以直接使用test登录用户登录后对该数据库进行操作了。

使用的存储过程

sp_changeobjectowner [ @objname = ] ‘object’ , [ @newowner = ] ‘owner’

参数说明:

[ @objname = ] ‘object’

当前数据库中现有表、视图、用户定义函数或存储过程的名称。object 是 nvarchar(776),没有默认值。如果架构及其所有者具有相同的名称,则 object 可由现有对象所有者限定,格式为 existing_owner.object。

[ @newowner=] ‘owner ‘

将成为对象的新所有者的安全帐户的名称。owner 的数据类型为 sysname,没有默认值。owner 必须是可访问当前数据库的有效数据库用户、服务器角色、Microsoft Windows 登录名或 Windows 组。如果新所有者是没有对应数据库级主体的 Windows 用户或
   Windows 组,则将创建数据库用户。

实例:

以下示例将 authors 表的所有者更改为

dbo。

EXEC sp_changeobjectowner ‘authors’, ‘dbo’; 

GO

这个方法有个最大的缺点就是,当表的数量非常多,而且还有存储过程或者触发器之类的修改起来会非常麻烦,需要一个一个修改,所以,不提倡使用。现在网上有一个批量修改的存储过程,大家可以找一下,这里就不说了,而是教大家一个更简单的。
方法二:使登录用户和数据库的孤立用户对应起来
其实我们建立了同样名称的数据库登录用户后,数据库中的表我们照样不能使用时因为sid的不同,就是系统登录表和数据库用户表中的用户名相同,单是sid字段,数据库中的还是以前旧系统的sid值,所以我们就要把它对应成我们新建的,数据库靠sid来识别用户。

这里可以使用存储过程sp_change_users_login。它有三种动作,分别是report,update_one和auto_fix。

运行下面的代码,系统会列出当前数据库的孤立用户数。

sp_change_users_login ‘report’

    我们只需要选择当前数据库为testdb,然后运行

sp_change_users_login ‘update_one’,'test’,'test’

系统就会提示修复了一个孤立用户。

如果没有建立test的登录用户,还可以用

sp_change_users_login ‘Auto_Fix’, ‘test’, NULL, ‘testpassword’

来创建一个登录用户名为test,密码为testpassword的用户与之对应。

好了,到这里通常情况下,数据库对象得到访问问题已经解决了。如果有多个数据库中有同一个用户的数据表,只需要选择不同的数据库,执行update_one的那个就行了。

二、对象名 ‘xxxx’ 无效的问题

这里可能会有人遇到对象名 ‘xxxx’无效的问题。系统表却不会产生这个问题,而用户表还要加上用户名,然后是表明才能访问,比如select * from author,会说对象名 author 无效,而用select * from test.author就可以访问,这个是用户首选身份的问题。

解决很简单,就是察看test登录用户是否具有dba的权限或者系统管理的权限,有的话去掉就行了。

因为如果用户有dba身份,那么它登陆后的默认表空间是dbo的系统表空间,所以去掉了之后,就会以正常的test表空间访问数据表了。

转载自:http://www.cnblogs.com/wlq2000/archive/2008/01/07/1029087.html

No Comments

IE下Ajax缓存问题的解决办法

今天下午在做要素页面无刷新添加的时候,IE下遭遇Ajax缓存戏弄,因为刚开始并不知道IE有这个坏毛病,折腾了我一下午,终于解决问题。郁闷之余,总结一下解决办法:

在IE下用Ajax请求某一页面,通常会因为缓存的原因而返回上一次的结果,造成混乱,而FF下不会出现这种情况。为了不受缓存影响,可以这样做:
IE访问策略:Internet选项–浏览历史记录–设置– Internet 临时文件的选项改为每次访问网页时也可以

1: 在AJAX请求的页面后加个随机函数,我们可以使用随机时间函数
在javascript发送的URL后加上t=Math.random()
例如这样:URL+"&"+"t="+Math.random();或者new Date();

2: 在XMLHttpRequest发送请求之前加上XMLHttpRequest.setRequestHeader("If-Modified-Since","0")
一般情况下,这里的XMLHttpRequest不会直接使用
你应该可以找到这样的代码
XXXXX.send(YYYYYY);
那么,就把它变成
XXXXX.setRequestHeader("If-Modified-Since","0");
XXXXX.send(YYYYYY);

实践证明,两种方法都非常有效。

转载自:http://www.blogjava.net/dashi99/archive/2010/08/26/329973.html

No Comments

ASP中用ajax方式获得session

前个月朋友接到一个asp的私活,于是就做了。
技术方面没什么难点,asp虽然以前没怎么写过,可是看看书也就OK了。
基本全部做完后,出了一个bug。
  前期做的时候,登录方式顺手用了ajax来做,登录前先判断在session中是否存在值,如果存在,那么无需登录;如果不存在,那就弹出登录页面登录。
  由于我是用的ff浏览器,一直没发现什么问题。上个礼拜提交给用户看的时候,说用IE登录完之后无效,大惊。结果还真的是这样。。很囧
  登录代码如下:

Java代码 复制代码

  1. //从服务器查询是否存在session
  2.         j.ajax({  
  3.         type:"GET",  
  4.         url:"sessioncheck.asp",  
  5.         data:"",  
  6.         timeout: 1000,  
  7.         error: function(){  
  8.                     alert(’sorry, server is busy now!’);  
  9.                 },  
  10.         success:function(comments_data){  
  11. if(comments_data == 1){  
  12.                 el.createDialog(opts);  
  13.                         j.startOver();  
  14.                     }  
  15. else{  
  16.                 var sql = selectSQL(searchkey,stype);  
  17.                 window.location.href = sql;  
  18.             }  
  19.         }  
  20.     }); 
//从服务器查询是否存在session
		j.ajax({
        type:"GET",
        url:"sessioncheck.asp",
        data:"",
        timeout: 1000,
      	error: function(){
					alert('sorry, server is busy now!');
				},
        success:function(comments_data){
        	if(comments_data == 1){
        		el.createDialog(opts);
						j.startOver();
					}
        	else{
        		var sql = selectSQL(searchkey,stype);
        		window.location.href = sql;
        	}
        }
    });

大致是这样 sessioncheck.asp里面无非就是去查session,代码如下:

Java代码 复制代码

  1. if session("username") = "" then  
  2.         Response.Write("1")  
  3. else
  4.         Response.Write("2")  
  5.     end if
if session("username") = "" then
		Response.Write("1")
	else
		Response.Write("2")
	end if

结果就是用IE这个session("username")死活没有,timeout设置了也没用。

去网上查了半天,发现同样问题的还挺多,最后查到原因:缓存问题。

异步get获取时,如果url不变,是直接调用的缓存中的信息,然后就导致了一直获得不到session里的值。

解决方法那很简单了,google "asp 清除缓存" 一大堆。

最后是在sessioncheck.asp里添加了一段,如下:

Java代码 复制代码

  1. Response.Buffer =True  
  2.   Response.ExpiresAbsolute =Now() - 1
  3.   Response.Expires=0
  4.   Response.CacheControl="no-cache"
  5. if session("username") = "" then  
  6.         Response.Write("1")  
  7. else
  8.         Response.Write("2")  
  9.     end if
Response.Buffer =True
  Response.ExpiresAbsolute =Now() - 1
  Response.Expires=0
  Response.CacheControl="no-cache"
	if session("username") = "" then
		Response.Write("1")
	else
		Response.Write("2")
	end if

小问题真是搞死人。。

转载自:http://leobluewing.javaeye.com/blog/337650

No Comments

生成JNI的DLL时提示找不到jni.h的解决办法(fatal error C1083: Cannot open include file: ‘jni.h’:)

引用
环境:Winxp+VC6.0
过程:编绎生成Dll文件时出错

首先是关于dll文件的生成:

方法如下:

打开VC++6.0,新建->; 工程 ->; win32 Dynamic-Link Library在向导中选择空工程

添加如用javah生成的头文件和自己写的一个cpp文件,然后编译运行,如果没有出现错误,既可以在编译成功的debug文件夹中找到dll文件,如果出现找不到jni.h的错误,那么用如下方法解决:

fatal error C1083: Cannot open include file: ‘jni.h’: No such file or directory

引用

将以下文件:

Java代码 复制代码

  1. \jdk\include\jni.h   
  2.   
  3. \jdk\include\win32\jawt_md.h   
  4.   
  5. \jdk\include\win32\jni_md.h  
 \jdk\include\jni.h  \jdk\include\win32\jawt_md.h  \jdk\include\win32\jni_md.h 

复制到Visual Studio.net的安装目录下的\Vc7\include目录中

如果是VC6.0,自己找相应的目录即可!
——————————————————————————————————————–

转载自:http://jzgl-javaeye.javaeye.com/blog/469025

No Comments

腾讯天气预报页

http://weather.news.qq.com/inc/ss125.htm

No Comments

腾讯企业邮箱邀请码

现有5个腾讯企业邮箱(注意:是腾讯企业邮箱,不是腾讯域名邮箱,腾讯域名邮箱是不需要邀请的。)的邀请,有需要的可以留言留下你们的邮箱,我会选取前5个发过去。

以下留言者邀请已发,新的邀请会随时在本页发布,下面继续留言的,可以按照如下格式留言,以方便发送邀请:

————————————————————

邮箱:【abc@abc.com

留言内容

————————————————————

5 Comments

lockdir.exe(文件夹加密软件)重装系统后打不开的解决办法

转载自《zhangjip_love的空间》George对原文进行了改进和部分注释说明>>

—————————————————————————————-

前几天因系统故障把系统重装了一下,谁知用 “深圳恒波软件”开发的文件夹加密器 居然打不开了,输入密码显示“密码错误”,真是岂有此理!我的密码是固定的,怎会输错?

在网上搜索了半天,用了各类软件,通过种种实验,最后终于取得进展,虽说没有破解,但找回了我的文件,这可是几个G呀!差点把我急死!

相信还有与我有相同遭遇的网友,现推荐一下:

方法来自网络,不敢居功!

1、用7-ZIP这个软件 直接打开那个文件夹 一直往里面的文件夹点 (这个隐藏的有俩文件夹,其中一个就是了) 等到最后的时候就是你加密的那个文件夹了   你把它复制或剪切出来就OK了 。

是不是很简单呀?!!!!

2、去除文件夹的属性后,也可再次输入密码,能够打开。(不知是否是巧合)

一,打开我的电脑—>工具—>文件夹选项—>查看—>去掉“隐藏受保护的操作系统文件”前面的勾—>勾选”显示所有文件和文件夹”—>去掉”隐藏已知文件类型的扩展名,这步做完,可看到加密过的文件夹里面有三个文件。(George PS:Windows 7的话,“隐藏文件夹(大概是这个名字)的选项也要取消,就在”隐藏受保护的操作系统文件”选项的下面”)

二,开始–>运行–>CMD 然后进入加密的文件夹,如果你加密的文件夹路径名为”c:\hack”,那么就在CMD下面打开hack文件夹(cd c:\hack)

三,然后接着键入:attrib -s -r -h Thumbs.ms (George PS:我的名字是“Thumbs.mn”)这一步主要是去掉 Thumbs.ms 的其他属性.这时为了方便,我们可以将Thumbs.ms重命名为123(ren Thumbs.ms 123)(George PS:如果无法重命名,可以使用如下命令:ren \\.\c:/hack/Thumbs.ms 123).

四,然后接着键入:cd 123 回车后,我们可以键入dir/x来查看123文件夹里面有些什么文件,我们发现下面有:COM1~1.{D3文件夹(George ps:这个名字不固定,我的是COM1.{一大堆字符}),我们在CMD下重命名它为456,(ren COM1~1.{D3 456),如果不能重命名,则需要在123文件下新建一个名为COM1-COM9中的任何一个,这里我们就新建名为com1的文件夹为例,如果用md com1 肯定出现目录无效 ,这里我们用命令为:md \\.\c:\com1 建立就可以了,然后我们再接着重命名COM1~1.{D3文件夹(ren COM1~1.{D3 456) OK。)(George PS:如果无法重命名,可以使用如下命令:ren\\.\C:hack\COM1~1.{D3 456

五,然后接着键入:cd 456 然后再键入dir/x 查看456文件夹里面有些什么文件。发现里面有一个“ 0915~1”(George PS:同样,这个名字也不确定)文件夹,这里需要注意,0915~1文件名前面和后面是有东西的,我们可以在显示出来的文件名中复制过来,这个文件夹是不可以直接双击打开的,我们在CMD下重命名 0915~1为789(ren 0915~1 789)

六,这时,我们就可以直接进入加密文件夹中打开加密文件下的123文件夹,再打开456文件夹,再打开789文件夹下的LastF文件夹,里面的文件,就是加密的内容,结束。

原文地址:http://hi.baidu.com/zhangjip_love/blog/item/e88cc9764ba41617b051b9a2.html

————————————————————————————————————–

George 另附一个删除顽固文件夹的方法:

在待删除的文件夹的所在盘上新建一个文本文档,把以下内容复制到这个文档,然后选择另存为 文件名填上TEST.BAT,保存类型选择所有文件,然后把你想要删除的的文件拖到TEST.BAT的图标上.

DEL /F /A /Q \\?\%1
RD /Q /S \\?\%1

No Comments

腾讯微博邀请码一个(QQ微博邀请码)

欢迎广大程序员通知领取:

http://t.qq.com/invite/72c6c6cabd286aaab40b#
我正在用腾讯微博记录我的生活,赶快收听我吧,一起分享精彩生活!

 

http://t.qq.com/invite/7175b3a1249159b25473#
我正在用腾讯微博记录我的生活,赶快收听我吧,一起分享精彩生活!

 

—————————————————————–

如果以上邀请链接已经被使用,请加入QQ群:90298926(仅限软件开发人员)

No Comments

Hello world!

Welcome to 七十二松 (72pines). This is your first post. Edit or delete it, then start blogging!

1 Comment