代码改变世界

SQL数据库中修改表的所有者

2011-12-05 09:22 by 周国选, 阅读(1687) 阅读, 推荐(0) 推荐, 收藏, 编辑
单个修改所有者sql语句如下:
查询分析器输入:EXEC sp_changeobjectowner 'user.table', 'dbo'
user.table的意思为:所有者.表名,比如oblog.oblog_user,以前的语句表示将table这张表的所有者由
user改成dbo
批量修改所有者语句如下:
查询分析器输入:exec sp_msforeachtable 'sp_changeobjectowner ''?'', ''dbo'''
即可把当面表的所有所有者换成dbo
 
批量修改视图和存储过程的存储过程:
CREATE   PROCEDURE   ChangeProcOwner  
@OldOwner as   NVARCHAR(128),
@NewOwner as   NVARCHAR(128)
AS  
   
DECLARE   @Name   as   NVARCHAR(128)    
DECLARE   @Owner as   NVARCHAR(128)  
DECLARE   @OwnerName as   NVARCHAR(128)  
   
DECLARE   curObject   CURSOR   FOR    
select 'Name' =   name,  
'Owner' =   user_name(uid)  
from   sysobjects  
where   user_name(uid)=@OldOwner   and   xtype='p'  
order   by   name  
   
OPEN     curObject  
FETCH   NEXT   FROM   curObject   INTO   @Name,   @Owner  
WHILE(@@FETCH_STATUS=0)  
BEGIN          
if   @Owner=@OldOwner    
begin  
set   @OwnerName   =   @OldOwner   +   '.'   +   rtrim(@Name)  
exec   sp_changeobjectowner   @OwnerName,   @NewOwner  
end  
   
FETCH   NEXT   FROM   curObject   INTO   @Name,   @Owner  
END  
   
close   curObject  
deallocate   curObject  
GO
执行 exec   ChangeProcOwner   'xx','dbo' --修改视图所有者要写上原所有者名
或者
exec   ChangeProcOwner   '?','dbo'
另找一别人的方法,修改视图跟存储过程很方便
--执行这个语句,就可以把当前库的所有表的所有者改为dbo
exec sp_msforeachtable 'sp_changeobjectowner ''?'', ''dbo'''
单个修改表所有者
exec   sp_changeobjectowner   '要改的表名/存储过程名','dbo'
--如果是要用户表/存储过程/视图/触发器/自定义函数一齐改,则用游标(不要理会错误提示)
declare tb cursor local for
select 'sp_changeobjectowner ''['+replace(user_name(uid),']',']]')+'].['
+replace(name,']',']]')+']'',''dbo'''
from sysobjects
where xtype in('U','V','P','TR','FN','IF','TF') and status>=0
open tb
declare @s nvarchar(4000)
fetch tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch tb into @s
end
close tb
deallocate tb
go
1. sp_changeobjectowner
更改当前数据库中对象的所有者。
语法
sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'
参数
[@objname =] 'object'
当前数据库中现有的表、视图或存储过程的名称。object 的数据类型为 nvarchar(517),没有默认值。object 可用现有对象所有者限定,格式为 existing_owner.object。
[@newowner =] 'owner'
即将成为对象的新所有者的安全帐户的名称。owner 的数据类型为 sysname,没有默认值。owner 必须是当前数据库中有效的 Microsoft? SQL Server? 用户或角色或 Microsoft Windows NT? 用户或组。指定 Windows NT 用户或组时,请指定 Windows NT 用户或组在数据库中已知的名称(用 sp_grantdbaccess 添加)。
返回代码值
0(成功)或 1(失败)
注释
对象所有者(或拥有对象的组或角色的成员)对对象有特殊的权限。对象所有者可以执行任何与对象有关的 Transact-SQL 语句(例如 Insert、Update、Delete、Select 或 EXECUTE),也可以管理对象的权限。
如果拥有对象的安全帐户必须要除去,但同时要保留该对象,请使用 sp_changeobjectowner 更改对象所有者。该过程从对象中删除所有现有权限。在运行 sp_changeobjectowner 之后,需要重新应用要保留的任何权限。
由于这个原因,建议在运行 sp_changeobjectowner 之前,编写现有权限的脚本。一旦更改了对象的所有权,可能要使用该脚本重新应用权限。在运行该脚本之前需要在权限脚本中修改对象所有者。有关编写数据库脚本的更多信息,请参见编写数据库文档和脚本。
可以使用 sp_changedbowner 更改数据库的所有者。
权限
只有 sysadmin 固定服务器角色和 db_owner 固定数据库角色成员,或既是 db_ddladmin 固定数据库角色又是 db_securityadmin 固定数据库角色的成员,才能执行 sp_changeobjectowner。
示例
下面的示例将 authors 表的所有者改为 Corporate\GeorgeW。
EXEC sp_changeobjectowner 'authors', 'Corporate\GeorgeW'
请参见
改变数据库所有者:sp_changedbowner
------------------------------以上摘自sql server 的联机丛书
注意:
使用sqlserver2000改变对象(object)(如Table,SP,View)的所有者(owner)时,需要注意一点:
如果对象改变前的owner为dbo,则直接用:exec sp_changeobjectowner 对象名,新的所有者名就可以成功。如果再需要改变该对象的所有者,则要用如下语法:
exec sp_changeobjectowner "[所有者].[对象名]",新的所有者。注意,双引号不可省略,否则提示objectname does not exist。
EXEC sp_changeobjectowner 'cqadmin.authors', 111
2.建与原表结构相同表,然后把数据从原表插入到新表,操作方法:
在sql server企业管理器中选择原表点右键,选择“所有任务/生存SQL脚本”,保存生成的脚本,在脚本中把表的原所有者改成新所有者。然后再把该脚本运行一遍,数据库中就新生成了一个表,所有者是新所有者,原来的表还在数据库中没有被替换。新表和旧表表名相同,所有者不同,此时的新表中没有数据。
然后再运行下面的语句往新表中插入数据:
Insert INTO CQAdmin.m_actiondef //新所有者.新表名
Select *
FROM RegaltecDefSchema. CQAdministrator.m_actiondef // 数据库名.旧所有者.旧表名
运行完了就做完了,可以把旧表删掉,也可以留着。

llinux mount 新建磁盘到指定目录

2011-09-23 16:11 by 周国选, 阅读(1035) 阅读, 推荐(0) 推荐, 收藏, 编辑
摘要:因为安装数据库,需要较大的磁盘容量,需要把一块新磁盘挂载到/opt上1 对磁盘做分区:root@rac1:/root>fdisk /dev/sdb The number of cylinders for this disk is set to 182024.There is nothing wrong with that, but this is larger than 1024,and could in certain setups cause problems with:1) software that runs at boot time (e.g., old versions of 阅读全文

Centos下apache默认主页修改

2011-09-22 16:37 by 周国选, 阅读(18190) 阅读, 推荐(1) 推荐, 收藏, 编辑
摘要:年前把服务器重装了下,系统Centos5.4.主要做网站发布,装的apache服务。 当时做的时候因特殊原因,要改默认主页为 default.php,安装默认是 :DirectoryIndex index.html于是就修改 /etc/httpd/conf/httpd.conf 文件 DirectoryIndex index.html 为 DirectoryIndexdefault.phpindex.phpindex.html重启服务器,无效!查了一些资料,没有得到解决。应急的处理方法是在原index.php页面做一次跳转。今天,因为网页流程上的一些问题,这个设置失效的bug显现出来,于是再次 阅读全文

CentOS Apache配置详解

2011-09-22 16:30 by 周国选, 阅读(42432) 阅读, 推荐(3) 推荐, 收藏, 编辑
摘要:要想在linux上实现网页服务器(www)需要Apache这个服务器软件,不过Apache仅能提供最基本的静态网站数据而已,想要实现动态网站的话,最好还是要PHP与MySQL的支持,所以下面我们将会以LAMP(linux+Apache+MySQL+PHP)作为安装与设置的介绍。LAMP所需软件与其结构httpd mysql mysql-Server php php-devel php-mysql可以用rpm包安装,或者直接用yum安装#yum install httpd mysql-server php php-devel php-mysql先来了解一下apache 2.0这个版本的相关结构, 阅读全文

Fotolog 的 Solaris/MySQL 架构

2011-09-14 09:24 by 周国选, 阅读(454) 阅读, 推荐(0) 推荐, 收藏, 编辑
摘要:Fotolog 是一个以图片为主的 SNS 网站,让 VPSee 好奇的是用 Solaris 的 Web 2.0 站点不多,看看 Fotolog 有没有什么新东西。数据数据和图片来源(2007):Fotolog: Scaling the World’s Largest Photo Blogging Community超过1100万用户超过24亿条评论每个月超过35亿 PV 和 2000万独立访问,Alexa Top 20总共有超过2亿张的图片,每天还有超过50万张照片上传20%用户每天在 Fotolog 停留 24分钟32台 MySQL 服务器和一个由30台 memcached 服务器组成的集 阅读全文

mysql不预读数据库信息(use dbname 更快,不会卡)

2011-09-13 17:40 by 周国选, 阅读(1575) 阅读, 推荐(0) 推荐, 收藏, 编辑
摘要:mysql> use dbname Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -A让后就卡在这里。上面卡住的原因:: 是由于数据库太大,即数据库中表非常多,所以如果预读数据库信息,将非常慢,所以就卡住了,如果数据库中表非常少,将不会出现问题。 出现问题的原因是:: 我们进入mysql 时,没有使用-A参数; 即我们使用 mysql -hhostname -uusername -pp 阅读全文

Linux MySQL主从复制(Replication)配置

2011-09-13 16:03 by 周国选, 阅读(39371) 阅读, 推荐(6) 推荐, 收藏, 编辑
摘要:MySQL是开源的关系型数据库系统。复制(Replication)是从一台MySQL数据库服务器(主服务器master)复制数据到另一个服务器(从服务器slave)的一个进程。配置主服务器(master)1、编辑数据库配置文件my.cnf,一般在/etc/目录下。#vi /etc/my.cnf在[mysqld]的下面加入下面代码:log-bin=mysql-binserver-id=1innodb_flush_log_at_trx_commit=1sync_binlog=1binlog-do-db=wordpressbinlog_ignore_db=mysqlserver-id=1中的1可以任 阅读全文

MySql常用命令总结

2011-09-13 15:42 by 周国选, 阅读(594) 阅读, 推荐(0) 推荐, 收藏, 编辑
摘要:这两天搞个网站,又用到MySql,可是命令却一个都想不起来,所以,趁这次机会,把这些整理一下,权当作笔记吧,以便自己以后查阅!1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2、创建一个数据库MYSQLDATA mysql> CREATE DATABASE MYSQLDATA; 3:选择你所创建的数据库 mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!)4:查看现在的数据库中存在什么表 mysql> SHOW TABLES;5:创建一个数据库表 mysq 阅读全文

备份MySQL出现Can’t open file when using LOCK TABLES错误

2011-09-13 14:55 by 周国选, 阅读(1708) 阅读, 推荐(0) 推荐, 收藏, 编辑
摘要:备份数据库出现mysqldump: Got error: 1016: Can't open file: './ShoppingCart/ShoppingCart_01f8.frm' (errno: 24) when using LOCK TABLES这样的错误。搜索了一下,发现只要在mysqldump的时候加上--lock-tables=false就可以解决问题。 mysqldump -u root -pMyPassword DbName --lock-tables=false > data.sql 阅读全文

ORACLE常用Script

2011-09-08 10:03 by 周国选, 阅读(788) 阅读, 推荐(0) 推荐, 收藏, 编辑
摘要:1、查看当前所有对象 SQL> select * from tab; 2、建一个和a表结构一样的空表 SQL> create table b as select * from a where 1=2; SQL> create table b(b1,b2,b3) as select a1,a2,a3 from a where 1=2; 3、察看数据库的大小,和空间使用情况 SQL> col tablespace format a20 SQL> select b.file_id 文件ID, b.tablespace_name 表空间, b... 阅读全文
点击右上角即可分享
微信分享提示