{"id":9523,"date":"2016-12-08T20:21:09","date_gmt":"2016-12-08T19:21:09","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/"},"modified":"2023-06-08T16:15:20","modified_gmt":"2023-06-08T14:15:20","slug":"enterprisedb-backup-and-recovery-tool-bart","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/","title":{"rendered":"EnterpriseDB Backup and Recovery Tool (BART)"},"content":{"rendered":"<p><strong>By Mouhamadou Diaw<\/strong><\/p>\n<p>Many tools are proposed for backup and recovery operation of a PostgreSQL database. EnterpriseDB has developed a product named BART (Backup and Recovery Tool). Use of this product needs a subscription but you can download a trial version for test purpose.<br \/>\nIn this blog we are using BART with PostgreSQL 9.6.1. BART allows backing up over the net and can centralize backups of many PostgreSQL servers.<br \/>\nWe are using the following configuration:<br \/>\n<b>Bart Host<\/b>: pgserver.localdomain<br \/>\n<b>PostgreSQL server 1<\/b>: pgserve1.localdomain<br \/>\n<b>PostgreSQL server 2<\/b>: pgserve2.localdomain<br \/>\nWe suppose that there are clusters running on pgserver1 and pgserver2 and the archive mode is activated for both clusters<br \/>\nWhat is needed on the server hosting BART (i.e. pgserver in our case)?<br \/>\n1. We need to install rpm package using yum or rpm command<br \/>\n2. We need PostgreSQL binaries installed. Note that the version of the binaries should be at least the same than those installed on the servers to be backed up. In our case as we are using 9.6.1 for databases, binaries should be 9.6.1 or higher. Note that we don\u2019t need any cluster running on pgserver.<br \/>\nFor the package installation, we are using yum.<br \/>\n<code><br \/>\n[root@pgserver 96]# yum localinstall edb-bart-1.1.0-1.rhel7.x86_64.rpm<br \/>\n<\/code><br \/>\nBy default BART is installed in \/usr\/edb-bart-1.1.<br \/>\n<code><br \/>\n[root@pgserver 96]# cd \/usr\/edb-bart-1.1\/<br \/>\n[root@pgserver edb-bart-1.1]# ls<br \/>\nbart_license.txt  bin  etc<br \/>\n[root@pgserver edb-bart-1.1]# ls -l<br \/>\ntotal 16<br \/>\n-rw-r--r--. 1 root root 15272 Jul  3  2015 bart_license.txt<br \/>\ndrwxr-xr-x. 2 root root    17 Dec  6 14:15 bin<br \/>\ndrwxr-xr-x. 2 root root    21 Dec  6 14:15 etc<br \/>\n[root@pgserver edb-bart-1.1]#<br \/>\n<\/code><br \/>\nBefore configuring the BART configuration file, the ssh connectivity should be configured between servers for the Linux user used for backups, here we are using postgres.<br \/>\n<code><br \/>\n[postgres@pgserver ~]$ ssh-keygen -t rsa<br \/>\nGenerating public\/private rsa key pair.<br \/>\nEnter file in which to save the key (\/home\/postgres\/.ssh\/id_rsa):<br \/>\nEnter passphrase (empty for no passphrase):<br \/>\nEnter same passphrase again:<br \/>\nYour identification has been saved in \/home\/postgres\/.ssh\/id_rsa.<br \/>\nYour public key has been saved in \/home\/postgres\/.ssh\/id_rsa.pub.<br \/>\nThe key fingerprint is:<br \/>\nb9:fb:1a:90:c2:76:73:6e:fe:28:38:cf:42:52:7a:81 postgres@pgserver.localdomain<br \/>\nThe key's randomart image is:<br \/>\n+--[ RSA 2048]----+<br \/>\n|                 |<br \/>\n|                 |<br \/>\n|   .             |<br \/>\n|  E.o  . .       |<br \/>\n|   o+.= S        |<br \/>\n|  o.oo = .       |<br \/>\n|   + .  =        |<br \/>\n|    +..o +       |<br \/>\n|     +o.=+o      |<br \/>\n+-----------------+<br \/>\n[postgres@pgserver ~]$ ssh-copy-id -i .ssh\/id_rsa.pub pgserver1<br \/>\n\/usr\/bin\/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed<br \/>\n\/usr\/bin\/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys<br \/>\npostgres@pgserver1's password:<br \/>\nNumber of key(s) added: 1<br \/>\nNow try logging into the machine, with:   \"ssh 'pgserver1'\"<br \/>\nand check to make sure that only the key(s) you wanted were added.<br \/>\n[postgres@pgserver ~]$ ssh-copy-id -i .ssh\/id_rsa.pub pgserver2<br \/>\n\/usr\/bin\/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed<br \/>\n\/usr\/bin\/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys<br \/>\npostgres@pgserver2's password:<br \/>\nNumber of key(s) added: 1<br \/>\nNow try logging into the machine, with:   \"ssh 'pgserver2'\"<br \/>\nand check to make sure that only the key(s) you wanted were added.<br \/>\n[postgres@pgserver ~]$<br \/>\n<\/code><br \/>\n<code><br \/>\n[postgres@pgserver ~]$ ssh pgserver1 date<br \/>\nTue Dec  6 14:24:35 CET 2016<br \/>\n[postgres@pgserver ~]$ ssh pgserver2 date<br \/>\nTue Dec  6 14:24:40 CET 2016<br \/>\n[postgres@pgserver ~]$<br \/>\n<\/code><br \/>\nWe also need a super user created on each cluster to be backed up<br \/>\n<code><br \/>\npostgres=# CREATE ROLE backupuser WITH LOGIN SUPERUSER PASSWORD 'root';<br \/>\nCREATE ROLE<br \/>\npostgres=#<br \/>\n<\/code><br \/>\nAnd we will create a .pgpass for this user to be able to connect without being asked for password<br \/>\n<code><br \/>\n[postgres@pgserver1 ~]$  echo \"*:5432:*:backupuser:root\" &gt;&gt; ~\/.pgpass<br \/>\n[postgres@pgserver1 ~]$ chmod 600 .pgpass<\/code><\/p>\n<p><code><br \/>\n<\/code><\/p>\n<p><code>[postgres@pgserver2 ~]$ echo \"*:5432:*:backupuser:root\" &gt;&gt; ~\/.pgpass<br \/>\n[postgres@pgserver2 ~]$ chmod 600 .pgpass<br \/>\n<\/code><br \/>\nThe configuration file is located under $BART_INSTALL_DIRECTORY\/etc. It must contain a part for BART itself and a part for each server to be backed up. Below an example of our bart.cfg<br \/>\n<code><br \/>\n[root@pgserver etc]# pwd<br \/>\n\/usr\/edb-bart-1.1\/etc<br \/>\n<\/code><br \/>\n<code><br \/>\n[root@pgserver etc]# cat bart.cfg | grep -v ^#<br \/>\n[BART]<br \/>\nbart-host= postgres@192.168.56.35<br \/>\nbackup_path = \/u01\/app\/backup<br \/>\npg_basebackup_path = \/u01\/app\/PostgreSQL\/9.6\/bin\/pg_basebackup<br \/>\nlogfile = \/tmp\/bart.log<br \/>\nxlog-method = fetch<br \/>\nretention_policy = 1 DAYS<br \/>\nwal_compression = enabled<\/code><\/p>\n<p><code><code><\/code><\/code><\/p>\n<p>[PGSERVER1]<br \/>\nhost = 192.168.56.36<br \/>\nport = 5432<br \/>\nuser = backupuser<br \/>\nbackup-name = PGSERVER1_%year-%month-%dayT%hour:%minute<br \/>\nremote-host = postgres@pgserver1<br \/>\ndescription = &#8220;Postgres server1&#8221;<\/p>\n<p><code><br \/>\n<\/code><\/p>\n<p><code>[PGSERSERVER2]<br \/>\nhost = 192.168.56.37<br \/>\nport = 5432<br \/>\nuser = backupuser<br \/>\nbackup-name = PGSERVER2_%year-%month-%dayT%hour:%minute<br \/>\nremote-host = postgres@pgserver2<br \/>\ndescription = \"Postgres server2\"<br \/>\n[root@pgserver etc]#<br \/>\n<\/code><br \/>\nThe backup_path \/u01\/app\/backup is only needed on the BART host (pgserver) as backup will be done over the net. But on both servers pgserver1 and pgserver2 the <span style=\"color: #ea6d14\">pg_hba.conf<\/span> need to be updated to allow connection from the BART host. Below two lines we add<br \/>\n<code><br \/>\n[postgres@pgserver1 data]$  grep 192.168.56.0 pg_hba.conf<br \/>\nhost    all             all             192.168.56.0\/24         md5<br \/>\nhost    replication     backupuser      192.168.56.0\/24         md5<br \/>\n[postgres@pgserver1 data]$<br \/>\n<\/code><br \/>\n<code><br \/>\n[postgres@pgserver2 data]$  grep 192.168.56.0 pg_hba.conf<br \/>\nhost    all             all             192.168.56.0\/24         md5<br \/>\nhost    replication     backupuser      192.168.56.0\/24         md5<br \/>\n[postgres@pgserver2 data]$<br \/>\n<\/code><br \/>\nNow we can initialize the catalog, first for pgserver1 and after for pgserver2 (note this can be done for both servers in a single command)<br \/>\n<code><br \/>\n[postgres@pgserver bin]$ .\/bart -d -c \/usr\/edb-bart-1.1\/etc\/bart.cfg init -s PGSERVER1 -o<br \/>\nDEBUG: Server: Global, Now: 2016-12-06 15:51:04 CET, RetentionWindow: 86400 (secs) ==&gt; 24 hour(s)<br \/>\nINFO:  setting archive_command for server 'pgserver1'<br \/>\nDEBUG: SHOW archive_command: test ! -f \/u01\/app\/archive\/%f &amp;&amp; cp %p \/u01\/app\/archive\/%f<br \/>\nDEBUG: archive command set to: ALTER SYSTEM SET archive_command TO 'scp %p postgres@192.168.56.35:\/u01\/app\/backup\/pgserver1\/archived_wals\/%f'<br \/>\nWARNING: archive_command is set. server restart is required<br \/>\n[postgres@pgserver bin]$<br \/>\n<\/code><br \/>\n<code><br \/>\n[postgres@pgserver bin]$ .\/bart -d -c \/usr\/edb-bart-1.1\/etc\/bart.cfg init -s PGSERVER2 -o<br \/>\nDEBUG: Server: Global, Now: 2016-12-06 19:01:08 CET, RetentionWindow: 86400 (secs) ==&gt; 24 hour(s)<br \/>\nINFO:  setting archive_command for server 'pgserver2'<br \/>\nDEBUG: SHOW archive_command: test ! -f \/u01\/app\/archive\/%f &amp;&amp; cp %p \/u01\/app\/archive\/%f<br \/>\nDEBUG: archive command set to: ALTER SYSTEM SET archive_command TO 'scp %p postgres@192.168.56.35:\/u01\/app\/backup\/pgserver2\/archived_wals\/%f'<br \/>\nWARNING: archive_command is set. server restart is required<br \/>\n[postgres@pgserver bin]$<br \/>\n<\/code><br \/>\nNow it\u2019s time to launch a backup<br \/>\n<code><br \/>\n[postgres@pgserver bin]$ .\/bart  -c \/usr\/edb-bart-1.1\/etc\/bart.cfg BACKUP -s PGSERVER1<\/code><\/p>\n<p><code><code><\/code><\/code><\/p>\n<p>INFO: creating backup for server &#8216;pgserver1&#8217;<br \/>\nINFO: backup identifier: &#8216;1481037296469&#8217;<br \/>\n39433\/39433 kB (100%), 1\/1 tablespace<\/p>\n<p><code><code><\/code><\/code><\/p>\n<p>INFO: backup completed successfully<br \/>\nINFO: backup checksum: fb105a542d8856e9d5bd95410337463f of base.tar<br \/>\nINFO:<br \/>\nBACKUP DETAILS:<br \/>\nBACKUP STATUS: active<br \/>\nBACKUP IDENTIFIER: 1481037296469<br \/>\nBACKUP NAME: PGSERVER1_2016-12-06T16:14<br \/>\nBACKUP LOCATION: \/u01\/app\/backup\/pgserver1\/1481037296469<br \/>\nBACKUP SIZE: 38.51 MB<br \/>\nBACKUP FORMAT: tar<br \/>\nXLOG METHOD: fetch<br \/>\nBACKUP CHECKSUM(s): 1<br \/>\nChkSum File<br \/>\nfb105a542d8856e9d5bd95410337463f base.tar<\/p>\n<p><code><code><\/code><\/code><\/p>\n<p>TABLESPACE(s): 0<br \/>\nSTART WAL LOCATION: 000000010000000000000008<br \/>\nBACKUP METHOD: streamed<br \/>\nBACKUP FROM: master<br \/>\nSTART TIME: 2016-12-06 16:14:56 CET<br \/>\nSTOP TIME: 2016-12-06 16:14:58 CET<br \/>\nTOTAL DURATION: 2 sec(s)<\/p>\n<p><code><br \/>\n<\/code><\/p>\n<p><code>[postgres@pgserver bin]$<br \/>\n<\/code><br \/>\n<code><br \/>\npostgres@pgserver bin]$ .\/bart  -c \/usr\/edb-bart-1.1\/etc\/bart.cfg BACKUP -s PGSERVER2<\/code><\/p>\n<p><code><code><\/code><\/code><\/p>\n<p>INFO: creating backup for server &#8216;pgserver2&#8217;<br \/>\nINFO: backup identifier: &#8216;1481047475191&#8217;<br \/>\n39216\/39216 kB (100%), 1\/1 tablespace<\/p>\n<p><code><code><\/code><\/code><\/p>\n<p>INFO: backup completed successfully<br \/>\nINFO: backup checksum: 052d82f3df1def72e9962cdef965fe8f of base.tar<br \/>\nINFO:<br \/>\nBACKUP DETAILS:<br \/>\nBACKUP STATUS: active<br \/>\nBACKUP IDENTIFIER: 1481047475191<br \/>\nBACKUP NAME: PGSERVER2_2016-12-06T19:04<br \/>\nBACKUP LOCATION: \/u01\/app\/backup\/pgserver2\/1481047475191<br \/>\nBACKUP SIZE: 38.30 MB<br \/>\nBACKUP FORMAT: tar<br \/>\nXLOG METHOD: fetch<br \/>\nBACKUP CHECKSUM(s): 1<br \/>\nChkSum File<br \/>\n052d82f3df1def72e9962cdef965fe8f base.tar<\/p>\n<p><code><code><\/code><\/code><\/p>\n<p>TABLESPACE(s): 0<br \/>\nSTART WAL LOCATION: 000000010000000000000003<br \/>\nBACKUP METHOD: streamed<br \/>\nBACKUP FROM: master<br \/>\nSTART TIME: 2016-12-06 19:04:36 CET<br \/>\nSTOP TIME: 2016-12-06 19:04:38 CET<br \/>\nTOTAL DURATION: 2 sec(s)<\/p>\n<p><code><br \/>\n<\/code><\/p>\n<p><code>[postgres@pgserver bin]$<br \/>\n<\/code><br \/>\nWe can list backups for pgserver2 for example<br \/>\n<code><br \/>\n[postgres@pgserver bin]$ .\/bart  SHOW-BACKUPS -s pgserver2<br \/>\nSERVER NAME   BACKUP ID       BACKUP TIME               BACKUP SIZE   WAL(s) SIZE   WAL FILES   STATUS<\/code><\/p>\n<p><code><code><\/code><\/code><\/p>\n<p>pgserver2 1481047475191 2016-12-06 19:04:38 CET 38.30 MB 26.54 kB 1 active<\/p>\n<p><code><br \/>\n<\/code><\/p>\n<p><code>[postgres@pgserver bin]$<br \/>\n<\/code><\/p>\n<p>It\u2019s good to have a backup, but it is better to know how to restore. And now we are going to simulate a crash of pgserver2 and then do a restore. First let\u2019s create a database and a table.<br \/>\n<code><br \/>\n[postgres@pgserver2 data]$ psql<br \/>\nPassword:<br \/>\npsql.bin (9.6.1)<br \/>\nType \"help\" for help.<br \/>\npostgres=# create database sales;<br \/>\nCREATE DATABASE<br \/>\npostgres=# c sales<br \/>\nYou are now connected to database \"sales\" as user \"postgres\".<br \/>\nsales=# create table article(id int);<br \/>\nCREATE TABLE<br \/>\nsales=# insert into article values (1);<br \/>\nINSERT 0 1<br \/>\nsales=# table article;<br \/>\nid<br \/>\n----<br \/>\n1<br \/>\n(1 row)<br \/>\nsales=#<br \/>\n<\/code><br \/>\nAnd then let\u2019s do a backup<br \/>\n<code><br \/>\n[postgres@pgserver bin]$ .\/bart  -c \/usr\/edb-bart-1.1\/etc\/bart.cfg BACKUP -s PGSERVER2<br \/>\nINFO:  creating backup for server 'pgserver2'<br \/>\nINFO:  backup identifier: '1481051725125'<br \/>\n46814\/46814 kB (100%), 1\/1 tablespace<br \/>\nINFO:  backup completed successfully<br \/>\nINFO:  backup checksum: 19069965fa53444b31459f6d984682d0 of base.tar<br \/>\nINFO:<br \/>\nBACKUP DETAILS:<br \/>\nBACKUP STATUS: active<br \/>\nBACKUP IDENTIFIER: 1481051725125<br \/>\nBACKUP NAME: PGSERVER2_2016-12-06T20:15<br \/>\nBACKUP LOCATION: \/u01\/app\/backup\/pgserver2\/1481051725125<br \/>\nBACKUP SIZE: 45.72 MB<br \/>\nBACKUP FORMAT: tar<br \/>\nXLOG METHOD: fetch<br \/>\nBACKUP CHECKSUM(s): 1<br \/>\nChkSum                             File<br \/>\n19069965fa53444b31459f6d984682d0   base.tar<br \/>\nTABLESPACE(s): 0<br \/>\nSTART WAL LOCATION: 000000010000000000000005<br \/>\nBACKUP METHOD: streamed<br \/>\nBACKUP FROM: master<br \/>\nSTART TIME: 2016-12-06 20:15:28 CET<br \/>\nSTOP TIME: 2016-12-06 20:15:28 CET<br \/>\nTOTAL DURATION: 0 sec(s)<br \/>\n<\/code><br \/>\n<code><br \/>\n[postgres@pgserver bin]$ .\/bart  SHOW-BACKUPS -s PGSERVER2<br \/>\nSERVER NAME   BACKUP ID       BACKUP TIME               BACKUP SIZE   WAL(s) SIZE   WAL FILES   STATUS<br \/>\npgserver2     1481051725125   2016-12-06 20:15:28 CET   45.72 MB      16.00 MB      1           active<br \/>\npgserver2     1481047475191   2016-12-06 19:04:38 CET   38.30 MB      16.03 MB      2           active<br \/>\n[postgres@pgserver bin]$<br \/>\n<\/code><br \/>\nNow let\u2019s crash our cluster<br \/>\n<code><br \/>\n[root@pgserver2 9.6]# pwd<br \/>\n\/u01\/app\/PostgreSQL\/9.6<br \/>\n[root@pgserver2 9.6]# mv data\/ data_crash<br \/>\n[root@pgserver2 9.6]#<br \/>\n<\/code><br \/>\n<code><br \/>\n[postgres@pgserver2 9.6]$ pg_ctl start<br \/>\npg_ctl: directory \"\/u01\/app\/PostgreSQL\/9.6\/data\" does not exist<br \/>\n[postgres@pgserver2 9.6]$<br \/>\n<\/code><br \/>\nFor the restore, we have to provide the backup id and the path to restore. This path must exist.<br \/>\n<code><br \/>\n[postgres@pgserver bin]$ .\/bart  RESTORE -s pgserver2 -i 1481047475191 -p \/u01\/app\/PostgreSQL\/9.6\/data<br \/>\nINFO:  restoring backup '1481047475191' of server 'pgserver2'<br \/>\nINFO:  restoring backup to postgres@pgserver2:\/u01\/app\/PostgreSQL\/9.6\/data<br \/>\nINFO:  base backup restored<br \/>\nINFO:  copying WAL file(s) to postgres@pgserver2:\/u01\/app\/PostgreSQL\/9.6\/data\/archived_wals<br \/>\nINFO:  archiving is disabled<br \/>\n[postgres@pgserver bin]$<br \/>\n<\/code><br \/>\nBefore starting cluster, let\u2019s create a recovery.conf file<br \/>\n<code><br \/>\n[postgres@pgserver2 data]$ cat recovery.conf<br \/>\nrestore_command='cp \/u01\/app\/PostgreSQL\/9.6\/data\/archived_wals\/%f %p'<br \/>\n[postgres@pgserver2 data]$<br \/>\n<\/code><br \/>\nAnd then let\u2019s start the cluster<br \/>\n<code><br \/>\n[postgres@pgserver2 data]$ pg_ctl start<br \/>\nserver starting<br \/>\n[postgres@pgserver2 data]$ 2016-12-06 20:33:01 CET LOG:  redirecting log output to logging collector process<br \/>\n2016-12-06 20:33:01 CET HINT:  Future log output will appear in directory \"pg_log\".<br \/>\n<\/code><br \/>\nAfter the restore finished, the recovery.conf is automatically renamed to recovery.done because PostgreSQL will go into recovery mode again after a restart otherwise.<br \/>\n<code><br \/>\n[postgres@pgserver2 data]$ cat recovery.done<br \/>\nrestore_command='cp \/u01\/app\/PostgreSQL\/9.6\/data\/archived_wals\/%f %p'<br \/>\n[postgres@pgserver2 data]$<br \/>\n<\/code><br \/>\nWhile connecting we can verify our data<br \/>\n<code><br \/>\n[postgres@pgserver2 data]$ psql<br \/>\nPassword:<br \/>\npsql.bin (9.6.1)<br \/>\nType \"help\" for help.<br \/>\npostgres=# c sales<br \/>\nYou are now connected to database \"sales\" as user \"postgres\".<br \/>\nsales=# table article<br \/>\nsales-# ;<br \/>\nid<br \/>\n----<br \/>\n1<br \/>\n(1 row)<br \/>\nsales=#<br \/>\n<\/code><br \/>\nIn this blog we have seen how to configure EDB BART, how to use it for backup and recovery.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Mouhamadou Diaw Many tools are proposed for backup and recovery operation of a PostgreSQL database. EnterpriseDB has developed a product named BART (Backup and Recovery Tool). Use of this product needs a subscription but you can download a trial version for test purpose. In this blog we are using BART with PostgreSQL 9.6.1. BART [&hellip;]<\/p>\n","protected":false},"author":27,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[1003,1004,713,1002],"type_dbi":[],"class_list":["post-9523","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","tag-bart","tag-edb","tag-enterprisedb","tag-postgresql-9-6"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>EnterpriseDB Backup and Recovery Tool (BART) - dbi Blog<\/title>\n<meta name=\"description\" content=\"PostgresSQL,Backup and recovery Tool, BART\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"EnterpriseDB Backup and Recovery Tool (BART)\" \/>\n<meta property=\"og:description\" content=\"PostgresSQL,Backup and recovery Tool, BART\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-12-08T19:21:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-08T14:15:20+00:00\" \/>\n<meta name=\"author\" content=\"Oracle Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oracle Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"EnterpriseDB Backup and Recovery Tool (BART)\",\"datePublished\":\"2016-12-08T19:21:09+00:00\",\"dateModified\":\"2023-06-08T14:15:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/\"},\"wordCount\":750,\"commentCount\":0,\"keywords\":[\"Bart\",\"edb\",\"enterprisedb\",\"PostgreSQL 9.6\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/\",\"name\":\"EnterpriseDB Backup and Recovery Tool (BART) - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2016-12-08T19:21:09+00:00\",\"dateModified\":\"2023-06-08T14:15:20+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"description\":\"PostgresSQL,Backup and recovery Tool, BART\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"EnterpriseDB Backup and Recovery Tool (BART)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\",\"name\":\"Oracle Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"caption\":\"Oracle Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"EnterpriseDB Backup and Recovery Tool (BART) - dbi Blog","description":"PostgresSQL,Backup and recovery Tool, BART","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/","og_locale":"en_US","og_type":"article","og_title":"EnterpriseDB Backup and Recovery Tool (BART)","og_description":"PostgresSQL,Backup and recovery Tool, BART","og_url":"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/","og_site_name":"dbi Blog","article_published_time":"2016-12-08T19:21:09+00:00","article_modified_time":"2023-06-08T14:15:20+00:00","author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"EnterpriseDB Backup and Recovery Tool (BART)","datePublished":"2016-12-08T19:21:09+00:00","dateModified":"2023-06-08T14:15:20+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/"},"wordCount":750,"commentCount":0,"keywords":["Bart","edb","enterprisedb","PostgreSQL 9.6"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/","url":"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/","name":"EnterpriseDB Backup and Recovery Tool (BART) - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2016-12-08T19:21:09+00:00","dateModified":"2023-06-08T14:15:20+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"description":"PostgresSQL,Backup and recovery Tool, BART","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"EnterpriseDB Backup and Recovery Tool (BART)"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee","name":"Oracle Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","caption":"Oracle Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/9523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=9523"}],"version-history":[{"count":1,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/9523\/revisions"}],"predecessor-version":[{"id":25687,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/9523\/revisions\/25687"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=9523"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=9523"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=9523"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=9523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}