support display the accurate min_restore_timestamp
This commit is contained in:
parent
0f3fef7131
commit
deda754b81
@ -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;
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user