support display the accurate min_restore_timestamp

This commit is contained in:
hamstersox 2023-06-30 02:12:23 +00:00 committed by ob-robot
parent 0f3fef7131
commit deda754b81
15 changed files with 183 additions and 47 deletions

View File

@ -670,22 +670,7 @@ int ObBackupDataScheduler::get_backup_scn(
if (OB_FAIL(trans.end(true))) {
LOG_WARN("failed to commit", K(ret));
} else {
if (!is_start) {
// The conversion accuracy of SCN to time_stamp is inconsistent under MySQL mode and Oracle mode.
// The conversion accuracy in ORALCE mode is nanosecond, but it is microsecond in mysql
// for backup and restore, we keep the end scn round up to microseconds that keep the conversion accuracy is consistent.
// meanwhile, in order to solve that boundary is not included in the restore, scn + 1;
// 1658475549197665190 --> 1658475549197666000
int64_t ts = 0;
ts = tmp_scn.convert_to_ts();
if (OB_FAIL(scn.convert_from_ts(ts))) {
LOG_WARN("fail to convert from ts", K(ret), K(ts));
} else if (tmp_scn != scn && OB_FAIL(scn.convert_from_ts(ts + 1))) {
LOG_WARN("fail to convert from ts", K(ret), K(ts));
}
} else {
scn = tmp_scn;
}
scn = tmp_scn;
}
} else {
int tmp_ret = OB_SUCCESS;

View File

@ -1904,7 +1904,6 @@ int ObBackupSetTaskMgr::write_extern_locality_info_(ObExternTenantLocalityInfoDe
int ret = OB_SUCCESS;
ObSchemaGetterGuard schema_guard;
const ObTenantSchema *tenant_info = NULL;
const ObSysVarSchema *var_schema = nullptr;
if (OB_FAIL(schema_service_->get_tenant_schema_guard(job_attr_->tenant_id_, schema_guard))) {
LOG_WARN("[DATA_BACKUP]failed to get_tenant_schema_guard", KR(ret), "tenant_id", job_attr_->tenant_id_);
} else if (OB_FAIL(schema_guard.get_tenant_info(job_attr_->tenant_id_, tenant_info))) {
@ -1917,10 +1916,10 @@ int ObBackupSetTaskMgr::write_extern_locality_info_(ObExternTenantLocalityInfoDe
LOG_WARN("[DATA_BACKUP]failed to assign primary zone", K(ret), K(tenant_info));
} else if (OB_FAIL(locality_info.cluster_name_.assign(GCONF.cluster))) {
LOG_WARN("fail to assign cluster name", K(ret));
} else if (OB_FAIL(schema_guard.get_tenant_system_variable(job_attr_->tenant_id_, share::SYS_VAR_SYSTEM_TIME_ZONE, var_schema))) {
LOG_WARN("fail to get tenant system variable", K(ret));
} else if (OB_FAIL(locality_info.sys_time_zone_.assign(var_schema->get_value()))) {
LOG_WARN("fail to assign time zone", K(ret), KPC(var_schema));
} else if (OB_FAIL(ObBackupUtils::get_tenant_sys_time_zone_wrap(set_task_attr_.tenant_id_,
locality_info.sys_time_zone_,
locality_info.sys_time_zone_wrap_))) {
LOG_WARN("failed to get tenant sys time zone wrap", K(ret));
} else {
locality_info.tenant_id_ = job_attr_->tenant_id_;
locality_info.backup_set_id_ = job_attr_->backup_set_id_;
@ -1946,9 +1945,10 @@ int ObBackupSetTaskMgr::write_extern_diagnose_info_(
} else {
HEAP_VAR(ObExternTenantDiagnoseInfoDesc, diagnose_info) {
diagnose_info.tenant_id_ = job_attr_->tenant_id_;
diagnose_info.tenant_locality_info_ = locality_info;
diagnose_info.backup_set_file_ = backup_set_info.backup_set_file_;
if (OB_FAIL(store_.write_tenant_diagnose_info(diagnose_info))) {
if (OB_FAIL(diagnose_info.tenant_locality_info_.assign(locality_info))) {
LOG_WARN("failed to assign", K(ret), K(locality_info));
} else if (OB_FAIL(store_.write_tenant_diagnose_info(diagnose_info))) {
LOG_WARN("[DATA_BACKUP]failed to write teannt diagnose info", K(ret), K(diagnose_info));
}
}

View File

@ -181,9 +181,6 @@ static int record_piece_info(const ObDestRoundCheckpointer::GeneratedPiece &piec
single_ls_desc.round_id_, single_ls_desc.piece_id_, single_ls_desc.ls_id_,
single_ls_desc.filelist_))) {
LOG_WARN("failed to get archive file list", K(ret), K(single_ls_desc));
} else if (single_ls_desc.filelist_.empty()) {
ret = OB_ENTRY_NOT_EXIST;
LOG_WARN("no archive file exist", K(ret), K(single_ls_desc));
} else if (OB_FALSE_IT(std::sort(single_ls_desc.filelist_.begin(), single_ls_desc.filelist_.end()))) {
} else if (OB_FAIL(piece_info_desc.filelist_.push_back(single_ls_desc))) {
LOG_WARN("failed to push backup single_ls_desc", K(ret), K(single_ls_desc), K(piece_info_desc));

View File

@ -69,9 +69,18 @@ int ObBackupSetFileOperator::fill_dml_with_backup_set_(const ObBackupSetFileDesc
tenant_version_display, OB_INNER_TABLE_BACKUP_TASK_CLUSTER_FORMAT_LENGTH, backup_set_desc.tenant_compatible_);
const int64_t pos1 = ObClusterVersion::get_instance().print_version_str(
cluster_version_display, OB_INNER_TABLE_BACKUP_TASK_CLUSTER_FORMAT_LENGTH, backup_set_desc.cluster_version_);
const char *comment = OB_SUCCESS == backup_set_desc.result_ ? "" : common::ob_strerror(backup_set_desc.result_);
if (OB_FAIL(dml.add_pk_column(OB_STR_BACKUP_SET_ID, backup_set_desc.backup_set_id_))) {
char min_restore_scn_display[OB_INNER_TABLE_BACKUP_TASK_CLUSTER_FORMAT_LENGTH] = "";
if (backup_set_desc.min_restore_scn_.is_valid_and_not_min()) {
if (OB_FAIL(ObBackupUtils::backup_scn_to_str(backup_set_desc.tenant_id_,
backup_set_desc.min_restore_scn_,
min_restore_scn_display,
OB_INNER_TABLE_BACKUP_TASK_CLUSTER_FORMAT_LENGTH))) {
LOG_WARN("failed to backup scn to str", K(ret), K(backup_set_desc));
}
}
if (FAILEDx(dml.add_pk_column(OB_STR_BACKUP_SET_ID, backup_set_desc.backup_set_id_))) {
LOG_WARN("[DATA_BACKUP]failed to add column", K(ret));
} else if (OB_FAIL(dml.add_pk_column(OB_STR_TENANT_ID, backup_set_desc.tenant_id_))) {
LOG_WARN("[DATA_BACKUP]failed to add column", K(ret));
@ -139,6 +148,8 @@ int ObBackupSetFileOperator::fill_dml_with_backup_set_(const ObBackupSetFileDesc
LOG_WARN("[DATA_BACKUP]failed to add column", K(ret));
} else if (OB_FAIL(dml.add_column(OB_STR_CONSISTENT_SCN, backup_set_desc.consistent_scn_.get_val_for_inner_table_field()))) {
LOG_WARN("[DATA_BACKUP]failed to add column", K(ret));
} else if (OB_FAIL(dml.add_column(OB_STR_MIN_RESTORE_SCN_DISPLAY, min_restore_scn_display))) {
LOG_WARN("[DATA_BACKUP]failed to add column", K(ret));
}
return ret;
}

View File

@ -24,6 +24,7 @@
#include "storage/tx/ob_i_ts_source.h"
#include "storage/backup/ob_backup_data_store.h"
#include "share/backup/ob_archive_struct.h"
#include "observer/omt/ob_tenant_timezone_mgr.h"
#include "storage/tx/ob_ts_mgr.h"
@ -2201,6 +2202,57 @@ int ObBackupUtils::get_backup_scn(const uint64_t &tenant_id, share::SCN &scn)
return ret;
}
int ObBackupUtils::backup_scn_to_str(const uint64_t tenant_id, const share::SCN &scn, char *buf, int64_t buf_len)
{
int ret = OB_SUCCESS;
ObTimeZoneInfoWrap time_zone_info_wrap;
ObFixedLengthString<common::OB_MAX_TIMESTAMP_TZ_LENGTH> time_zone;
int64_t pos = 0;
if (OB_FAIL(ObBackupUtils::get_tenant_sys_time_zone_wrap(tenant_id, time_zone, time_zone_info_wrap))) {
LOG_WARN("failed to get tenant sys time zone wrap", K(tenant_id));
} else if (OB_FAIL(ObTimeConverter::scn_to_str(scn.get_val_for_inner_table_field(),
time_zone_info_wrap.is_position_class() ?
&time_zone_info_wrap.get_tz_info_pos() : time_zone_info_wrap.get_time_zone_info(),
buf,
buf_len,
pos))) {
LOG_WARN("failed to scn to str", K(ret));
}
return ret;
}
int ObBackupUtils::get_tenant_sys_time_zone_wrap(
const uint64_t tenant_id,
ObFixedLengthString<common::OB_MAX_TIMESTAMP_TZ_LENGTH> &time_zone,
ObTimeZoneInfoWrap &time_zone_info_wrap)
{
int ret = OB_SUCCESS;
ObMultiVersionSchemaService *schema_service = nullptr;
ObSchemaGetterGuard schema_guard;
ObTZMapWrap tz_map_wrap;
const ObSysVarSchema *var_schema = nullptr;
ObTimeZoneInfoManager *tz_info_mgr = nullptr;
if (OB_ISNULL(schema_service = GCTX.schema_service_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("schema service must not be null", K(ret));
} else if (OB_FAIL(schema_service->get_tenant_schema_guard(tenant_id, schema_guard))) {
LOG_WARN("failed to get_tenant_schema_guard", KR(ret), K(tenant_id));
} else if (OB_FAIL(schema_guard.get_tenant_system_variable(tenant_id, share::SYS_VAR_SYSTEM_TIME_ZONE, var_schema))) {
LOG_WARN("fail to get tenant system variable", K(ret));
} else if (OB_ISNULL(var_schema)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("var schema must not be null", K(ret));
} else if (OB_FAIL(OTTZ_MGR.get_tenant_timezone(tenant_id, tz_map_wrap, tz_info_mgr))) {
LOG_WARN("failed to get tenant timezone", K(ret));
} else if (OB_FAIL(time_zone.assign(var_schema->get_value()))) {
LOG_WARN("failed to assign timezone", K(ret));
} else if (OB_FAIL(time_zone_info_wrap.init_time_zone(var_schema->get_value(), OB_INVALID_VERSION,
*(const_cast<ObTZInfoMap *>(tz_map_wrap.get_tz_map()))))) {
LOG_WARN("failed to init time zone", K(ret));
}
return ret;
}
int ObBackupUtils::convert_timestamp_to_timestr(const int64_t ts, char *buf, int64_t len)
{
int ret = OB_SUCCESS;

View File

@ -412,6 +412,7 @@ const char *const OB_STR_BACKUP_DATA_VERSION = "backup_data_version";
const char *const OB_STR_CLUSTER_VERSION = "cluster_version";
const char *const OB_BACKUP_SUFFIX=".obbak";
const char *const OB_ARCHIVE_SUFFIX=".obarc";
const char *const OB_STR_MIN_RESTORE_SCN_DISPLAY = "min_restore_scn_display";
enum ObBackupFileType
{
@ -1023,6 +1024,10 @@ public:
static int get_backup_scn(const uint64_t &tenant_id, share::SCN &scn);
static int check_tenant_data_version_match(const uint64_t tenant_id, const uint64_t data_version);
static int get_full_replica_num(const uint64_t tenant_id, int64_t &replica_num);
static int backup_scn_to_str(const uint64_t tenant_id, const share::SCN &scn, char *buf, int64_t buf_len);
static int get_tenant_sys_time_zone_wrap(const uint64_t tenant_id,
ObFixedLengthString<common::OB_MAX_TIMESTAMP_TZ_LENGTH> &time_zone,
ObTimeZoneInfoWrap &time_zone_info_wrap);
private:
static const int64_t RETRY_INTERVAL = 10 * 1000 * 1000;
static const int64_t MAX_RETRY_TIMES = 3;

View File

@ -11989,6 +11989,25 @@ int ObInnerTableSchema::all_virtual_backup_set_files_schema(ObTableSchema &table
major_turn_id_default,
major_turn_id_default); //default_value
}
if (OB_SUCC(ret)) {
ObObj min_restore_scn_display_default;
min_restore_scn_display_default.set_varchar(ObString::make_string(""));
ADD_COLUMN_SCHEMA_T("min_restore_scn_display", //column_name
++column_id, //column_id
0, //rowkey_id
0, //index_id
0, //part_key_pos
ObVarcharType, //column_type
CS_TYPE_INVALID, //column_collation_type
OB_INNER_TABLE_DEFAULT_VALUE_LENTH, //column_length
-1, //column_precision
-1, //column_scale
false, //is_nullable
false, //is_autoincrement
min_restore_scn_display_default,
min_restore_scn_display_default); //default_value
}
table_schema.set_index_using_type(USING_BTREE);
table_schema.set_row_store_type(ENCODING_ROW_STORE);
table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL);

View File

@ -11997,6 +11997,21 @@ int ObInnerTableSchema::all_virtual_backup_set_files_ora_schema(ObTableSchema &t
false, //is_nullable
false); //is_autoincrement
}
if (OB_SUCC(ret)) {
ADD_COLUMN_SCHEMA("MIN_RESTORE_SCN_DISPLAY", //column_name
++column_id, //column_id
0, //rowkey_id
0, //index_id
0, //part_key_pos
ObVarcharType, //column_type
CS_TYPE_UTF8MB4_BIN, //column_collation_type
OB_INNER_TABLE_DEFAULT_VALUE_LENTH, //column_length
2, //column_precision
-1, //column_scale
true, //is_nullable
false); //is_autoincrement
}
table_schema.set_index_using_type(USING_BTREE);
table_schema.set_row_store_type(ENCODING_ROW_STORE);
table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL);

View File

@ -660,7 +660,7 @@ int ObInnerTableSchema::cdb_ob_backup_set_files_schema(ObTableSchema &table_sche
table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset()));
if (OB_SUCC(ret)) {
if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, BACKUP_SET_ID, DEST_ID, INCARNATION, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN NULL ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, FILE_STATUS, CASE WHEN END_TS = 0 THEN 0 ELSE ROUND((END_TS - START_TS)/1000/1000,0) END AS ELAPSED_SECONDES, PLUS_ARCHIVELOG, START_REPLAY_SCN, CASE WHEN START_REPLAY_SCN = 0 THEN NULL ELSE SCN_TO_TIMESTAMP(START_REPLAY_SCN) END AS START_REPLAY_SCN_DISPLAY, MIN_RESTORE_SCN, CASE WHEN MIN_RESTORE_SCN = 0 THEN NULL ELSE SCN_TO_TIMESTAMP(MIN_RESTORE_SCN) END AS MIN_RESTORE_SCN_DISPLAY, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, COMMENT, ENCRYPTION_MODE, PASSWD, TENANT_COMPATIBLE, BACKUP_COMPATIBLE, PATH, CLUSTER_VERSION, CONSISTENT_SCN, MINOR_TURN_ID, MAJOR_TURN_ID FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_SET_FILES )__"))) {
if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT TENANT_ID, BACKUP_SET_ID, DEST_ID, INCARNATION, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN NULL ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, FILE_STATUS, CASE WHEN END_TS = 0 THEN 0 ELSE ROUND((END_TS - START_TS)/1000/1000,0) END AS ELAPSED_SECONDES, PLUS_ARCHIVELOG, START_REPLAY_SCN, CASE WHEN START_REPLAY_SCN = 0 THEN NULL ELSE SCN_TO_TIMESTAMP(START_REPLAY_SCN) END AS START_REPLAY_SCN_DISPLAY, MIN_RESTORE_SCN, CASE WHEN MIN_RESTORE_SCN_DISPLAY != '' THEN MIN_RESTORE_SCN_DISPLAY WHEN MIN_RESTORE_SCN = 0 THEN NULL ELSE SCN_TO_TIMESTAMP(MIN_RESTORE_SCN) END AS MIN_RESTORE_SCN_DISPLAY, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, COMMENT, ENCRYPTION_MODE, PASSWD, TENANT_COMPATIBLE, BACKUP_COMPATIBLE, PATH, CLUSTER_VERSION, CONSISTENT_SCN, MINOR_TURN_ID, MAJOR_TURN_ID FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_SET_FILES )__"))) {
LOG_ERROR("fail to set view_definition", K(ret));
}
}

View File

@ -760,7 +760,7 @@ int ObInnerTableSchema::dba_ob_backup_set_files_schema(ObTableSchema &table_sche
table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset()));
if (OB_SUCC(ret)) {
if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT BACKUP_SET_ID, DEST_ID, INCARNATION, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN NULL ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, FILE_STATUS, CASE WHEN END_TS = 0 THEN 0 ELSE ROUND((END_TS - START_TS)/1000/1000,0) END AS ELAPSED_SECONDES, PLUS_ARCHIVELOG, START_REPLAY_SCN, CASE WHEN START_REPLAY_SCN = 0 THEN NULL ELSE SCN_TO_TIMESTAMP(START_REPLAY_SCN) END AS START_REPLAY_SCN_DISPLAY, MIN_RESTORE_SCN, CASE WHEN MIN_RESTORE_SCN = 0 THEN NULL ELSE SCN_TO_TIMESTAMP(MIN_RESTORE_SCN) END AS MIN_RESTORE_SCN_DISPLAY, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, COMMENT, ENCRYPTION_MODE, PASSWD, TENANT_COMPATIBLE, BACKUP_COMPATIBLE, PATH, CLUSTER_VERSION, CONSISTENT_SCN, MINOR_TURN_ID, MAJOR_TURN_ID FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_SET_FILES WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) {
if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT BACKUP_SET_ID, DEST_ID, INCARNATION, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, USEC_TO_TIME(START_TS) AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN NULL ELSE USEC_TO_TIME(END_TS) END AS END_TIMESTAMP, STATUS, FILE_STATUS, CASE WHEN END_TS = 0 THEN 0 ELSE ROUND((END_TS - START_TS)/1000/1000,0) END AS ELAPSED_SECONDES, PLUS_ARCHIVELOG, START_REPLAY_SCN, CASE WHEN START_REPLAY_SCN = 0 THEN NULL ELSE SCN_TO_TIMESTAMP(START_REPLAY_SCN) END AS START_REPLAY_SCN_DISPLAY, MIN_RESTORE_SCN, CASE WHEN MIN_RESTORE_SCN_DISPLAY != '' THEN MIN_RESTORE_SCN_DISPLAY WHEN MIN_RESTORE_SCN = 0 THEN NULL ELSE SCN_TO_TIMESTAMP(MIN_RESTORE_SCN) END AS MIN_RESTORE_SCN_DISPLAY, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, COMMENT, ENCRYPTION_MODE, PASSWD, TENANT_COMPATIBLE, BACKUP_COMPATIBLE, PATH, CLUSTER_VERSION, CONSISTENT_SCN, MINOR_TURN_ID, MAJOR_TURN_ID FROM OCEANBASE.__ALL_VIRTUAL_BACKUP_SET_FILES WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) {
LOG_ERROR("fail to set view_definition", K(ret));
}
}

View File

@ -1560,7 +1560,7 @@ int ObInnerTableSchema::dba_ob_backup_set_files_ora_schema(ObTableSchema &table_
table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset()));
if (OB_SUCC(ret)) {
if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT BACKUP_SET_ID, DEST_ID, INCARNATION, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN NULL ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, FILE_STATUS, CASE WHEN END_TS = 0 THEN 0 ELSE ROUND((END_TS - START_TS)/1000/1000,0) END AS ELAPSED_SECONDES, PLUS_ARCHIVELOG, START_REPLAY_SCN, SCN_TO_TIMESTAMP(START_REPLAY_SCN) AS START_REPLAY_SCN_DISPLAY, MIN_RESTORE_SCN, SCN_TO_TIMESTAMP(MIN_RESTORE_SCN) AS MIN_RESTORE_SCN_DISPLAY, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, "COMMENT", ENCRYPTION_MODE, PASSWD, TENANT_COMPATIBLE, BACKUP_COMPATIBLE, PATH, CLUSTER_VERSION, CONSISTENT_SCN, MINOR_TURN_ID, MAJOR_TURN_ID FROM SYS.ALL_VIRTUAL_BACKUP_SET_FILES WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) {
if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT BACKUP_SET_ID, DEST_ID, INCARNATION, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, TO_CHAR(START_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') AS START_TIMESTAMP, CASE WHEN END_TS = 0 THEN NULL ELSE TO_CHAR(END_TS / (1000 * 60 * 60 * 24 * 1000) + TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') END AS END_TIMESTAMP, STATUS, FILE_STATUS, CASE WHEN END_TS = 0 THEN 0 ELSE ROUND((END_TS - START_TS)/1000/1000,0) END AS ELAPSED_SECONDES, PLUS_ARCHIVELOG, START_REPLAY_SCN, SCN_TO_TIMESTAMP(START_REPLAY_SCN) AS START_REPLAY_SCN_DISPLAY, MIN_RESTORE_SCN, CASE WHEN MIN_RESTORE_SCN_DISPLAY != '' THEN MIN_RESTORE_SCN_DISPLAY WHEN MIN_RESTORE_SCN = 0 THEN NULL ELSE TO_CHAR(SCN_TO_TIMESTAMP(MIN_RESTORE_SCN),'YYYY-MM-DDHH24:MI:SS.FF9') END AS MIN_RESTORE_SCN_DISPLAY, INPUT_BYTES, OUTPUT_BYTES, CASE WHEN END_TS = 0 THEN 0 ELSE OUTPUT_BYTES / ((END_TS - START_TS)/1000/1000) END AS OUTPUT_RATE_BYTES, EXTRA_BYTES AS EXTRA_META_BYTES, TABLET_COUNT, FINISH_TABLET_COUNT, MACRO_BLOCK_COUNT, FINISH_MACRO_BLOCK_COUNT, FILE_COUNT, META_TURN_ID, DATA_TURN_ID, RESULT, "COMMENT", ENCRYPTION_MODE, PASSWD, TENANT_COMPATIBLE, BACKUP_COMPATIBLE, PATH, CLUSTER_VERSION, CONSISTENT_SCN, MINOR_TURN_ID, MAJOR_TURN_ID FROM SYS.ALL_VIRTUAL_BACKUP_SET_FILES WHERE TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) {
LOG_ERROR("fail to set view_definition", K(ret));
}
}

View File

@ -1725,6 +1725,25 @@ int ObInnerTableSchema::all_backup_set_files_schema(ObTableSchema &table_schema)
major_turn_id_default,
major_turn_id_default); //default_value
}
if (OB_SUCC(ret)) {
ObObj min_restore_scn_display_default;
min_restore_scn_display_default.set_varchar(ObString::make_string(""));
ADD_COLUMN_SCHEMA_T("min_restore_scn_display", //column_name
++column_id, //column_id
0, //rowkey_id
0, //index_id
0, //part_key_pos
ObVarcharType, //column_type
CS_TYPE_INVALID, //column_collation_type
OB_INNER_TABLE_DEFAULT_VALUE_LENTH, //column_length
-1, //column_precision
-1, //column_scale
false, //is_nullable
false, //is_autoincrement
min_restore_scn_display_default,
min_restore_scn_display_default); //default_value
}
table_schema.set_index_using_type(USING_BTREE);
table_schema.set_row_store_type(ENCODING_ROW_STORE);
table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL);

View File

@ -2864,6 +2864,7 @@ all_backup_set_files_def = dict(
('consistent_scn', 'uint', 'false', '0'),
('minor_turn_id', 'int', 'false', '0'),
('major_turn_id', 'int', 'false', '0'),
('min_restore_scn_display', 'varchar:OB_INNER_TABLE_DEFAULT_VALUE_LENTH', 'false', ''),
],
)
def_table_schema(**all_backup_set_files_def)
@ -15847,11 +15848,13 @@ def_table_schema(
END AS START_REPLAY_SCN_DISPLAY,
MIN_RESTORE_SCN,
CASE
WHEN MIN_RESTORE_SCN = 0
THEN NULL
ELSE
SCN_TO_TIMESTAMP(MIN_RESTORE_SCN)
END AS MIN_RESTORE_SCN_DISPLAY,
WHEN MIN_RESTORE_SCN_DISPLAY != ''
THEN MIN_RESTORE_SCN_DISPLAY
WHEN MIN_RESTORE_SCN = 0
THEN NULL
ELSE
SCN_TO_TIMESTAMP(MIN_RESTORE_SCN)
END AS MIN_RESTORE_SCN_DISPLAY,
INPUT_BYTES,
OUTPUT_BYTES,
CASE
@ -22378,11 +22381,13 @@ def_table_schema(
END AS START_REPLAY_SCN_DISPLAY,
MIN_RESTORE_SCN,
CASE
WHEN MIN_RESTORE_SCN = 0
THEN NULL
ELSE
SCN_TO_TIMESTAMP(MIN_RESTORE_SCN)
END AS MIN_RESTORE_SCN_DISPLAY,
WHEN MIN_RESTORE_SCN_DISPLAY != ''
THEN MIN_RESTORE_SCN_DISPLAY
WHEN MIN_RESTORE_SCN = 0
THEN NULL
ELSE
SCN_TO_TIMESTAMP(MIN_RESTORE_SCN)
END AS MIN_RESTORE_SCN_DISPLAY,
INPUT_BYTES,
OUTPUT_BYTES,
CASE
@ -42965,7 +42970,14 @@ def_table_schema(
START_REPLAY_SCN,
SCN_TO_TIMESTAMP(START_REPLAY_SCN) AS START_REPLAY_SCN_DISPLAY,
MIN_RESTORE_SCN,
SCN_TO_TIMESTAMP(MIN_RESTORE_SCN) AS MIN_RESTORE_SCN_DISPLAY,
CASE
WHEN MIN_RESTORE_SCN_DISPLAY != ''
THEN MIN_RESTORE_SCN_DISPLAY
WHEN MIN_RESTORE_SCN = 0
THEN NULL
ELSE
TO_CHAR(SCN_TO_TIMESTAMP(MIN_RESTORE_SCN),'YYYY-MM-DDHH24:MI:SS.FF9')
END AS MIN_RESTORE_SCN_DISPLAY,
INPUT_BYTES,
OUTPUT_BYTES,
CASE

View File

@ -88,8 +88,26 @@ bool ObExternTenantLocalityInfoDesc::is_valid() const
&& !tenant_name_.is_empty()
&& !cluster_name_.is_empty()
&& !locality_.is_empty()
&& !primary_zone_.is_empty()
&& !sys_time_zone_.is_empty();
&& !primary_zone_.is_empty();
}
int ObExternTenantLocalityInfoDesc::assign(const ObExternTenantLocalityInfoDesc &that)
{
int ret = OB_SUCCESS;
if (OB_FAIL(sys_time_zone_wrap_.deep_copy(that.sys_time_zone_wrap_))) {
LOG_WARN("failed to deep copy", K(ret));
} else {
tenant_id_ = that.tenant_id_;
backup_set_id_ = that.backup_set_id_;
cluster_id_ = that.cluster_id_;
compat_mode_ = that.compat_mode_;
tenant_name_ = that.tenant_name_;
cluster_name_ = that.cluster_name_;
locality_ = that.locality_;
primary_zone_ = that.primary_zone_;
sys_time_zone_ = that.sys_time_zone_;
}
return ret;
}
/*

View File

@ -140,12 +140,14 @@ public:
cluster_name_(),
locality_(),
primary_zone_(),
sys_time_zone_() {}
sys_time_zone_(),
sys_time_zone_wrap_() {}
virtual ~ObExternTenantLocalityInfoDesc() {}
int assign(const ObExternTenantLocalityInfoDesc &that);
bool is_valid() const override;
INHERIT_TO_STRING_KV("ObExternBackupDataDesc", ObExternBackupDataDesc, K_(tenant_id), K_(backup_set_id), K_(cluster_id),
K_(compat_mode), K_(tenant_name), K_(cluster_name), K_(locality), K_(primary_zone), K_(sys_time_zone));
K_(compat_mode), K_(tenant_name), K_(cluster_name), K_(locality), K_(primary_zone), K_(sys_time_zone),
K_(sys_time_zone_wrap));
public:
uint64_t tenant_id_;
int64_t backup_set_id_;
@ -156,6 +158,7 @@ public:
Locality locality_;
PrimaryZone primary_zone_;
TimeZone sys_time_zone_;
ObTimeZoneInfoWrap sys_time_zone_wrap_;
};
struct ObExternBackupSetInfoDesc final : public ObExternBackupDataDesc