A computer-implemented method for responding to a temporal query, wherein the temporal query specifies a beginning event, an end event, and a base query pertaining to the time between the beginning event and the end event, the method comprising: restoring at least a portion of a database to a point in time that is assumed to be prior to the occurrence of the beginning event of the temporal query; translating redo log records that describe changes to the database into statements that reflect database operations that are capable of causing the changes to the database; generating a first database trigger for detecting the beginning event based on execution of the statements; causing the first database trigger to detect the beginning event by executing the statements; generating a second database trigger for detecting the end event of the temporal query based on execution of the statements; and after the first database trigger detects the beginning event, performing the following: causing the second database trigger to detect the end event by executing the statements; and in response to the second database trigger detecting the end event, issuing the base query to determine a response to the temporal query, wherein results of the base query provide the response to the temporal query, wherein the operation of issuing the base query to determine a response to the temporal query is only performed if it has been determined (202, 206) that (i) the base query is monotonic, and (ii) there are no updates or deletes to any row related to the base query between the detection of the beginning event and the detection of the end event, and wherein the process exits if the base query is not monotonic, or there are updates or deletes to a row that is related to the base query. restoring at least a portion of a database to a point in time that is assumed to be prior to the occurrence of the beginning event of the temporal query; translating redo log records that describe changes to the database into statements that reflect database operations that are capable of causing the changes to the database; generating a first database trigger for detecting the beginning event based on execution of the statements; causing the first database trigger to detect the beginning event by executing the statements; generating a second database trigger for detecting the end event of the temporal query based on execution of the statements; and after the first database trigger detects the beginning event, performing the following: causing the second database trigger to detect the end event by executing the statements; and in response to the second database trigger detecting the end event, issuing the base query to determine a response to the temporal query, wherein results of the base query provide the response to the temporal query, wherein the operation of issuing the base query to determine a response to the temporal query is only performed if it has been determined (202, 206) that (i) the base query is monotonic, and (ii) there are no updates or deletes to any row related to the base query between the detection of the beginning event and the detection of the end event, and wherein the process exits if the base query is not monotonic, or there are updates or deletes to a row that is related to the base query. causing the second database trigger to detect the end event by executing the statements; and in response to the second database trigger detecting the end event, issuing the base query to determine a response to the temporal query, wherein results of the base query provide the response to the temporal query, wherein the operation of issuing the base query to determine a response to the temporal query is only performed if it has been determined (202, 206) that (i) the base query is monotonic, and (ii) there are no updates or deletes to any row related to the base query between the detection of the beginning event and the detection of the end event, and wherein the process exits if the base query is not monotonic, or there are updates or deletes to a row that is related to the base query. issuing the base query to determine a response to the temporal query, wherein results of the base query provide the response to the temporal query, wherein the operation of issuing the base query to determine a response to the temporal query is only performed if it has been determined (202, 206) that (i) the base query is monotonic, and (ii) there are no updates or deletes to any row related to the base query between the detection of the beginning event and the detection of the end event, and wherein the process exits if the base query is not monotonic, or there are updates or deletes to a row that is related to the base query.