By William Sescu
Not to often, but sometimes you need to offload your RMAN backups and your DataPump exports to CIFS. You might run out of space on your NFS server, or you are a Windows shop who has only CIFS shares, and then you might need to put your RMAN backups to CIFS.
One very important MOS Note regarding RMAN backups to CIFS is the following
Is use of CIFS Protocol for RMAN backups supported? (Doc ID 444809.1)
Running a RDBMS on CIFS is clearly not supported because of CIFS does not guarantee atomic write of 512 byte blocks. On the other hand, RMAN is not relying on 512-byte atomic writes, and so it is fine to use RMAN to CIFS.
However, CIFS is not certified by Oracle and the RDBMS development team can not be involved is case there are any issue. The MOS note was last updated on November 2013, so it might be not a bad idea to double check it with Oracle again.
In earlier OS and DB version, there used to be issues with filesystemio_options SETALL,DIRECT or ASYNCH, and so I wanted to double check if this is still the case with more recent releases.
I have done the tests with Oracle 11.2.0.4 and 12.1.0.2 on OEL 6.8 with Samba 3.6.
[root@oel001 ~]# cat /etc/oracle-release Oracle Linux Server release 6.8 [root@oel001 ~]# uname -a Linux oel001 4.1.12-61.1.25.el6uek.x86_64 #2 SMP Wed Jan 11 19:13:03 PST 2017 x86_64 x86_64 x86_64 GNU/Linux [root@oel001 ~]# rpm -qa | grep samba-3.6.23 samba-3.6.23-36.0.1.el6_8.x86_64
I start with filesystemio_options SETALL and RMAN and Datapump with 18 parallel sessions, to make sure that I hit the CIFS share quite hard. Before we start the Test, we have to mount the CIFS share. All mount options are documented at the following link.
https://www.samba.org/samba/docs/man/manpages-3/mount.cifs.8.html
For my case, the most important CIFS mount options are:
user = M$ User to connect to the CIFS share
rw = mount read write
uid = sets the uid that will own all files or directories on the mounted filesystem
gid = sets the gid that will own all files or directories on the mounted filesystem
rsize = default network read size
wsize = default network write size
Regarding the rsize/wsize I have used the ones, which I usually take when using NFS mounts.
[root@oel001 ~]# mount -t cifs //10.0.2.2/rman /rman -o rsize=32768,wsize=32768,rw,user=wrs,uid=oracle,gid=dba --verbose Password: mount.cifs kernel mount options: ip=10.0.2.2,unc=\10.0.2.2rman,rsize=32768,wsize=32768,uid=54321,gid=54322,ver=1,user=wrs,pass=*** ***** [root@oel001 ~]# mount | grep rman //10.0.2.2/rman on /rman type cifs (rw)
Before running any RMAN backups to it, make sure that you can create files with the oracle user. If it is failing at this step already, then you can stop here. This has to work before continuing any further.
oracle@oel001:/home/oracle/ [OCM121] cd /rman/backup/ oracle@oel001:/rman/backup/ [OCM121] touch new_file oracle@oel001:/rman/backup/ [OCM121] ls -l new_file -rwxr-xr-x 1 oracle dba 0 Feb 6 09:22 new_file oracle@oel001:/rman/backup/ [OCM121] rm new_file
Ok. Let’s start with 11.2.0.4 first. The database has filesystemio_options=SETALL, meaning that the database uses aynch and directio at the same time.
My RMAN backup tests will be a regular backup with 16 parallel sessions to that share, and a backup of the Fast Recovery Area to the same share as well.
CONFIGURE DEVICE TYPE DISK PARALLELISM 16 BACKUP TYPE TO COMPRESSED BACKUPSET; BACKUP DATABASE FORMAT '/rman/backup/%U'; BACKUP RECOVERY AREA TO DESTINATION '/rman/backup';
My DataPump test will be a full backup with 16 parallel sessions.
expdp system/manager directory=rman dumpfile=rman%U.dmp parallel=16 full=y
ok. Let’s start doing the first backup.
oracle@oel001:/home/oracle/ [OCM112] rman target / Recovery Manager: Release 11.2.0.4.0 - Production on Mon Feb 6 13:31:37 2017 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: OCM112 (DBID=177109848) RMAN> backup database format '/rman/backup/%U'; Starting backup at 06-FEB-2017 13:31:45 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=128 device type=DISK allocated channel: ORA_DISK_2 channel ORA_DISK_2: SID=249 device type=DISK allocated channel: ORA_DISK_3 channel ORA_DISK_3: SID=366 device type=DISK allocated channel: ORA_DISK_4 channel ORA_DISK_4: SID=12 device type=DISK allocated channel: ORA_DISK_5 channel ORA_DISK_5: SID=129 device type=DISK allocated channel: ORA_DISK_6 channel ORA_DISK_6: SID=250 device type=DISK allocated channel: ORA_DISK_7 channel ORA_DISK_7: SID=360 device type=DISK allocated channel: ORA_DISK_8 channel ORA_DISK_8: SID=14 device type=DISK allocated channel: ORA_DISK_9 channel ORA_DISK_9: SID=130 device type=DISK allocated channel: ORA_DISK_10 channel ORA_DISK_10: SID=251 device type=DISK allocated channel: ORA_DISK_11 channel ORA_DISK_11: SID=367 device type=DISK allocated channel: ORA_DISK_12 channel ORA_DISK_12: SID=15 device type=DISK allocated channel: ORA_DISK_13 channel ORA_DISK_13: SID=131 device type=DISK allocated channel: ORA_DISK_14 channel ORA_DISK_14: SID=252 device type=DISK allocated channel: ORA_DISK_15 channel ORA_DISK_15: SID=368 device type=DISK allocated channel: ORA_DISK_16 channel ORA_DISK_16: SID=16 device type=DISK channel ORA_DISK_1: starting compressed full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00001 name=+DATA11G/ocm112/datafile/system.261.927382121 channel ORA_DISK_1: starting piece 1 at 06-FEB-2017 13:31:48 channel ORA_DISK_2: starting compressed full datafile backup set channel ORA_DISK_2: specifying datafile(s) in backup set input datafile file number=00003 name=+DATA11G/ocm112/datafile/undotbs1.263.927382145 channel ORA_DISK_2: starting piece 1 at 06-FEB-2017 13:31:48 channel ORA_DISK_3: starting compressed full datafile backup set channel ORA_DISK_3: specifying datafile(s) in backup set input datafile file number=00002 name=+DATA11G/ocm112/datafile/sysaux.262.927382135 channel ORA_DISK_3: starting piece 1 at 06-FEB-2017 13:31:48 channel ORA_DISK_4: starting compressed full datafile backup set channel ORA_DISK_4: specifying datafile(s) in backup set input datafile file number=00004 name=+DATA11G/ocm112/datafile/example.265.927382167 channel ORA_DISK_4: starting piece 1 at 06-FEB-2017 13:31:48 channel ORA_DISK_5: starting compressed full datafile backup set channel ORA_DISK_5: specifying datafile(s) in backup set input datafile file number=00005 name=+DATA11G/ocm112/datafile/users.266.927382177 channel ORA_DISK_5: starting piece 1 at 06-FEB-2017 13:31:48 channel ORA_DISK_5: finished piece 1 at 06-FEB-2017 13:32:03 piece handle=/rman/backup/0krrtai4_1_1 tag=TAG20170206T133147 comment=NONE channel ORA_DISK_5: backup set complete, elapsed time: 00:00:15 channel ORA_DISK_3: finished piece 1 at 06-FEB-2017 13:32:13 piece handle=/rman/backup/0irrtai4_1_1 tag=TAG20170206T133147 comment=NONE channel ORA_DISK_3: backup set complete, elapsed time: 00:00:25 channel ORA_DISK_4: finished piece 1 at 06-FEB-2017 13:32:13 piece handle=/rman/backup/0jrrtai4_1_1 tag=TAG20170206T133147 comment=NONE channel ORA_DISK_4: backup set complete, elapsed time: 00:00:25 channel ORA_DISK_1: finished piece 1 at 06-FEB-2017 13:32:23 piece handle=/rman/backup/0grrtai4_1_1 tag=TAG20170206T133147 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:35 channel ORA_DISK_2: finished piece 1 at 06-FEB-2017 13:32:23 piece handle=/rman/backup/0hrrtai4_1_1 tag=TAG20170206T133147 comment=NONE channel ORA_DISK_2: backup set complete, elapsed time: 00:00:35 Finished backup at 06-FEB-2017 13:32:23 Starting Control File and SPFILE Autobackup at 06-FEB-2017 13:32:23 piece handle=+FRA11G/ocm112/autobackup/2017_02_06/s_935242343.266.935242347 comment=NONE Finished Control File and SPFILE Autobackup at 06-FEB-2017 13:32:30 RMAN>
Cool .. it seems to work perfectly. Ok. Let’s do the backup of the FRA to CIFS as well.
RMAN> BACKUP RECOVERY AREA TO DESTINATION '/rman/backup'; Starting backup at 06-FEB-2017 14:48:35 using channel ORA_DISK_1 using channel ORA_DISK_2 using channel ORA_DISK_3 using channel ORA_DISK_4 using channel ORA_DISK_5 using channel ORA_DISK_6 using channel ORA_DISK_7 using channel ORA_DISK_8 using channel ORA_DISK_9 using channel ORA_DISK_10 using channel ORA_DISK_11 using channel ORA_DISK_12 using channel ORA_DISK_13 using channel ORA_DISK_14 using channel ORA_DISK_15 using channel ORA_DISK_16 specification does not match any datafile copy in the repository specification does not match any backup set in the repository channel ORA_DISK_1: starting compressed archived log backup set channel ORA_DISK_1: specifying archived log(s) in backup set input archived log thread=1 sequence=77 RECID=3 STAMP=935241746 channel ORA_DISK_1: starting piece 1 at 06-FEB-2017 14:48:36 channel ORA_DISK_2: starting compressed archived log backup set channel ORA_DISK_2: specifying archived log(s) in backup set input archived log thread=1 sequence=78 RECID=4 STAMP=935241790 channel ORA_DISK_2: starting piece 1 at 06-FEB-2017 14:48:36 channel ORA_DISK_3: starting compressed archived log backup set channel ORA_DISK_3: specifying archived log(s) in backup set input archived log thread=1 sequence=79 RECID=5 STAMP=935242521 channel ORA_DISK_3: starting piece 1 at 06-FEB-2017 14:48:36 channel ORA_DISK_4: starting compressed archived log backup set channel ORA_DISK_4: specifying archived log(s) in backup set input archived log thread=1 sequence=80 RECID=6 STAMP=935242549 channel ORA_DISK_4: starting piece 1 at 06-FEB-2017 14:48:37 channel ORA_DISK_5: starting compressed archived log backup set channel ORA_DISK_5: specifying archived log(s) in backup set input archived log thread=1 sequence=81 RECID=7 STAMP=935242639 channel ORA_DISK_5: starting piece 1 at 06-FEB-2017 14:48:37 channel ORA_DISK_6: starting compressed archived log backup set channel ORA_DISK_6: specifying archived log(s) in backup set input archived log thread=1 sequence=82 RECID=8 STAMP=935242724 channel ORA_DISK_6: starting piece 1 at 06-FEB-2017 14:48:38 channel ORA_DISK_1: finished piece 1 at 06-FEB-2017 14:48:38 piece handle=/rman/backup/OCM112/backupset/2017_02_06/o1_mf_annnn_TAG20170206T144835_d9jzond8_.bkp tag=TAG20170206T144835 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02 channel ORA_DISK_2: finished piece 1 at 06-FEB-2017 14:48:39 piece handle=/rman/backup/OCM112/backupset/2017_02_06/o1_mf_annnn_TAG20170206T144835_d9jzondy_.bkp tag=TAG20170206T144835 comment=NONE channel ORA_DISK_2: backup set complete, elapsed time: 00:00:03 channel ORA_DISK_3: finished piece 1 at 06-FEB-2017 14:48:39 piece handle=/rman/backup/OCM112/backupset/2017_02_06/o1_mf_annnn_TAG20170206T144835_d9jzonqf_.bkp tag=TAG20170206T144835 comment=NONE channel ORA_DISK_3: backup set complete, elapsed time: 00:00:03 channel ORA_DISK_4: finished piece 1 at 06-FEB-2017 14:48:39 piece handle=/rman/backup/OCM112/backupset/2017_02_06/o1_mf_annnn_TAG20170206T144835_d9jzoop8_.bkp tag=TAG20170206T144835 comment=NONE channel ORA_DISK_4: backup set complete, elapsed time: 00:00:02 channel ORA_DISK_5: finished piece 1 at 06-FEB-2017 14:48:39 piece handle=/rman/backup/OCM112/backupset/2017_02_06/o1_mf_annnn_TAG20170206T144835_d9jzooxq_.bkp tag=TAG20170206T144835 comment=NONE channel ORA_DISK_5: backup set complete, elapsed time: 00:00:02 channel ORA_DISK_6: finished piece 1 at 06-FEB-2017 14:48:39 piece handle=/rman/backup/OCM112/backupset/2017_02_06/o1_mf_annnn_TAG20170206T144835_d9jzopqx_.bkp tag=TAG20170206T144835 comment=NONE channel ORA_DISK_6: backup set complete, elapsed time: 00:00:01 Finished backup at 06-FEB-2017 14:48:39 Starting Control File and SPFILE Autobackup at 06-FEB-2017 14:48:39 piece handle=+FRA11G/ocm112/autobackup/2017_02_06/s_935246919.286.935246921 comment=NONE Finished Control File and SPFILE Autobackup at 06-FEB-2017 14:48:46 RMAN>
Worked very well as well. Now lets do the DataPump Test.
SQL> connect system/manager Connected. SQL> create directory rman as '/rman/backup'; Directory created. oracle@oel001:/home/oracle/ [OCM112] expdp system/manager directory=rman dumpfile=rman%U.dmp parallel=16 full=y Export: Release 11.2.0.4.0 - Production on Mon Feb 6 13:33:41 2017 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Automatic Storage Management, Oracle Label Security, OLAP, Data Mining and Real Application Testing options Starting "SYSTEM"."SYS_EXPORT_FULL_01": system/******** directory=rman dumpfile=rman%U.dmp parallel=16 full=y Estimate in progress using BLOCKS method... Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA Total estimation using BLOCKS method: 351.8 MB . . exported "SH"."COSTS":"COSTS_Q1_1999" 183.5 KB 5884 rows . . exported "SH"."COSTS":"COSTS_Q2_2000" 119.0 KB 3715 rows . . exported "SH"."COSTS":"COSTS_Q1_2001" 227.8 KB 7328 rows . . exported "SH"."COSTS":"COSTS_Q1_2000" 120.6 KB 3772 rows . . exported "SH"."CUSTOMERS" 9.853 MB 55500 rows . . exported "SH"."COSTS":"COSTS_Q3_1998" 131.1 KB 4129 rows . . exported "SH"."COSTS":"COSTS_Q2_1998" 79.52 KB 2397 rows . . exported "SH"."COSTS":"COSTS_Q2_1999" 132.5 KB 4179 rows . . exported "SH"."COSTS":"COSTS_Q1_1998" 139.5 KB 4411 rows . . exported "SH"."COSTS":"COSTS_Q3_2000" 151.4 KB 4798 rows . . exported "SH"."COSTS":"COSTS_Q3_2001" 234.4 KB 7545 rows ... ... ... Processing object type DATABASE_EXPORT/SCHEMA/PUBLIC_SYNONYM/SYNONYM Processing object type DATABASE_EXPORT/SCHEMA/SYNONYM Processing object type DATABASE_EXPORT/SCHEMA/TYPE/INC_TYPE Processing object type DATABASE_EXPORT/SCHEMA/TYPE/TYPE_SPEC Processing object type DATABASE_EXPORT/SCHEMA/TYPE/GRANT/OWNER_GRANT/OBJECT_GRANT Processing object type DATABASE_EXPORT/SYSTEM_PROCOBJACT/PRE_SYSTEM_ACTIONS/PROCACT_SYSTEM . . exported "ORDDATA"."ORDDCM_MAPPING_DOCS" 7.890 KB 1 rows Processing object type DATABASE_EXPORT/SYSTEM_PROCOBJACT/PROCOBJ Processing object type DATABASE_EXPORT/SYSTEM_PROCOBJACT/POST_SYSTEM_ACTIONS/PROCACT_SYSTEM Processing object type DATABASE_EXPORT/SCHEMA/PROCACT_SCHEMA Processing object type DATABASE_EXPORT/SCHEMA/XMLSCHEMA/XMLSCHEMA Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE Processing object type DATABASE_EXPORT/SCHEMA/TABLE/PRE_TABLE_ACTION Processing object type DATABASE_EXPORT/SCHEMA/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT Processing object type DATABASE_EXPORT/SCHEMA/TABLE/COMMENT Processing object type DATABASE_EXPORT/SCHEMA/PACKAGE/PACKAGE_SPEC Processing object type DATABASE_EXPORT/SCHEMA/PACKAGE/GRANT/OWNER_GRANT/OBJECT_GRANT Processing object type DATABASE_EXPORT/SCHEMA/FUNCTION/FUNCTION Processing object type DATABASE_EXPORT/SCHEMA/FUNCTION/GRANT/OWNER_GRANT/OBJECT_GRANT Processing object type DATABASE_EXPORT/SCHEMA/PROCEDURE/PROCEDURE Processing object type DATABASE_EXPORT/SCHEMA/PROCEDURE/GRANT/OWNER_GRANT/OBJECT_GRANT Processing object type DATABASE_EXPORT/SCHEMA/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC Processing object type DATABASE_EXPORT/SCHEMA/FUNCTION/ALTER_FUNCTION Processing object type DATABASE_EXPORT/SCHEMA/PROCEDURE/ALTER_PROCEDURE Processing object type DATABASE_EXPORT/SCHEMA/TABLE/INDEX/INDEX Processing object type DATABASE_EXPORT/SCHEMA/TABLE/INDEX/FUNCTIONAL_INDEX/INDEX Processing object type DATABASE_EXPORT/SCHEMA/TABLE/CONSTRAINT/CONSTRAINT Processing object type DATABASE_EXPORT/SCHEMA/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type DATABASE_EXPORT/SCHEMA/TABLE/INDEX/STATISTICS/FUNCTIONAL_INDEX/INDEX_STATISTICS Processing object type DATABASE_EXPORT/SCHEMA/VIEW/VIEW Processing object type DATABASE_EXPORT/SCHEMA/VIEW/GRANT/OWNER_GRANT/OBJECT_GRANT Processing object type DATABASE_EXPORT/SCHEMA/VIEW/COMMENT Processing object type DATABASE_EXPORT/SCHEMA/PACKAGE_BODIES/PACKAGE/PACKAGE_BODY Processing object type DATABASE_EXPORT/SCHEMA/TYPE/TYPE_BODY Processing object type DATABASE_EXPORT/SCHEMA/TABLE/CONSTRAINT/REF_CONSTRAINT Processing object type DATABASE_EXPORT/SCHEMA/TABLE/INDEX/BITMAP_INDEX/INDEX Processing object type DATABASE_EXPORT/SCHEMA/TABLE/INDEX/STATISTICS/BITMAP_INDEX/INDEX_STATISTICS Processing object type DATABASE_EXPORT/SCHEMA/TABLE/STATISTICS/TABLE_STATISTICS Processing object type DATABASE_EXPORT/SCHEMA/TABLE/INDEX/DOMAIN_INDEX/INDEX Processing object type DATABASE_EXPORT/SCHEMA/TABLE/POST_TABLE_ACTION Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TRIGGER Processing object type DATABASE_EXPORT/SCHEMA/VIEW/TRIGGER Processing object type DATABASE_EXPORT/SCHEMA/EVENT/TRIGGER Processing object type DATABASE_EXPORT/SCHEMA/MATERIALIZED_VIEW Processing object type DATABASE_EXPORT/SCHEMA/JOB Processing object type DATABASE_EXPORT/SCHEMA/DIMENSION Processing object type DATABASE_EXPORT/SCHEMA/TABLE/POST_INSTANCE/PROCACT_INSTANCE Processing object type DATABASE_EXPORT/SCHEMA/TABLE/POST_INSTANCE/PROCDEPOBJ Processing object type DATABASE_EXPORT/SCHEMA/POST_SCHEMA/PROCOBJ Processing object type DATABASE_EXPORT/SCHEMA/POST_SCHEMA/PROCACT_SCHEMA Processing object type DATABASE_EXPORT/AUDIT Master table "SYSTEM"."SYS_EXPORT_FULL_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_FULL_01 is: /rman/backup/rman01.dmp /rman/backup/rman02.dmp /rman/backup/rman03.dmp /rman/backup/rman04.dmp /rman/backup/rman05.dmp /rman/backup/rman06.dmp /rman/backup/rman07.dmp /rman/backup/rman08.dmp /rman/backup/rman09.dmp /rman/backup/rman10.dmp /rman/backup/rman11.dmp /rman/backup/rman12.dmp /rman/backup/rman13.dmp /rman/backup/rman14.dmp /rman/backup/rman15.dmp /rman/backup/rman16.dmp Job "SYSTEM"."SYS_EXPORT_FULL_01" completed at Mon Feb 6 13:37:32 2017 elapsed 0 00:03:44
Cool. That also worked perfectly.
I have repeated the same test with 12.1.0.2 also with no issues. In earlier releases I had issues with the filesystemio_options=SETALL, where I had to disable directio, and sometimes direct and aynch io. But it is not the case anymore with more resent OEL and Samba releases.
Conclusion
I would not use RMAN backups to CIFS as a permanent solution, but if you are running out of space on your NFS share, or maybe for migrations it is a good alternative.