熟悉数据库运维的程序猿都知道,数据的备份重于一切,随着业务的发展,数据量也会越来越大,有时候备份集会放在文件系统上面,有的备份集会放在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与文件系统之间文件传输的更多相关文章

  1. Linux 服务器之间文件传输

    linux的scp命令: scp就是secure copy的简写,用于在linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器. 有时我们需要获得远程服务器上 ...

  2. 开发板与pc之间文件传输:kermit and lrzsz

    imx6开发板与pc机之间通过串口传输文件步骤: 1. 安装好kermit并可以使用 2. 交叉编译lrzsz开源软件并把可执行程序lrz lsz拷贝到开发板 2.1 下载并解压lrzsz-0.12. ...

  3. 树莓派与Linux系统之间文件传输

    最近因为要学习Python,于是把放在家里接了一年灰的树莓派又给搜出来了,刚买那会也捣鼓了好一阵子, 基本操作都学会了,但现在又忘光了,只能又从头开始搞了,首先第一个要解决的是怎么把文件从电脑传输到树 ...

  4. linux之间文件传输(之scp)

    linux的scp命令 linux 的 scp 命令 可以 在 linux 之间复制 文件 和 目录: ==================scp 命令==================scp 可以 ...

  5. linux之间文件传输问题

    如果linux服务器使用了秘钥登陆,可以先关闭秘钥登陆 http://blog.chinaunix.net/uid-23634108-id-2393471.html 然后:scp -P 端口号  no ...

  6. scp实现mac与linux服务器之间文件传输

    1.mac上传文件到linux服务器 scp 文件名 用户名@服务器ip:目标路径如:scp /Users/test/testFile test@xxx.xxx.xxx.xxx:/test/ 2.ma ...

  7. linux服务器之间文件传输

    有时候我们会遇到,把一个服务器上的文件夹,传到另一个服务器 我们需要先把文件夹打包成 tar.gz,这种格式在任何linux版本上都能压缩/解压 #解压命令 tar -zxvf xxx.tar.gz ...

  8. WinSCP-windows与Linux之间文件传输

    WinSCP是一款Windows下通过使用SSH协议的开源工具,用于连接Linux操作系统,可以上传或者下载文件使用! 开源顾名思义,无需注册,安装即可使用!(安装请自行百度WinSCP) 打开桌面上 ...

  9. Windows与Linux之间文件传输

    (1).使用WinSCP工具,实现将Windows的文件上传到Linux指定目录下 (1).输入主机名.用户名.密码,选择登录,成功连接至Linux系统 (2).在左侧列表,选择要上传文件,单击右键选 ...

随机推荐

  1. SQL 读取XML到Datatable

    DECLARE @hdoc INT --XML 数据格式 --------------------------------------------------------- ) SET @doc = ...

  2. 洛谷P2000 拯救世界(生成函数)

    题面 题目链接 Sol 生成函数入门题 至多为\(k\)就是\(\frac{1-x^{k+1}}{1-x}\) \(k\)的倍数就是\(\frac{1}{1-x^k}\) 化简完了就只剩下一个\(\f ...

  3. leaflet 如何绘制圆

    方法1(根据指定的半径和中心点去绘制圆) var polygon1 = new L.Circle([34, 108], 120000, { color: 'red', //颜色 fillColor: ...

  4. 17.Odoo产品分析 (二) – 商业板块(10) – 电子商务(1)

    查看Odoo产品分析系列--目录 安装电子商务模块 1. 主页 点击"商店"菜单:  2. 添加商品 在odoo中,你不用进入"销售"模块,再进入产品列表添加产 ...

  5. 关系数据库标准语言SQL——概述

      SQL是一种介于关系代数与关系演算之间的结构化查询语言,其功能并不仅仅是查询.SQL是一个通用的.功能极强的关系数据库语言.SQL(Structured Query Language)结构化查询语 ...

  6. AIDL基本使用

    1.概述 Binder能干什么?Binder可以提供系统中任何程序都可以访问的全局服务.这个功能当然是任何系统都应该提供的,下面我们简单看一下Android的Binder的框架 Android Bin ...

  7. (其他)window10分盘

    由于thinkpad的一个c盘大概是一个t左右,所以我们先分一下盘.   首先找到计算机管理,然后找磁盘管理,右击比较大的磁盘,压缩卷,大概就压缩一半吧,然后新建简单卷,一直下一步,紧接着就完成了. ...

  8. 记CSS格式化上下文

    fomatting context 引言 主要讲解的是BFC上下文 本文是查看 史上最全面.最透彻的BFC原理剖析 的笔记 所以不会详解BFC, 只是记录学习心得, 以及重要规则避免原文失效 简介 F ...

  9. Redis常用命令【列表】

    一.简介 基于Linked List实现,元素是字符串类型,列表头尾增删快,中间增删慢,增删元素是常态. 元素可以重复出现,最多包含2^32-1个元素. 二.命令 1.说明 1.1 B block 块 ...

  10. [20180814]慎用查看表压缩率脚本.txt

    [20180814]慎用查看表压缩率脚本.txt --//最近看exadata方面书籍,书中提供1个脚本,查看某些表采用那些压缩模式压缩比能达到多少.--//通过调用DBMS_COMPRESSION. ...