数据库代写 | Project (Part 3): Logging, Backup & Recovery
本次美国代写主要为数据库相关的project
Project (Part 3): Logging, Backup & Recovery
Description:
You are responsible to implement three new commands on top on your project. The new commands are backup, restore and rollforward. In addition, you will need to maintain a transaction log file for all the DDL and DML commands from previous specification.
Project Specification:
CLP : db.exe (Usage: db <command statement>)
New command syntax and its function:
Note: { … } means the content of … within {} pair can be repeated separated by a comma ‘,’.
Note: [ … ] means the content within [] is optional.
Note: The ‘{‘, ‘}’, ‘[‘, ‘]’ symbols are NOT part of the syntax.
Log file is an ASCII text file named “db.log”.
Log record format:
<timestamp> “original DDL/DML statement within double quotes”
or
BACKUP <image file name>
or
RF_START
<timestamp> is a fixed 14 characters string with the following format, yyyymmddhhmmss.
Note that hh is a 24 hr clock, 00 to 23. We do NOT log SELECT statement, BACKUP, RESTORE, and ROLLFORWARD commands.
1) BACKUP TO <image file name>
– <image file name> is any valid identifier without a file extension.
– Combine/concatenate all the DBMS files into a backup image file.
– First is dbfile.bin, then a 4-byte length of t1.tab, and then follow by t1.tab, 4-byte length of t2.tab, t2.tab, …
– Must write to the log of the BACKUP <image file name> record.
– If an <image file name> already exist on disk, fail the command.
2) RESTORE FROM <image file name> [WITHOUT RF]
– If WITHOUT RF is specified and there are transactions after the time of the image file, you must prune the log entries after the BACKUP tag in the log file.
– If WITHOUT RF is not specified (by default), you must set the db_flag = ROLLFORWARD_PENDING in the tpd_list structure to prevent further access to any db “…” DDL, DML, BACKUP, and RESTORE commands. In this case, you would need to write the RF_START log entry into the log file on the line right after the BACKUP <image file name> tag.
3) ROLLFORWARD [TO <timestamp>]
– Without TO <timestamp>, redo all the logged transactions from the end of the backup image up to the end of the log.
– With <timestamp> specified, only redo all the transactions up to that time and prune the rest of the log.
– In all case, you must remove the RF_START log record from the log file and reset the db_flag = 0 in the tpd_list.
– If RF_START is missing from log, you need to fail the command.
Other details:
– You must use the db_flag in the tpd_list structure for the restore/rollforward commands.
– You must add logging code to all the DDL and DML commands.
– If the log needs to be pruned, save a copy of the original log before pruning. (e.g. db.log1, db.log2.)
– In order to do these 3 commands, you need to have a minimum of insert, update, delete, and select * (without the where or order by) clause working from project.