`
lnj
  • 浏览: 54672 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一键还原数据库ruby脚本

阅读更多
生产环境每小时自动备份数据库,压缩后上传到公司ftp服务器上,ftp服务器部署在公司内网。所以我每次使用生成环境数据库做开发时,都需要访问ftp服务器共享文件夹,找到最新的备份文件,然后用7z打开,找到所需的数据库备份文件,然后再使用SQL Server企业管理器还原数据库。
经历了几十次这样的操作后,我决定要写个程序来帮我做这些事。最初打算用bat脚本,在查找最新创建文件时遇到困难,而后使用c#,在使用Process.Start方法传参时遇到困难(参数值中带有空格,需要用双引号包裹),最后终于用ruby实现了,整个思考、实践的过程耗时一天半。

代码如下:
# 一键恢复saas0数据库,从10服务器上获取最新备份压缩文件,解压缩后找到saas0数据库备份文件,然后还原数据库
# 在执行过程中会建立临时文件夹c:/~one-click-resotre-temp
require 'find'
require 'FileUtils'

# 建立访问授权
`net use \\\\192.168.99.10\\ipc$ "密码" /user:"administrator"`

# 找到最后修改的文件
latestFile = nil
Find.find('\\\\192.168.99.10\\d$\\FTP') {|file| latestFile = file if file =~ /all_.*\.7z/ && (latestFile.nil? || File.mtime(latestFile) < File.mtime(file))}

# 建立本地临时文件夹
tempDir = "c:/~one-click-resotre-temp"
Dir.mkdir(tempDir) unless File.exists?(tempDir)

#  解压缩到本地
system "7z x \"#{latestFile}\" -o#{tempDir}"

# 重启sql server服务
`net stop mssqlserver`
`net start mssqlserver`

# 还原saas0数据库
dbname = "saas0"
bakfile = Dir.glob(File.join(tempDir, 'saas*.bak')).first.to_s
system "isql /localhost /U sa /P /Q \"restore database #{dbname} from disk = '#{bakfile}' WITH MOVE '#{dbname}_Data' TO 'D:\\Data\\SQL Server\\#{dbname}_Data.mdf',MOVE '#{dbname}_Log' TO 'D:\\Data\\SQL Server\\#{dbname}_Log.ldf', REPLACE\""
# 清空密码
system "isql /localhost /U sa /P /Q \"update #{dbname}..MEM_User set HashedPassword = null\""

# 清理临时文件夹
FileUtils.rmtree(tempDir) if File.exists?(tempDir)
puts "\r\ndone."


将上述代码保存为one-click-resotre.rb,再写一个bat完事。
ruby one-click-resotre.rb
pause

分享到:
评论

相关推荐

    ruby:1233

    6. **ActiveRecord**:Ruby on Rails框架中的ActiveRecord是一个ORM(对象关系映射)库,它简化了数据库操作,让开发者可以使用Ruby对象来操作数据库记录。 7. **Ruby on Rails**:Ruby的流行很大程度上归功于Ruby ...

    redis-3.0.0.gem

    3. 安装完成后,可以在Ruby脚本中导入Redis库: ```ruby require 'redis' ``` 4. 初始化Redis连接,通常会指定服务器地址和端口: ```ruby redis = Redis.new(host: '127.0.0.1', port: 6379) ``` 5. 现在可以...

    Ruby

    9. **符号(Symbol)**:Ruby中的符号是不可变的字符串引用,常用于表示哈希键,因为它们在内存中只保存一份,提高了效率。 10. **模块(Module)和命名空间**:Ruby的模块用于封装代码,提供命名空间,防止命名...

    redis-4.0.1.gem

    Redis 是一个开源的、高性能的键值存储系统,它被广泛应用于数据缓存、消息队列、数据库等多个领域。在IT行业中,Redis 的使用对于提升应用程序的性能和响应速度至关重要。"redis-4.0.1.gem" 文件是Redis的一个特定...

    Redis集群资料包,Redis3.2和Rubby

    Redis是一种高性能的键值数据库,常用于数据缓存、消息队列、数据库等多个场景。它以其高效的内存存储机制和丰富的数据结构而闻名。在本资料包中,重点是Redis的集群解决方案,这允许Redis扩展到多台服务器,提高可...

    database-course-lab3:实验室 3

    Ruby是一种动态、面向对象的脚本语言,因其简洁的语法和强大的元编程能力而受到开发者的欢迎,尤其适合快速原型开发和Web应用。 在这个实验中,学生们可能会涉及到以下几个核心知识点: 1. **SQL基础**:SQL(结构...

    Redis数据导入导出以及数据迁移的4种方法详解

    这是一个基于 Ruby 的工具,可以方便地备份和恢复 Redis 数据。要使用 `redis-dump`,首先需要安装 Ruby 和该工具,通过淘宝或 Ruby China 镜像源安装。不过需要注意,随着镜像站点的变化,需要确保使用有效的源地址...

    redis-trib.zip

    Redis 是一个高性能的键值数据库,常用于缓存、数据持久化等场景。在 Redis 的早期版本中,创建集群功能需要借助 `redis-trib.rb` 这个脚本来完成。这个脚本是用 Ruby 语言编写的,主要用于帮助用户设置和管理 Redis...

    Redis分布式搭建

    Redis是一款高性能的键值对数据库,常用于缓存、消息队列等场景。在分布式环境中,Redis可以通过集群模式实现数据的高可用性和可扩展性。本文将详细介绍如何使用`redis-3.0.0.tar.gz`和`redis-3.0.0.gem`这两个文件...

    learning

    Ruby是一种面向对象的、动态类型的脚本语言,由日本的松本行弘(Yukihiro Matsumoto)于1995年设计并开发。它的设计理念是简洁、优雅,注重程序员的生产力,使得开发者能够更加专注于解决问题,而不是被语法细节所...

    redis的安装和基本常识

    - 记录服务器执行的所有写操作命令,并在服务器重启时重新执行这些命令来恢复数据。 - 可以选择不同的同步策略以平衡数据安全性和性能。 - `appendfsync always`:每次有写命令执行后立即同步到磁盘。 - `...

    redis-发展历史及基础知识

    - **定时删除**:为每个键设置一个定时器,当键过期时立即删除。 - **定期删除**:每隔一定时间扫描并删除已过期的键。 - **惰性删除**:仅在访问键时检查其是否过期,过期则删除。 #### 七、Redis 多数据库支持 - ...

    redis-3.2.8

    在Redis中,数据以键(key)和值(value)的形式存储,键可以是字符串,而值则可以是五种不同的数据类型:字符串、哈希、列表、集合和有序集合。这种设计使得Redis非常灵活,适用于多种场景,如缓存、消息队列、...

    9.HBase.zip

    HBase是一款开源的分布式列式数据库,它是基于Google的Bigtable设计思想开发的,属于Apache Hadoop项目的一部分。HBase提供了高可靠性、高性能、可伸缩的存储解决方案,尤其适用于处理海量半结构化数据。在大数据...

    apache hbase reference guide

    - **Scripting with Ruby**(使用Ruby脚本):利用Ruby语言编写脚本来自动化HBase Shell的操作。 - **Running the Shell in Non-Interactive Mode**(非交互模式下运行Shell):通过命令行参数直接执行Shell命令,...

Global site tag (gtag.js) - Google Analytics