{"id":9844,"date":"2017-03-13T11:37:42","date_gmt":"2017-03-13T10:37:42","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/"},"modified":"2017-03-13T11:37:42","modified_gmt":"2017-03-13T10:37:42","slug":"edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/","title":{"rendered":"EDB BART 2.0 &#8211; How to upgrade and block level incremental backups"},"content":{"rendered":"<p>We already have some posts on how you can use EDB BART to backup and restore your PostgreSQL instances from one central server (<a href=\"https:\/\/www.dbi-services.com\/blog\/enterprisedb-backup-and-recovery-tool-bart\/\" target=\"_blank\" rel=\"noopener\">EnterpriseDB Backup and Recovery Tool (BART)<\/a>, <a href=\"https:\/\/www.dbi-services.com\/blog\/getting-started-with-postgres-plus-advanced-server-2-setting-up-a-backup-and-recovery-server\/\" target=\"_blank\" rel=\"noopener\">getting started with postgres plus advanced server (2) \u2013 setting up a backup and recovery server<\/a>). The current version you can download from the <a href=\"https:\/\/www.enterprisedb.com\/software-downloads-postgres#platform\" target=\"_blank\" rel=\"noopener\">EnterpriseDB website is 1.1<\/a> but version 2.0 is in beta and <a href=\"https:\/\/www.enterprisedb.com\/beta-programs\" target=\"_blank\" rel=\"noopener\">can be tested already<\/a>. The main new feature is that BART 2.0 allows you to perform block level incremental backups of your PostgreSQL instances starting with PostgreSQL 9.5. In this post we&#8217;ll be looking at that feature and we&#8217;ll upgrade from BART 1.1. Lets go &#8230;<\/p>\n<p><!--more--><\/p>\n<p>In my test environment I have BART 1.1 configured and working against an EDB Postgres Plus 9.6 instance:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">postgres@edbbart:\/home\/postgres\/ [pg950] bart -v\nbart (EnterpriseDB) 1.1.1\npostgres@edbbart:\/home\/postgres\/ [pg950] bart SHOW-BACKUPS -s pg3\n SERVER NAME   BACKUP ID       BACKUP TIME               BACKUP SIZE   WAL(s) SIZE   WAL FILES   STATUS  \n                                                                                                         \n pg3           1489078376562   2017-03-09 17:53:01 CET   61.93 MB      16.00 MB      1           active  \n<\/pre>\n<p>What do I need to do to upgrade to BART 2.0? Quite easy: Either you have access to the <a href=\"http:\/\/yum.enterprisedb.com\/\" target=\"_blank\" rel=\"noopener\">EDB yum repositories<\/a> (this requires a username and a password) or just install the rpm you which can download <a href=\"http:\/\/yum.enterprisedb.com\/tools-testing\/redhat\/rhel-7-x86_64\/repoview\/\" target=\"_blank\" rel=\"noopener\">here<\/a>. I will install BART 2.0 from the EDB repositories:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">postgres@edbbart:\/home\/postgres\/ [pg950] sudo yum install edb-bart20\n<\/pre>\n<p>That&#8217;s it. The first thing to highlight is that the location where BART gets installed changed. Starting with version 2.0 BART will be installed under &#8220;\/usr\/edb\/&#8221; instead of &#8220;\/usr\/edb-bart-***&#8221;.<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">postgres@edbbart:\/home\/postgres\/ [pg950] ls -la \/usr\/edb\/bart2.0\/\ntotal 16\ndrwxr-xr-x. 5 root root    59 Mar  9 17:56 .\ndrwxr-xr-x. 4 root root    32 Mar  9 17:56 ..\n-rw-r--r--. 1 root root 15272 Feb 21 10:00 bart_license.txt\ndrwxr-xr-x. 2 root root    36 Mar  9 17:56 bin\ndrwxr-xr-x. 2 root root    21 Mar  9 17:56 etc\ndrwxr-xr-x. 2 root root    56 Mar  9 17:56 lib\n<\/pre>\n<p>We always recommend to work with links to point to you current BART installation to make life more easy. If you followed that rule all you have to do is:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">postgres@edbbart:\/home\/postgres\/ [pg950] sudo rm \/usr\/edb-bart\npostgres@edbbart:\/home\/postgres\/ [pg950] sudo ln -s \/usr\/edb\/bart2.0\/ \/usr\/edb-bart\npostgres@edbbart:\/home\/postgres\/ [pg950] bart -v\nbart (EnterpriseDB) 2.0.0\n<\/pre>\n<p>&#8230; and you point to the new binaries. For sure you want to copy over your BART 1.1 configuration to the new location:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">postgres@edbbart:\/home\/postgres\/ [pg950] sudo cp \/usr\/edb-bart-1.1\/etc\/bart.cfg \/usr\/edb\/bart2.0\/etc\/\n<\/pre>\n<p>From now on you are working with BART 2.0:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">postgres@edbbart:\/home\/postgres\/ [pg950] bart show-servers\nSERVER NAME         : pg3\nBACKUP FRIENDLY NAME: PG3_%year-%month-%dayT%hour:%minute\nHOST NAME           : 192.168.22.37\nUSER NAME           : backupuser\nPORT                : 4445\nREMOTE HOST         : postgres@192.168.22.37\nRETENTION POLICY    : 2016-12-09 18:02:23 CET\nDISK UTILIZATION    : 189.93 MB\nNUMBER OF ARCHIVES  : 8\nARCHIVE PATH        : \/u90\/pgdata\/backup\/pg3\/archived_wals\nARCHIVE COMMAND     : scp %p postgres@edbbart:\/u90\/pgdata\/backup\/pg3\/archived_wals\/%f\nXLOG METHOD         : fetch\nWAL COMPRESSION     : enabled\nTABLESPACE PATH(s)  : \nINCREMENTAL BACKUP  : DISABLED      &lt;============================ NEW\nDESCRIPTION         : \"postgres PG3\"\n<\/pre>\n<p>You&#8217;ll immediately notice that there is a new line in the output: &#8220;INCREMENTAL BACKUP&#8221;. Lets keep that for later. What I am most interested in right now is: Can I still backup my PostgreSQL instances with the new version of BART:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">postgres@edbbart:\/home\/postgres\/ [pg950] bart backup -s pg3\nINFO:  creating backup for server 'pg3'\nINFO:  backup identifier: '1489078978132'\n63413\/63413 kB (100%), 1\/1 tablespace\n\nINFO:  backup completed successfully\nWARNING: log_timezone is not set in the server, using the local timezone information\nINFO:  backup checksum: d318744e42819f76b137edf197a0b59b of base.tar\nINFO:  \nBACKUP DETAILS:\nBACKUP STATUS: active\nBACKUP IDENTIFIER: 1489078978132\nBACKUP NAME: PG3_2017-03-09T18:02\nBACKUP PARENT: none\nBACKUP LOCATION: \/u90\/pgdata\/backup\/pg3\/1489078978132\nBACKUP SIZE: 61.93 MB\nBACKUP FORMAT: tar\nXLOG METHOD: fetch\nBACKUP CHECKSUM(s): 1\n ChkSum                             File      \n d318744e42819f76b137edf197a0b59b   base.tar  \nTABLESPACE(s): 0\nSTART WAL LOCATION: 00000001000000000000000D\nBACKUP METHOD: streamed\nBACKUP FROM: master\nSTART TIME: 2017-03-09 18:03:00 CET\nSTOP TIME: 2017-03-09 18:02:59 CET\nTOTAL DURATION: 0 sec(s)\n<\/pre>\n<p>Looks fine. I did not need to change anything in the configuration file and can just start using BART 2.0. So, now I have two backups:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">postgres@edbbart:\/home\/postgres\/ [pg950] bart show-backups -s PG3\n SERVER NAME   BACKUP ID       BACKUP NAME            PARENT ID   BACKUP TIME               BACKUP SIZE   WAL(s) SIZE   WAL FILES   STATUS  \n                                                                                                                                            \n pg3           1489078978132   PG3_2017-03-09T18:02   none        2017-03-09 18:02:59 CET   61.93 MB      16.00 MB      1           active  \n pg3           1489078376562   PG3_2017-03-09T17:52   none        2017-03-09 17:53:01 CET   61.93 MB      32.00 MB      2           active  \n<\/pre>\n<p>Time to do my first incremental backup. What do I need to do? First of all we need to disable wal compression as this is not supported with incremental backups:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">postgres@edbbart:\/home\/postgres\/ [pg950] cat \/usr\/edb-bart\/etc\/bart.cfg | grep -i COMPRE\nwal_compression = disabled\n<\/pre>\n<p>The next thing to do is obviously to enable incremental backups:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">postgres@edbbart:\/home\/postgres\/ [pg950] cat \/usr\/edb-bart\/etc\/bart.cfg | grep increme\nallow_incremental_backups = enabled\n<\/pre>\n<p>My complete BART configuration then looks like this:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">[BART]\nbart-host = postgres@edbbart\nbackup_path = \/u90\/pgdata\/backup\npg_basebackup_path = \/usr\/edb\/as9.6\/bin\/pg_basebackup\nxlog-method = fetch\nretention_policy = 3 MONTHS\nlogfile = \/var\/log\/bart.logs\n\n[PG3]\nhost = 192.168.22.37\nport = 4445\nuser = backupuser\nbackup-name = PG3_%year-%month-%dayT%hour:%minute\nremote-host = postgres@192.168.22.37\ndescription = \"postgres PG3\"\nwal_compression = disabled\nallow_incremental_backups = enabled\n<\/pre>\n<p>Make sure that the show-servers command displays what you expect:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1; highlight: [14,16]\">postgres@edbbart:\/home\/postgres\/ [pg950] bart show-servers\nSERVER NAME         : pg3\nBACKUP FRIENDLY NAME: PG3_%year-%month-%dayT%hour:%minute\nHOST NAME           : 192.168.22.37\nUSER NAME           : backupuser\nPORT                : 4445\nREMOTE HOST         : postgres@192.168.22.37\nRETENTION POLICY    : 2016-12-10 16:53:05 CET\nDISK UTILIZATION    : 283.86 MB\nNUMBER OF ARCHIVES  : 10\nARCHIVE PATH        : \/u90\/pgdata\/backup\/pg3\/archived_wals\nARCHIVE COMMAND     : scp %p postgres@edbbart:\/u90\/pgdata\/backup\/pg3\/archived_wals\/%f\nXLOG METHOD         : fetch\nWAL COMPRESSION     : disabled\nTABLESPACE PATH(s)  : \nINCREMENTAL BACKUP  : ENABLED\nDESCRIPTION         : \"postgres PG3\"\n<\/pre>\n<p>With BART 2.0 there is a new component called the &#8220;WAL scanner&#8221;. The binary is at the same location as BART itself:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">postgres@edbbart:\/home\/postgres\/ [pg950] ls -la \/usr\/edb\/bart2.0\/bin\/bart-scanner \n-rwxr-xr-x. 1 root root 603832 Feb 21 10:01 \/usr\/edb\/bart2.0\/bin\/bart-scanner\n<\/pre>\n<p>What does it do? The WAL scanner (as the name implies) scans the WALs that are archived from your PostgreSQL instances to the BART host for changes and then writes a so called &#8220;modified block map (MBM)&#8221; (this is the reason why wal compression is not supported). As this should happen as soon as the WALs arrive on the BART host the WAL scanner should run all the time. To start it in daemon mode:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">echo $PATH \/ include bart bin\npostgres@edbbart:\/home\/postgres\/ [pg950] \/usr\/edb-bart\/bin\/bart-scanner --daemon\npostgres@edbbart:\/home\/postgres\/ [pg950] ps -ef | grep scanner\npostgres  2473     1  0 16:58 ?        00:00:00 \/usr\/edb-bart\/bin\/bart-scanner --daemon\npostgres  2474  2473  0 16:58 ?        00:00:00 \/usr\/edb-bart\/bin\/bart-scanner --daemon\npostgres  2476  2185  0 16:58 pts\/0    00:00:00 grep --color=auto scanner\n<\/pre>\n<p>This will fork one wal scanner process for each PostgreSQL instance configured for incremental backups.<\/p>\n<p>Now we need a new full backup (the scanner did not run when we did the previous backups and the previous WAL files were compressed, so they can not be used):<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@edbbart:\/home\/postgres\/ [pg950] bart backup -s PG3 --backup-name full0\nINFO:  creating backup for server 'pg3'\nINFO:  backup identifier: '1489161554590'\n63416\/63416 kB (100%), 1\/1 tablespace\n\nINFO:  backup completed successfully\nWARNING: log_timezone is not set in the server, using the local timezone information\nINFO:  backup checksum: f1c917edd0734c155ddace77bfbc3a17 of base.tar\nINFO:  \nBACKUP DETAILS:\nBACKUP STATUS: active\nBACKUP IDENTIFIER: 1489161554590\nBACKUP NAME: full0\nBACKUP PARENT: none\nBACKUP LOCATION: \/u90\/pgdata\/backup\/pg3\/1489161554590\nBACKUP SIZE: 61.93 MB\nBACKUP FORMAT: tar\nXLOG METHOD: fetch\nBACKUP CHECKSUM(s): 1\n ChkSum                             File      \n f1c917edd0734c155ddace77bfbc3a17   base.tar  \n\nTABLESPACE(s): 0\nSTART WAL LOCATION: 00000001000000000000000F\nBACKUP METHOD: streamed\nBACKUP FROM: master\nSTART TIME: 2017-03-10 16:59:14 CET\nSTOP TIME: 2017-03-10 16:59:18 CET\nTOTAL DURATION: 4 sec(s)\n\npostgres@edbbart:\/home\/postgres\/ [pg950] bart show-backups -s pg3\n SERVER NAME   BACKUP ID       BACKUP NAME            PARENT ID   BACKUP TIME               BACKUP SIZE   WAL(s) SIZE   WAL FILES   STATUS  \n                                                                                                                                            \n pg3           1489161554590   full0                  none        2017-03-10 16:59:18 CET   61.93 MB      16.00 MB      1           active  \n pg3           1489078978132   PG3_2017-03-09T18:02   none        2017-03-09 18:02:59 CET   61.93 MB      32.00 MB      2           active  \n pg3           1489078376562   PG3_2017-03-09T17:52   none        2017-03-09 17:53:01 CET   61.93 MB      32.00 MB      2           active  \n<\/pre>\n<p>Lets do some work on the PostgreSQL which we are backing up to generate WAL:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n(postgres@[local]:4445) [postgres] &gt; create table t1 ( a int );\nCREATE TABLE\nTime: 2.972 ms\n(postgres@[local]:4445) [postgres] &gt; insert into t1 (a) values (generate_series(1,1000000));\nINSERT 0 1000000\nTime: 512.806 ms\n(postgres@[local]:4445) [postgres] &gt; select * from pg_switch_xlog();\n pg_switch_xlog \n----------------\n 0\/10C19D98\n(1 row)\n<\/pre>\n<p>Do the first incremental backup based on the full backup from above:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@edbbart:\/home\/postgres\/ [pg950] bart backup -s pg3 -F p --parent 1489161554590 --backup-name incr1\nINFO:  creating incremental backup for server 'pg3'\nINFO:  checking mbm files \/u90\/pgdata\/backup\/pg3\/archived_wals\nINFO:  new backup id generated 1489161760522\nINFO:  reading directory \/u90\/pgdata\/backup\/pg3\/archived_wals\nINFO:  all files processed\nWARNING: log_timezone is not set in the server, using the local timezone information\nINFO:  server has been successfully backed up\n<\/pre>\n<p>Now you can do another incremental backup but from the incremental backup taken above instead of the full backup:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@edbbart:\/home\/postgres\/ [pg950] bart BACKUP -s pg3 -F p --parent 1489161760522 --backup-name incr2\nINFO:  creating incremental backup for server 'pg3'\nINFO:  checking mbm files \/u90\/pgdata\/backup\/pg3\/archived_wals\nINFO:  new backup id generated 1489162048588\nINFO:  reading directory \/u90\/pgdata\/backup\/pg3\/archived_wals\nINFO:  all files processed\nWARNING: log_timezone is not set in the server, using the local timezone information\nINFO:  server has been successfully backed up\n<\/pre>\n<p>So, what do we have now:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@edbbart:\/home\/postgres\/ [pg950] bart show-backups\n SERVER NAME   BACKUP ID       BACKUP NAME            PARENT ID       BACKUP TIME               BACKUP SIZE   WAL(s) SIZE   WAL FILES   STATUS  \n                                                                                                                                                \n pg3           1489162048588   incr2                  1489161760522   2017-03-10 17:09:51 CET   45.98 MB                                active  \n pg3           1489161760522   incr1                  1489161554590   2017-03-10 17:06:10 CET   67.35 MB                                active  \n pg3           1489161554590   full0                  none            2017-03-10 16:59:18 CET   61.93 MB      112.00 MB     7           active  \n pg3           1489078978132   PG3_2017-03-09T18:02   none            2017-03-09 18:02:59 CET   61.93 MB      32.00 MB      2           active  \n pg3           1489078376562   PG3_2017-03-09T17:52   none            2017-03-09 17:53:01 CET   61.93 MB      32.00 MB      2           active  \n<\/pre>\n<p>Hm this does not really look an improvement. The first incremental backup is even larger than the full backup it is based on. The second one is a bit smaller but as I did not change anything on the source database between the two incremental backups my expectation was that at least the second incremental backup should use far less space. Lets check it on disk:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@edbbart:\/u90\/pgdata\/backup\/pg3\/ [pg950] pwd\n\/u90\/pgdata\/backup\/pg3\npostgres@edbbart:\/u90\/pgdata\/backup\/pg3\/ [pg950] du -sh 1489161554590\n62M\t1489161554590\npostgres@edbbart:\/u90\/pgdata\/backup\/pg3\/ [pg950] du -sh 1489161760522\n68M\t1489161760522\npostgres@edbbart:\/u90\/pgdata\/backup\/pg3\/ [pg950] du -sh 1489162048588\n47M\t1489162048588\n<\/pre>\n<p>At least this seems to be consistent. Lets do another one:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@edbbart:\/u90\/pgdata\/backup\/pg3\/ [pg950] bart backup -s pg3 -F p --parent 1489162048588 --backup-name incr3\nINFO:  creating incremental backup for server 'pg3'\nINFO:  checking mbm files \/u90\/pgdata\/backup\/pg3\/archived_wals\nINFO:  new backup id generated 1489224698357\nINFO:  reading directory \/u90\/pgdata\/backup\/pg3\/archived_wals\nINFO:  all files processed\nWARNING: log_timezone is not set in the server, using the local timezone information\n\npostgres@edbbart:\/u90\/pgdata\/backup\/pg3\/ [pg950] bart show-backups\n SERVER NAME   BACKUP ID       BACKUP NAME            PARENT ID       BACKUP TIME               BACKUP SIZE   WAL(s) SIZE   WAL FILES   STATUS  \n                                                                                                                                                \n pg3           1489224698357   incr3                  1489162048588   2017-03-11 10:31:41 CET   16.58 MB                                active  \n pg3           1489162048588   incr2                  1489161760522   2017-03-10 17:09:51 CET   45.98 MB                                active  \n pg3           1489161760522   incr1                  1489161554590   2017-03-10 17:06:10 CET   67.35 MB                                active  \n pg3           1489161554590   full0                  none            2017-03-10 16:59:18 CET   61.93 MB      160.00 MB     10          active  \n pg3           1489078978132   PG3_2017-03-09T18:02   none            2017-03-09 18:02:59 CET   61.93 MB      32.00 MB      2           active  \n pg3           1489078376562   PG3_2017-03-09T17:52   none            2017-03-09 17:53:01 CET   61.93 MB      32.00 MB      2           active  \n<\/pre>\n<p>Ok, now we can see a real improvement (not sure why there is no improvement for the first ones, need to do more testing). Restores should work as well (I&#8217;ll restore the last incremental backup):<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@edbbart:\/home\/postgres\/ [pg950] \/usr\/edb\/bart2.0\/bin\/bart restore -s pg3 -i incr3 -p \/var\/tmp\/restore_test\/  -r postgres@localhost\nINFO:  restoring incremental backup 'incr3' of server 'pg3'\nINFO:  base backup restored\nERROR: failed to overlay modified blocks\ncommand failed with exit code 127\nbash: bart: command not found\n<\/pre>\n<p>Hm, what&#8217;s that? Why does bart not find bart? Can I restore the full backup?<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@edbbart:\/home\/postgres\/ [pg950] \/usr\/edb\/bart2.0\/bin\/bart restore -s pg3 -i full0 -p \/var\/tmp\/restore_test\/  -r postgres@localhost\nINFO:  restoring backup 'full0' of server 'pg3'\nINFO:  base backup restored\nINFO:  archiving is disabled\npostgres@edbbart:\/home\/postgres\/ [pg950] ls \/var\/tmp\/restore_test\/\nbackup_label  global        pg_dynshmem    pg_log        pg_notify    pg_snapshots  pg_subtrans  PG_VERSION            postgresql.conf\nbase          pg_clog       pg_hba.conf    pg_logical    pg_replslot  pg_stat       pg_tblspc    pg_xlog               tablespace_map\ndbms_pipe     pg_commit_ts  pg_ident.conf  pg_multixact  pg_serial    pg_stat_tmp   pg_twophase  postgresql.auto.conf\n<\/pre>\n<p>Looks fine, the first incremental:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@edbbart:\/home\/postgres\/ [pg950] \/usr\/edb\/bart2.0\/bin\/bart restore -s pg3 -i incr1 -p \/var\/tmp\/restore_test\/  -r postgres@localhost\nINFO:  restoring incremental backup 'incr1' of server 'pg3'\nINFO:  base backup restored\nERROR: failed to overlay modified blocks\ncommand failed with exit code 127\nbash: bart: command not found\n<\/pre>\n<p>No. Time for the &#8220;&#8211;debug&#8221; mode:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@edbbart:\/home\/postgres\/ [pg950] rm -rf \/var\/tmp\/restore_test\/*\npostgres@edbbart:\/home\/postgres\/ [pg950] \/usr\/edb\/bart2.0\/bin\/bart --debug restore -s pg3 -i incr1 -p \/var\/tmp\/restore_test\/  -r postgres@localhost\nDEBUG: Server: Global, Now: 2017-03-13 12:12:24 CET, RetentionWindow: 7776000 (secs) ==&gt; 2160 hour(s)\nDEBUG: Exec Command: ssh -o BatchMode=yes -o PasswordAuthentication=no postgres@localhost exit\nDEBUG: Exec Command: ssh -o BatchMode=yes -o PasswordAuthentication=no postgres@localhost test -d \/var\/tmp\/restore_test &amp;&amp; echo \"exists\"\nDEBUG: Exec Command: ssh -o BatchMode=yes -o PasswordAuthentication=no postgres@localhost touch \/var\/tmp\/restore_test\/tmp-incr1 &amp;&amp; echo \"exists\"\nDEBUG: Exec Command: ssh -o BatchMode=yes -o PasswordAuthentication=no postgres@localhost rm -f \/var\/tmp\/restore_test\/tmp-incr1\nDEBUG: Exec Command: ssh -o BatchMode=yes -o PasswordAuthentication=no postgres@localhost ls -A \/var\/tmp\/restore_test\nINFO:  restoring incremental backup 'incr1' of server 'pg3'\nDEBUG: restoring backup: 1489161554590\nDEBUG: restoring backup to \/var\/tmp\/restore_test\nDEBUG: restore command: cat \/u90\/pgdata\/backup\/pg3\/1489161554590\/base.tar | ssh -o BatchMode=yes -o PasswordAuthentication=no postgres@localhost \" tar -C \/var\/tmp\/restore_test -xf - \"\nDEBUG: Exec Command: cat \/u90\/pgdata\/backup\/pg3\/1489161554590\/base.tar | ssh -o BatchMode=yes -o PasswordAuthentication=no postgres@localhost \" tar -C \/var\/tmp\/restore_test -xf - \"\nINFO:  base backup restored\nDEBUG: backup '1489161554590' restored to '\/var\/tmp\/restore_test'\nDEBUG: restoring backup: 1489161760522\nDEBUG: Exec Command: cd \/u90\/pgdata\/backup\/pg3\/1489161760522\/base &amp;&amp; tar -cf - * | ssh -o BatchMode=yes -o PasswordAuthentication=no postgres@localhost \" tar -C \/var\/tmp\/restore_test -xf - \"\nDEBUG: Exec Command: cd . &amp;&amp; scp -o BatchMode=yes -o PasswordAuthentication=no  -r \/u90\/pgdata\/backup\/pg3\/1489161760522\/base\/..\/1489161760522.cbm postgres@localhost:\/var\/tmp\/restore_test\nDEBUG: Exec Command: ssh -o BatchMode=yes -o PasswordAuthentication=no postgres@localhost \"bart --debug apply-incremental --source \/var\/tmp\/restore_test --tsmap '' --backup 1489161760522\"\nERROR: failed to overlay modified blocks\ncommand failed with exit code 127\nbash: bart: command not found\n<\/pre>\n<p>The command that does not seem to work is this one:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\nDEBUG: Exec Command: ssh -o BatchMode=yes -o PasswordAuthentication=no postgres@localhost \"bart --debug apply-incremental --source \/var\/tmp\/restore_test --tsmap '' --backup 1489161760522\"\n<\/pre>\n<p>Lets do that manually:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\nostgres@edbbart:\/home\/postgres\/ [pg950] bart --debug apply-incremental --source \/var\/tmp\/restore_test --tsmap '' --backup 1489161760522\nDEBUG: loading '\/var\/tmp\/restore_test\/1489161760522.cbm' MBM\/CBM file \nDEBUG: mbm chksum: old f60a435d4d3709302e5b7acc3f8d8ecb, new f60a435d4d3709302e5b7acc3f8d8ecb\nDEBUG: applying incremental 1489161760522 (pid 3686)\nDEBUG: copying blocks for relation from: \/var\/tmp\/restore_test\/base\/15184\/1247.blk to \/var\/tmp\/restore_test\/base\/15184\/1247\nsrc size: 16384, dst size: 139264\nDEBUG: block copy complete: from \/var\/tmp\/restore_test\/base\/15184\/1247.blk, to \/var\/tmp\/restore_test\/base\/15184\/1247\nsrc size: 16384, dst size: 139264\nDEBUG: copying blocks for relation from: \/var\/tmp\/restore_test\/base\/15184\/1249.blk to \/var\/tmp\/restore_test\/base\/15184\/1249\nsrc size: 8192, dst size: 753664\nDEBUG: block copy complete: from \/var\/tmp\/restore_test\/base\/15184\/1249.blk, to \/var\/tmp\/restore_test\/base\/15184\/1249\nsrc size: 8192, dst size: 753664\nDEBUG: copying blocks for relation from: \/var\/tmp\/restore_test\/base\/15184\/1259.blk to \/var\/tmp\/restore_test\/base\/15184\/1259\nsrc size: 8192, dst size: 139264\nDEBUG: block copy complete: from \/var\/tmp\/restore_test\/base\/15184\/1259.blk, to \/var\/tmp\/restore_test\/base\/15184\/1259\nsrc size: 8192, dst size: 139264\nDEBUG: copying relation node files from (src): \/var\/tmp\/restore_test\/base\/15184\/16386.all, to (dst): \/var\/tmp\/restore_test\/base\/15184\/16386\nsrc size: 36249600, dst size: 0\nDEBUG: Exec Command: cp --preserve \/var\/tmp\/restore_test\/base\/15184\/16386.all \/var\/tmp\/restore_test\/base\/15184\/16386\nDEBUG: copying blocks for relation from: \/var\/tmp\/restore_test\/base\/15184\/2608.blk to \/var\/tmp\/restore_test\/base\/15184\/2608\nsrc size: 16384, dst size: 663552\nDEBUG: block copy complete: from \/var\/tmp\/restore_test\/base\/15184\/2608.blk, to \/var\/tmp\/restore_test\/base\/15184\/2608\nsrc size: 16384, dst size: 663552\nDEBUG: copying blocks for relation from: \/var\/tmp\/restore_test\/base\/15184\/2658.blk to \/var\/tmp\/restore_test\/base\/15184\/2658\nsrc size: 8192, dst size: 204800\nDEBUG: block copy complete: from \/var\/tmp\/restore_test\/base\/15184\/2658.blk, to \/var\/tmp\/restore_test\/base\/15184\/2658\nsrc size: 8192, dst size: 204800\nDEBUG: copying blocks for relation from: \/var\/tmp\/restore_test\/base\/15184\/2659.blk to \/var\/tmp\/restore_test\/base\/15184\/2659\nsrc size: 8192, dst size: 139264\nDEBUG: block copy complete: from \/var\/tmp\/restore_test\/base\/15184\/2659.blk, to \/var\/tmp\/restore_test\/base\/15184\/2659\nsrc size: 8192, dst size: 139264\nDEBUG: copying blocks for relation from: \/var\/tmp\/restore_test\/base\/15184\/2662.blk to \/var\/tmp\/restore_test\/base\/15184\/2662\nsrc size: 8192, dst size: 32768\nDEBUG: block copy complete: from \/var\/tmp\/restore_test\/base\/15184\/2662.blk, to \/var\/tmp\/restore_test\/base\/15184\/2662\nsrc size: 8192, dst size: 32768\nDEBUG: copying blocks for relation from: \/var\/tmp\/restore_test\/base\/15184\/2663.blk to \/var\/tmp\/restore_test\/base\/15184\/2663\nsrc size: 8192, dst size: 57344\nDEBUG: block copy complete: from \/var\/tmp\/restore_test\/base\/15184\/2663.blk, to \/var\/tmp\/restore_test\/base\/15184\/2663\nsrc size: 8192, dst size: 57344\nDEBUG: copying blocks for relation from: \/var\/tmp\/restore_test\/base\/15184\/2673.blk to \/var\/tmp\/restore_test\/base\/15184\/2673\nsrc size: 16384, dst size: 540672\nDEBUG: block copy complete: from \/var\/tmp\/restore_test\/base\/15184\/2673.blk, to \/var\/tmp\/restore_test\/base\/15184\/2673\nsrc size: 16384, dst size: 540672\nDEBUG: copying blocks for relation from: \/var\/tmp\/restore_test\/base\/15184\/2674.blk to \/var\/tmp\/restore_test\/base\/15184\/2674\nsrc size: 24576, dst size: 557056\nDEBUG: block copy complete: from \/var\/tmp\/restore_test\/base\/15184\/2674.blk, to \/var\/tmp\/restore_test\/base\/15184\/2674\nsrc size: 24576, dst size: 557056\nDEBUG: copying blocks for relation from: \/var\/tmp\/restore_test\/base\/15184\/2703.blk to \/var\/tmp\/restore_test\/base\/15184\/2703\nsrc size: 8192, dst size: 40960\nDEBUG: block copy complete: from \/var\/tmp\/restore_test\/base\/15184\/2703.blk, to \/var\/tmp\/restore_test\/base\/15184\/2703\nsrc size: 8192, dst size: 40960\nDEBUG: copying blocks for relation from: \/var\/tmp\/restore_test\/base\/15184\/2704.blk to \/var\/tmp\/restore_test\/base\/15184\/2704\nsrc size: 16384, dst size: 57344\nDEBUG: block copy complete: from \/var\/tmp\/restore_test\/base\/15184\/2704.blk, to \/var\/tmp\/restore_test\/base\/15184\/2704\nsrc size: 16384, dst size: 57344\nDEBUG: copying blocks for relation from: \/var\/tmp\/restore_test\/base\/15184\/3455.blk to \/var\/tmp\/restore_test\/base\/15184\/3455\nsrc size: 8192, dst size: 49152\nDEBUG: block copy complete: from \/var\/tmp\/restore_test\/base\/15184\/3455.blk, to \/var\/tmp\/restore_test\/base\/15184\/3455\nsrc size: 8192, dst size: 49152\n<\/pre>\n<p>.. and that works. So, next test:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@edbbart:\/home\/postgres\/ [pg950] ssh postgres@localhost \"bart -version\"\nbash: bart: command not found\npostgres@edbbart:\/home\/postgres\/ [pg950] ssh postgres@localhost \"which bart\"\nwhich: no bart in (\/usr\/local\/bin:\/usr\/bin)\n<\/pre>\n<p>Here we have the issue. As we do not get a login shell for these types of ssh commands:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@edbbart:\/home\/postgres\/ [pg950] echo \"PATH=$PATH:\/usr\/edb-bart\/bin\/\" &gt;&gt; ~\/.bashrc\npostgres@edbbart:\/home\/postgres\/ [pg950] echo \"export PATH\" &gt;&gt; ~\/.bashrc\npostgres@edbbart:\/home\/postgres\/ [pg950] ssh postgres@localhost \"which bart\"\n\/usr\/edb-bart\/bin\/bart\n<\/pre>\n<p>Try again:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@edbbart:\/home\/postgres\/ [pg950] rm -rf \/var\/tmp\/restore_test\/*\npostgres@edbbart:\/home\/postgres\/ [pg950] \/usr\/edb\/bart2.0\/bin\/bart restore -s pg3 -i incr3 -p \/var\/tmp\/restore_test\/  -r postgres@localhostINFO:  restoring incremental backup 'incr3' of server 'pg3'\nINFO:  base backup restored\nINFO:  archiving is disabled\n<\/pre>\n<p>&#8230; and it works. But: This does mean that you have to install BART on all the hosts where you have a PostgreSQL instance if you want to restore to the same host where the instance is running. Not sure if I really like that (or I completely missed something) &#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We already have some posts on how you can use EDB BART to backup and restore your PostgreSQL instances from one central server (EnterpriseDB Backup and Recovery Tool (BART), getting started with postgres plus advanced server (2) \u2013 setting up a backup and recovery server). The current version you can download from the EnterpriseDB website [&hellip;]<\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[202,1003,713,77,854],"type_dbi":[],"class_list":["post-9844","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","tag-backup","tag-bart","tag-enterprisedb","tag-postgresql","tag-restore"],"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>EDB BART 2.0 - How to upgrade and block level incremental backups - dbi Blog<\/title>\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\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"EDB BART 2.0 - How to upgrade and block level incremental backups\" \/>\n<meta property=\"og:description\" content=\"We already have some posts on how you can use EDB BART to backup and restore your PostgreSQL instances from one central server (EnterpriseDB Backup and Recovery Tool (BART), getting started with postgres plus advanced server (2) \u2013 setting up a backup and recovery server). The current version you can download from the EnterpriseDB website [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-03-13T10:37:42+00:00\" \/>\n<meta name=\"author\" content=\"Daniel Westermann\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@westermanndanie\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Westermann\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 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\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"EDB BART 2.0 &#8211; How to upgrade and block level incremental backups\",\"datePublished\":\"2017-03-13T10:37:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/\"},\"wordCount\":818,\"commentCount\":0,\"keywords\":[\"Backup\",\"Bart\",\"enterprisedb\",\"PostgreSQL\",\"Restore\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/\",\"name\":\"EDB BART 2.0 - How to upgrade and block level incremental backups - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2017-03-13T10:37:42+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"EDB BART 2.0 &#8211; How to upgrade and block level incremental backups\"}]},{\"@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\/8d08e9bd996a89bd75c0286cbabf3c66\",\"name\":\"Daniel Westermann\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"caption\":\"Daniel Westermann\"},\"description\":\"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.\",\"sameAs\":[\"https:\/\/x.com\/westermanndanie\"],\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/daniel-westermann\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"EDB BART 2.0 - How to upgrade and block level incremental backups - dbi Blog","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\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/","og_locale":"en_US","og_type":"article","og_title":"EDB BART 2.0 - How to upgrade and block level incremental backups","og_description":"We already have some posts on how you can use EDB BART to backup and restore your PostgreSQL instances from one central server (EnterpriseDB Backup and Recovery Tool (BART), getting started with postgres plus advanced server (2) \u2013 setting up a backup and recovery server). The current version you can download from the EnterpriseDB website [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/","og_site_name":"dbi Blog","article_published_time":"2017-03-13T10:37:42+00:00","author":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","Est. reading time":"17 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"EDB BART 2.0 &#8211; How to upgrade and block level incremental backups","datePublished":"2017-03-13T10:37:42+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/"},"wordCount":818,"commentCount":0,"keywords":["Backup","Bart","enterprisedb","PostgreSQL","Restore"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/","url":"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/","name":"EDB BART 2.0 - How to upgrade and block level incremental backups - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2017-03-13T10:37:42+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/edb-bart-2-0-how-to-upgrade-and-block-level-incremental-backups\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"EDB BART 2.0 &#8211; How to upgrade and block level incremental backups"}]},{"@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\/8d08e9bd996a89bd75c0286cbabf3c66","name":"Daniel Westermann","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","caption":"Daniel Westermann"},"description":"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.","sameAs":["https:\/\/x.com\/westermanndanie"],"url":"https:\/\/www.dbi-services.com\/blog\/author\/daniel-westermann\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/9844","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\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=9844"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/9844\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=9844"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=9844"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=9844"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=9844"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}