====== VEEAM Sync Cookbook ======
Veeam Backup & Replication is a software product developed by Veeam Software to back up, restore and replicate data on virtual machines
===== Prerequisites =====
A defined ODBC connection to the Veeam database.
===== Data Extraction =====
Data is extracted from Veeam via an SQL connection and then processing that raw data for the Sync with TapeTrack via a ttidef file.
===== Synchronization =====
You will need to install the [[cli:sync_suite|TapeTrack Sync software]] to complete these instructions.
Synchronization with TapeTrack is performed by calling the [[cli:TMSS10Sync|TMSS10Sync]] command line program, along with:
- Veeam ODBC connection.
- Command line arguments that instruct the program how to process volumes.
- A synchronization definition file that instructs the program how to interpret the SQL output.
The command line code is usually contained within a batch file and scheduled to execute automatically on a regular time frame to suit your requirements.
==== Example Command Line Arguments ====
TMSS10Sync -d default.ttidef -a -S batch:-password@server
Where:
* ''-d'' is the path to the Synchronization Definition File.
* ''-a'' tells the program to add new tape volumes if they are encountered.
* ''-S'' tells the program what [[cli:server_argument|Server]] to connect to.
=== Example Batch File ===
{{veeam_batch.png}}
===== TTIDEF Sample =====
Sample TTIDEF file (default.ttidef) to:
* Connect to VEEAM database (veeam2 in this example).
* Extract barcode, media pool ID and last write time.
* Set Customer-ID to US01.
* Set Media-ID to LTO.
* Set Volume location based off media pool ID.
* Set Volume Description based off media pool ID.
#
# Connect to Veeam database
SetODBC("DSN=veeam2");
# Extract data
SetSQL("SELECT [barcode],[media_pool_id],[last_write_time] FROM [VeeamBackup].[dbo].[Tape.tape_mediums]");
# Set Customer-ID
SetLiteral(CUSTOMER, "US01");
# Set media to LTO as only one media type in report
SetLiteral(MEDIA, "LTO");
# Set place marker for Description
SetLiteral(DESCRIPTION, "????");
# Set place marker for Repository
SetLiteral(REPOSITORY, "????");
# Extract Volume-ID from column 1
Extract(VOLUME, 1, 10, 0);
# Extract media pool-id for translation from column 2
Extract(USER1, 2, 50, 0);
# Extract last writetime from column 3
Extract(WRITETIME, 3, 50, 0);
# Set writetime format
SetWriteTimeFormat("%%Y-%%m-%%d %%H:%%M:%%S");
# Add translations to set Description based off Media Pool-ID
AddTranslation2(DESCRIPTION, USER1, "4C6BFE92-5C7F-BFE9-A18E-B52A8049C167", "Alpha media pool");
AddTranslation2(DESCRIPTION, USER1, "601ED8E9-647E-A19E-B18E-F6D66B0EE584", "Bravo media pool");
AddTranslation2(DESCRIPTION, USER1, "375TED22-7654-B34R-67GH-TMX642021SEE", "Charlie media pool");
AddTranslation2(DESCRIPTION, USER1, "9454924F-834C-22C0-9A35-F6D44B0EE214", "Free Tapes");
AddTranslation2(DESCRIPTION, USER1, "3376924Q-221C-59C0-3A65-F6D32B0FW857", "Imported");
# Add translations to set Repository based off Media Pool-ID
# Move matching media pools offsite
AddTranslation2(DESCRIPTION, USER1, "4C6BFE92-5C7F-BFE9-A18E-B52A8049C167", "OFFS");
AddTranslation2(DESCRIPTION, USER1, "601ED8E9-647E-A19E-B18E-F6D66B0EE584", "OFFS");
AddTranslation2(DESCRIPTION, USER1, "375TED22-7654-B34R-67GH-TMX642021SEE", "OFFS");
# All other media pool place in library
AddTranslation2(REPOSITORY, USER1, "*", "LIBR");
# Stop any movement from racking back to offsite
AddSkipOnRepositoryChange("OFFS", "RACK", "*");
<- :cookbook:tsm|TSM Sync Cookbook ^ :cookbook:introduction|Cookbook ^ ->
{{tag> cookbook veeam sync}}