使用OSQL调用脚本帮助SQL Server 2000 数据库迁移
2005-03-29 17:41
549 查看
问题介绍:
很多时候,我们会在SQL Server中新建一个数据库,使用 enterprise manager 的图形界面来完成新建角色、新建登录 用户、分配角色权限,将登录用户加附到角色等操作。这些操作很是烦琐,没有人想做第二次。但 SQL Server 的迁移虽然是很简单,但也有不方便的地方。数据库从备份中新建时,登录用户密码和授权都不能很好的转过来(出于安全考虑),而导出的脚本中也不会有密码项。
实际情况:
公司有一个项目,原来设计时使用了大量的登录用户和角色权限。多次迁移时都出现了失误,这一次要重建一个测试环境时失误又出现了。人不能在同一地方跌倒两次,于是补充了一个脚本来完成这件事。 数据库维护这一块自已不是多熟悉,自己尝试之处就不多说了,直接列出过程。如果哪位朋友觉得不符合数据库的维护惯例, 还请指出。
过程步骤:
1. 假设数据库已生成,表和存储过程等等对象都已建好
2. 在原型数据库中生成相关SQL脚本
2.1 在生成SQL脚本对话框中,生成"角色及角色成员添加.sql"
a. 在选项Tab中:编写数据库用户和数据库角色脚本
脚本例:
--在数据库中添加角色r_trade
if not exists (select * from dbo.sysusers where name = N'r_trade' and uid > 16399)
EXEC sp_addrole N'r_trade'
GO
--给角色r_trade添加用户e_card_pos_signin
exec sp_addrolemember N'r_trade', N'e_pos_signin'
GO
2.2 在生成SQL脚本对话框中,生成"角色权限添加.sql"
a. 在常规Tab中:选择"全部表"、"全部视图"、"全部存储过程项"
b. 在设置格式Tab中: 去掉所有选项
c. 在选项Tab中:选择"编写对象权限级别的脚本"
脚本例:
--将存储过程p_sign_in的执行权限赋给角色r_trade
GRANT EXECUTE ON [dbo].[p_sign_in] TO [r_trade]
GO
3. 自己编写一个生成登录用户的脚本
3.1 编写脚本 "登录用户.sql"
脚本例:
--在数据库e_test中创建e_pos_signin'登录用户,密码e_pos_signin_pwd
EXEC p_create_login N'e_test, N'e_pos_signin', N'e_pos_signin_pwd', N''
GO
3.2 脚本将要调用的存储过程
创建代码:
CREATE PROCEDURE p_create_login
AS
if exists (select * from dbo.sysusers where name = @login_name)
EXEC sp_revokedbaccess @login_name
if exists (select * from master..sysxlogins where name = @login_name)
EXEC sp_droplogin @login_name
if not exists (select * from master..sysxlogins where name = @login_name)
EXEC sp_addlogin @login_name, @login_pwd, @login_db
EXEC sp_grantdbaccess @login_name, @login_name
if len(@login_role) > 0
EXEC sp_addrolemember @login_attr, @login_name
4.建立批处理 patch.bat,减少操作失误
osql -Stest -de_test -Usa -P12345 -ip_create_login.sql
osql -Stest -de_test -Usa -P12345 -i登录用户.sql
osql -Stest -de_test -Usa -P12345 -i角色及角色成员添加.sql
osql -Stest -de_test -Usa -P12345 -i角色权限添加.sql
参数说明
-S 数据服务名。我用的数据库端口被修正过,这里用的名字是 SQL Server Client Network Utility中的 Server Alias
-d 数据库名。
-U 用户名。用sa超级用户
-P 密码。
-i 要执行的脚本。
5. 最后要做的就是 RUN, 祝大家好运
很多时候,我们会在SQL Server中新建一个数据库,使用 enterprise manager 的图形界面来完成新建角色、新建登录 用户、分配角色权限,将登录用户加附到角色等操作。这些操作很是烦琐,没有人想做第二次。但 SQL Server 的迁移虽然是很简单,但也有不方便的地方。数据库从备份中新建时,登录用户密码和授权都不能很好的转过来(出于安全考虑),而导出的脚本中也不会有密码项。
实际情况:
公司有一个项目,原来设计时使用了大量的登录用户和角色权限。多次迁移时都出现了失误,这一次要重建一个测试环境时失误又出现了。人不能在同一地方跌倒两次,于是补充了一个脚本来完成这件事。 数据库维护这一块自已不是多熟悉,自己尝试之处就不多说了,直接列出过程。如果哪位朋友觉得不符合数据库的维护惯例, 还请指出。
过程步骤:
1. 假设数据库已生成,表和存储过程等等对象都已建好
2. 在原型数据库中生成相关SQL脚本
2.1 在生成SQL脚本对话框中,生成"角色及角色成员添加.sql"
a. 在选项Tab中:编写数据库用户和数据库角色脚本
脚本例:
--在数据库中添加角色r_trade
if not exists (select * from dbo.sysusers where name = N'r_trade' and uid > 16399)
EXEC sp_addrole N'r_trade'
GO
--给角色r_trade添加用户e_card_pos_signin
exec sp_addrolemember N'r_trade', N'e_pos_signin'
GO
2.2 在生成SQL脚本对话框中,生成"角色权限添加.sql"
a. 在常规Tab中:选择"全部表"、"全部视图"、"全部存储过程项"
b. 在设置格式Tab中: 去掉所有选项
c. 在选项Tab中:选择"编写对象权限级别的脚本"
脚本例:
--将存储过程p_sign_in的执行权限赋给角色r_trade
GRANT EXECUTE ON [dbo].[p_sign_in] TO [r_trade]
GO
3. 自己编写一个生成登录用户的脚本
3.1 编写脚本 "登录用户.sql"
脚本例:
--在数据库e_test中创建e_pos_signin'登录用户,密码e_pos_signin_pwd
EXEC p_create_login N'e_test, N'e_pos_signin', N'e_pos_signin_pwd', N''
GO
3.2 脚本将要调用的存储过程
创建代码:
CREATE PROCEDURE p_create_login
AS
if exists (select * from dbo.sysusers where name = @login_name)
EXEC sp_revokedbaccess @login_name
if exists (select * from master..sysxlogins where name = @login_name)
EXEC sp_droplogin @login_name
if not exists (select * from master..sysxlogins where name = @login_name)
EXEC sp_addlogin @login_name, @login_pwd, @login_db
EXEC sp_grantdbaccess @login_name, @login_name
if len(@login_role) > 0
EXEC sp_addrolemember @login_attr, @login_name
4.建立批处理 patch.bat,减少操作失误
osql -Stest -de_test -Usa -P12345 -ip_create_login.sql
osql -Stest -de_test -Usa -P12345 -i登录用户.sql
osql -Stest -de_test -Usa -P12345 -i角色及角色成员添加.sql
osql -Stest -de_test -Usa -P12345 -i角色权限添加.sql
参数说明
-S 数据服务名。我用的数据库端口被修正过,这里用的名字是 SQL Server Client Network Utility中的 Server Alias
-d 数据库名。
-U 用户名。用sa超级用户
-P 密码。
-i 要执行的脚本。
5. 最后要做的就是 RUN, 祝大家好运
相关文章推荐
- [转载]在SQL Server 2000里设置和使用数据库复制
- SQL SERVER 2005导出脚本到SQL SERVER 2000中使用
- 使用脚本调用Django数据库
- 在SQL Server 2000中使用Transact-SQL建立数据库
- sql server 2000 示例数据库 Pubs 全库脚本 SQLServer2000 自带数据库
- 我正在使用的一个SQL Server 2000/2005/2008 数据库访问类-SqlCommon(C#)
- 使用JDBC驱动程序访问SQL Server 2000数据库(实例)
- 如何将sql server 2000的数据库还原到sql server 2005里使用?
- 在SQL Server 2008中使用SQL Server 2000的MDF数据库文件
- Installshield2009中使用osql.exe执行数据库脚本
- SQL SERVER 2000/2005/2008数据库数据迁移到Oracle 10G细述
- 使用SQL语句附加SQL Server 2000数据库,可以改物理及逻辑文件名
- SQL SERVER 2000/2005/2008数据库数据迁移到Oracle 10G细述
- SQL Server 2000数据库存储过程的调用(VB)
- 在SQL SERVER 2000中使用SQL SERVER 2005的数据库(转)
- 在SQL Server 2000里设置和使用数据库复制
- 在SQL SERVER 2000中使用SQL SERVER 2005的数据库
- 如何在SQL Server 2000里设置和使用数据库复制
- sql server 2000 生成数据库的SQL脚本
- BlogEngine使用SQL Server 2000做后台数据库