转://ASM与文件系统之间文件传输
熟悉数据库运维的程序猿都知道,数据的备份重于一切,随着业务的发展,数据量也会越来越大,有时候备份集会放在文件系统上面,有的备份集会放在asm存储上面,实现文件系统到文件系统之间的文件传输很简单,cp或者scp都能简单的实现。
但是很多情况下,我们的数据库服务器是挂了存储,划好了lun的,数据或者备份都放在大容量高性能的存储上,很多场景下文件系统可能满足不了这种需求,这时候就需要asm存储出场了,常见的如Oracle rac环境,standalone环境下。
这里就引发了这样一种思考,存放在asm存储里面的文件,如何取到本地文件系统或者直接传输到另外一台服务器上去?
即实现以下场景的文件传输:
1. ASM存储 -> ASM存储,
2. ASM存储 -> 文件系统,
3. 文件系统 -> ASM存储
面对这3种情况,想必不是很熟悉数据库的人员会没有思路,或者有思路却不知道如何操作。当然,在同一服务器上,我们照样可以用cp命令实现,甚至也可以基于rman命令去实现文件传输:
◆ 实现ASM存储到文件系统之间的文件传输:

◆比如实现文件系统到ASM存储之前的文件传输:

但是这样也稍显麻烦,如果要传输到另外一台服务器上去,我们还需要用到scp或者ftp命令,如果要传输的文件比较大数量比较多,那么瓶颈就来了,操作量大,过程繁琐,监控起来麻烦。
下面就跨服务器的情况下,简单实现asm存储 -> 文件系统之间的文件传输,做了一个操作案例,希望能够提供我们另外一种新的思路去实现文件的传输。
首先,开始案例之前,先介绍一下Oracle 10g就提供的DBMS_FILE_TRANSFER程序包,其作用可以实现本地与本地服务器,甚至本地与远程数据库服务器之间的文件传输,其中包括以下场景:
文件系统 -> 文件系统
ASM存储 -> ASM存储
ASM存储 -> 文件系统
文件系统 -> ASM存储
这个包的用法有3种:
在同一台服务器,我们可以用copy_file来实现asm存储到文件系统的文件传输。跨服务器之间我们推荐用: get_file 或者 put_file这两个存储过程实现文件传输,当然这个包功能很强大,比如可以支持在线备份,这里我们只介绍文件传输的使用。
当然这里有个大前提,对于asm存储,并不是随便创建个文件都能放到asm存储上面的,必须是Oracle的数据库相关的文件才允许放置到asm存储上,比如数据文件、日志文件、控制文件、参数文件以及备份文件等
原文如下:
You can copy any type of file to and from a local file system. However, you can copy only database files (such as datafiles, tempfiles, controlfiles, and so on) to and from an ASM disk group.
存储过程的描述如下:

要使用这个包,需要注意的2点权限问题:
对source_directory_object(源端)参数指定的目录对象有read权限
对 destination_directory_object(目标端)指定的目录对象有write权限
▲ Usage Notes
To run this procedure successfully, the current user must have the following privileges:
• READ privilege on the directory object specified in the source_directory_object parameter
• WRITE privilege on directory object specified in the destination_directory_object parameter
要使用这个包,有2个限制就是
1. 单个要传输的文件必须是512字节的整数倍
2. 要传输的文件的大小不能超过2TB,
不过这2点几乎不会成为瓶颈,因为很少有单个文件会超过2TB的:
官方解释如下:
Also, the copied file must meet the following requirements:
• The size of the copied file must be a multiple of 512 bytes.
• The size of the copied file must be less than or equal to two terabytes.
下面进入具体场景:
【场景一:本地数据库服务器之间的文件传输】
1. 在dump文件所在的数据库创建需要的目录。

目录已创建。

目录已创建。
2. 开始备份数据库,此场景共产生了6个dump文件

3. 利用copy_file存储过程实现本地asm存储到文件系统的传输

PL/SQL 过程已成功完成。
结果显示如下:

【场景二:跨服务器之间的文件传输】
1. 在另外一台服务器(作为目标端),加入源端的tns串

2. 在目标端创建dblink,通过dblink去访问源端(从这里可以看出,这种方式的文件传输也是依赖网络实现的)

数据库链接已创建。
3. 在目标端创建目录,存放从源端传输过来的文件

目录已创建。
4. 实现传输
下面的脚本是基于官方的命令,做了一些改动,写成一个脚本,实现更有针对性的文件传输

PL/SQL 过程已成功完成。
如果要传输的文件比较大,建议后台nohup实现:

也可以利用动态性能视图 V$SESSION_LONGOPS去监控与估算整个传输的过程与时间。
至此,已经实现了 跨数据库服务器之间的 asm存储 -> 文件系统之间的文件传输,像其他场景asm存储->asm存储,文件系统->asm存储实现的方法是一致的。这个场景实现了对备份文件的传输,当然也可以根据具体的需求,对数据文件也可以进行文件传输。
结果展示如下:

转://ASM与文件系统之间文件传输的更多相关文章
- Linux 服务器之间文件传输
linux的scp命令: scp就是secure copy的简写,用于在linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器. 有时我们需要获得远程服务器上 ...
- 开发板与pc之间文件传输:kermit and lrzsz
imx6开发板与pc机之间通过串口传输文件步骤: 1. 安装好kermit并可以使用 2. 交叉编译lrzsz开源软件并把可执行程序lrz lsz拷贝到开发板 2.1 下载并解压lrzsz-0.12. ...
- 树莓派与Linux系统之间文件传输
最近因为要学习Python,于是把放在家里接了一年灰的树莓派又给搜出来了,刚买那会也捣鼓了好一阵子, 基本操作都学会了,但现在又忘光了,只能又从头开始搞了,首先第一个要解决的是怎么把文件从电脑传输到树 ...
- linux之间文件传输(之scp)
linux的scp命令 linux 的 scp 命令 可以 在 linux 之间复制 文件 和 目录: ==================scp 命令==================scp 可以 ...
- linux之间文件传输问题
如果linux服务器使用了秘钥登陆,可以先关闭秘钥登陆 http://blog.chinaunix.net/uid-23634108-id-2393471.html 然后:scp -P 端口号 no ...
- scp实现mac与linux服务器之间文件传输
1.mac上传文件到linux服务器 scp 文件名 用户名@服务器ip:目标路径如:scp /Users/test/testFile test@xxx.xxx.xxx.xxx:/test/ 2.ma ...
- linux服务器之间文件传输
有时候我们会遇到,把一个服务器上的文件夹,传到另一个服务器 我们需要先把文件夹打包成 tar.gz,这种格式在任何linux版本上都能压缩/解压 #解压命令 tar -zxvf xxx.tar.gz ...
- WinSCP-windows与Linux之间文件传输
WinSCP是一款Windows下通过使用SSH协议的开源工具,用于连接Linux操作系统,可以上传或者下载文件使用! 开源顾名思义,无需注册,安装即可使用!(安装请自行百度WinSCP) 打开桌面上 ...
- Windows与Linux之间文件传输
(1).使用WinSCP工具,实现将Windows的文件上传到Linux指定目录下 (1).输入主机名.用户名.密码,选择登录,成功连接至Linux系统 (2).在左侧列表,选择要上传文件,单击右键选 ...
随机推荐
- 异常:android.os.NetworkOnMainThreadException
场景: 安卓开发时在主线程访问网络解决: 将访问网络的代码使用Thread操作 Handler handler = new Handler(){ @Override public void handl ...
- php 设计模式之单例模式
单例模式的关键点 1.//私有构造函数,防止直接new 创建实例 2.//设置静态成员变量 作保存实例 3.//公有访问实例的静态方法 4.//防止克隆对象的方法 上代码: //单例模式 class ...
- 四个O(n^2)级别的排序性能测试
测试环境为DEV-C++,并且选择排序,插入排序,冒泡排序,均为优化后的,若想了解具体优化过程,请参照:https://blog.csdn.net/qq_40164152 测试用例: #ifndef ...
- WePY - 小程序敏捷开发实践丨掘金开发者大会
声明:内容转载他处,如有侵权,可协商下架 本主题虽然在其它地方讲了很多次,但还是有非常多新内容.因为很多东西正在做或者想要做.本次分享主要分为以下几个部分: WePY 的介绍 WePY 的用户 上面展 ...
- 发现一个微博图床API和图片上传代码
网上寻到一款微博图床的插件,然后顺藤摸瓜找到了原作者的API代码. API文件: <?php /** * 上传图片到微博图床 * @author Youngxj & mengkun &a ...
- 常见js面试题
包含内容: Array indexOf(). 数组扁平化 isArray() 数组的去重 Object.is() Array.filter 用一行代码实现数组扁平化? JavaScript isArr ...
- 2018-11-23 手工翻译Vue.js源码:尝试重命名标识符与文本
续前文: 手工翻译Vue.js源码第一步:14个文件重命名 对core/instance/索引中的变量, 方法进行重命名如下(题图): import { 混入初始化 } from './初始化' im ...
- 一文读懂机器学习大杀器XGBoost原理
http://blog.itpub.net/31542119/viewspace-2199549/ XGBoost是boosting算法的其中一种.Boosting算法的思想是将许多弱分类器集成在一起 ...
- PyCharm快捷键使用
- IntelliJ IDEA安装、配置、测试
IntelliJ IDEA安装.配置.测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.安装.激活与配置 4.开发测试 4.1 JavaSE开发测试(确保JDK已正确安装) 4.2 ...