From e27abae61270c8b5e876fc5791ad9d297fa2607c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AD=86=E6=B6=A7?= <11277877+ysl1914336732@user.noreply.gitee.com> Date: Mon, 26 May 2025 11:22:16 +0800 Subject: [PATCH] add oracle_sys_views.sql --- scripts/sys_schema/views/oracle_sys_views.sql | 1846 +++++++++++++++++ 1 file changed, 1846 insertions(+) create mode 100644 scripts/sys_schema/views/oracle_sys_views.sql diff --git a/scripts/sys_schema/views/oracle_sys_views.sql b/scripts/sys_schema/views/oracle_sys_views.sql new file mode 100644 index 000000000..ebe5eb2ea --- /dev/null +++ b/scripts/sys_schema/views/oracle_sys_views.sql @@ -0,0 +1,1846 @@ +# dba_tab_cols +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_tab_cols( + OWNER, + TABLE_NAME, + COLUMN_NAME, + DATA_TYPE, + DATA_TYPE_MOD, + DATA_TYPE_OWNER, + DATA_LENGTH, + DATA_PRECISION, + DATA_SCALE, + NULLABLE, + COLUMN_ID, + DEFAULT_LENGTH, + DATA_DEFAULT, + NUM_DISTINCT, + LOW_VALUE, + HIGH_VALUE, + DENSITY, + NUM_NULLS, + NUM_BUCKETS, + LAST_ANALYZED, + SAMPLE_SIZE, + CHARACTER_SET_NAME, + CHAR_COL_DECL_LENGTH, + GLOBAL_STATS, + USER_STATS, + AVG_COL_LEN, + CHAR_LENGTH, + CHAR_USED, + V80_FMT_IMAGE, + DATA_UPGRADED, + HIDDEN_COLUMN, + VIRTUAL_COLUMN, + SEGMENT_COLUMN_ID, + INTERNAL_COLUMN_ID, + HISTOGRAM, + QUALIFIED_COL_NAME, + USER_GENERATED, + DEFAULT_ON_NULL, + IDENTITY_COLUMN, + SENSITIVE_COLUMN, + EVALUATION_EDITION, + UNUSABLE_BEFORE, + UNUSABLE_BEGINNING, + COLLATION, + COLLATED_COLUMN_ID +) +AS +SELECT DISTINCT tmp.table_schema,tmp.table_name,tmp.column_name, tmp.data_type, + NULL,NULL, ic_full.len, tmp.numeric_precision, tmp.numeric_scale, + tmp.isnullable, tmp.ordinal_position, tmp.character_maximum_length, tmp.column_default, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, tmp.character_octet_length, 'B', + NULL, NULL, 'NO', ic_full.isvirtual, NULL, ic_full.pos, + NULL, NULL,NULL,NULL,NULL, + NULL, NULL, NULL, NULL, NULL, + NULL +FROM( + SELECT c.table_schema,c.table_name, c.column_name,c.data_type, + c.numeric_precision, c.numeric_scale, c.isnullable, c.ordinal_position, c.character_maximum_length, c.column_default, c.character_octet_length, it.table_id + FROM( + SELECT table_schema, table_name, concat(table_schema,'/',table_name) as fulname, column_name, data_type, numeric_precision, + numeric_scale, + CASE + WHEN is_nullable='NO' THEN 'N' + ELSE 'Y' + END AS isnullable, + ordinal_position, character_maximum_length, column_default, character_octet_length + FROM information_schema.columns + )c + LEFT JOIN ( + SELECT table_id, name + FROM information_schema.innodb_tablestats + )it + ON c.fulname=it.name +)tmp +LEFT JOIN( + SELECT distinct t.name,t.table_id,t.len,t.pos, + CASE + WHEN t.isvirtualc='YES' THEN 'YES' + ELSE 'NO' + END AS isvirtual + FROM( + SELECT ic.name,ic.table_id, ic.len, ic.pos, iv.isvirtualc + FROM( + SELECT name, table_id, len, pos + FROM information_schema.innodb_columns + )ic + LEFT JOIN( + SELECT table_id, pos, 'YES' AS isvirtualc + FROM information_schema.innodb_virtual + )iv + ON ic.table_id=iv.table_id AND ic.pos=iv.pos + )t +)ic_full +ON tmp.table_id=ic_full.table_id AND tmp.column_name=ic_full.name; + +# dba_tab_columns +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_tab_columns( + OWNER, + TABLE_NAME, + COLUMN_NAME, + DATA_TYPE, + DATA_TYPE_MOD, + DATA_TYPE_OWNER, + DATA_LENGTH, + DATA_PRECISION, + DATA_SCALE, + NULLABLE, + COLUMN_ID, + DEFAULT_LENGTH, + DATA_DEFAULT, + NUM_DISTINCT, + LOW_VALUE, + HIGH_VALUE, + DENSITY, + NUM_NULLS, + NUM_BUCKETS, + LAST_ANALYZED, + SAMPLE_SIZE, + CHARACTER_SET_NAME, + CHAR_COL_DECL_LENGTH, + GLOBAL_STATS, + USER_STATS, + AVG_COL_LEN, + CHAR_LENGTH, + CHAR_USED, + V80_FMT_IMAGE, + DATA_UPGRADED, + HISTOGRAM, + DEFAULT_ON_NULL, + IDENTITY_COLUMN, + SENSITIVE_COLUMN, + EVALUATION_EDITION, + UNUSABLE_BEFORE, + UNUSABLE_BEGINNING, + COLLATION +) +AS +SELECT DISTINCT c.table_schema, c.table_name, c.column_name, c.data_type, + NULL, NULL, ic.len, c.numeric_precision, c.numeric_scale, + c.isnullable, c.ordinal_position, c.character_maximum_length, c.column_default, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, c.character_octet_length, 'B',NULL, + NULL,NULL,NULL,NULL, NULL, + NULL, NULL, NULL, NULL +FROM( + SELECT table_schema, table_name, concat(table_schema,'/',table_name) as fulname, column_name, data_type, numeric_precision, + numeric_scale, + CASE + WHEN is_nullable='NO' THEN 'N' + ELSE 'Y' + END AS isnullable, + ordinal_position, character_maximum_length, column_default, character_octet_length + FROM information_schema.columns +)c + LEFT JOIN( + SELECT table_id, substring_index(name,'/',-1) AS table_actual_name + FROM information_schema.innodb_tablestats +)tmp +ON c.fulname=tmp.table_actual_name +LEFT JOIN( + SELECT name, table_id, len + FROM information_schema.innodb_columns + )ic + ON tmp.table_id=ic.table_id AND c.table_name=ic.name; + +# user_tab_columns +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.user_tab_columns( + OWNER, + TABLE_NAME, + COLUMN_NAME, + DATA_TYPE, + DATA_TYPE_MOD, + DATA_TYPE_OWNER, + DATA_LENGTH, + DATA_PRECISION, + DATA_SCALE, + NULLABLE, + COLUMN_ID, + DEFAULT_LENGTH, + DATA_DEFAULT, + NUM_DISTINCT, + LOW_VALUE, + HIGH_VALUE, + DENSITY, + NUM_NULLS, + NUM_BUCKETS, + LAST_ANALYZED, + SAMPLE_SIZE, + CHARACTER_SET_NAME, + CHAR_COL_DECL_LENGTH, + GLOBAL_STATS, + USER_STATS, + AVG_COL_LEN, + CHAR_LENGTH, + CHAR_USED, + V80_FMT_IMAGE, + DATA_UPGRADED, + HISTOGRAM, + DEFAULT_ON_NULL, + IDENTITY_COLUMN, + EVALUATION_EDITION, + UNUSABLE_BEFORE, + UNUSABLE_BEGINNING, + COLLATION +) +AS +SELECT DISTINCT c.table_schema, c.table_name, c.column_name, c.data_type, NULL, +NULL, ic.len, c.numeric_precision, c.numeric_scale, c.isnullable, +c.ordinal_position, NULL, c.column_default, NULL, NULL, +NULL, NULL, NULL, NULL, NULL, +NULL, NULL, NULL, NULL, NULL, +NULL, c.character_octet_length,'B', NULL,NULL, +NULL,NULL, NULL, NULL, NULL, NULL, NULL +FROM( + SELECT table_schema, table_name, concat(table_schema,'/',table_name) as fulname, column_name, data_type, numeric_precision, + numeric_scale, + CASE + WHEN is_nullable='NO' THEN 'N' + ELSE 'Y' + END AS isnullable, + ordinal_position, column_default, character_octet_length + FROM information_schema.columns +)c + LEFT JOIN( + SELECT table_id, substring_index(name,'/',-1) AS table_actual_name + FROM information_schema.innodb_tablestats +)tmp +ON c.fulname=tmp.table_actual_name +LEFT JOIN( + SELECT name, table_id, len + FROM information_schema.innodb_columns +)ic +ON tmp.table_id=ic.table_id AND c.table_name=ic.name; + + +# dba_tab_partitions +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_tab_partitions( + TABLE_OWNER, + TABLE_NAME, + COMPOSITE, + PARTITION_NAME, + SUBPARTITION_COUNT, + HIGH_VALUE, + HIGH_VALUE_LENGTH, + PARTITION_POSITION, + TABLESPACE_NAME, + PCT_FREE, + PCT_USED, + INI_TRANS, + MAX_TRANS, + INITIAL_EXTENT, + NEXT_EXTENT, + MIN_EXTENT, + MAX_EXTENT, + MAX_SIZE, + PCT_INCREASE, + FREELISTS, + FREELIST_GROUPS, + `LOGGING`, + COMPRESSION, + COMPRESS_FOR, + NUM_ROWS, + BLOCKS, + EMPTY_BLOCKS, + AVG_SPACE, + CHAIN_CNT, + AVG_ROW_LEN, + SAMPLE_SIZE, + LAST_ANALYZED, + BUFFER_POOL, + FLASH_CACHE, + CELL_FLASH_CACHE, + CLOBAL_STATS, + USER_STATS, + IS_NESTED, + PARENT_TABLE_PARTITION, + `INTERVAL`, + `SEGMENT_CREATED`, + `INDEXING`, + `READ_ONLY`, + `INMEMORY`, + `INMEMORY_PRIORITY`, + INMEMORY_DISTRIBUTE, + INMEMORY_COMPRESSION, + INMEMORY_DUPLICATE, + CELLMEMORY, + INMEMORY_SERVICE, + INMEMORY_SERVICE_NAME, + MEMOPTIMIZE_READ, + MEMOPTIMIZE_WRITE +) +AS +SELECT DISTINCT p.table_schema, p.table_name, p.issubpartitioned, p.partition_name, + CASE + WHEN p.cntsp is NULL THEN 0 + ELSE p.cntsp + END AS subpartition_count, + p.partition_expression, p.hlen, p.partition_ordinal_position, p.tspacename, + NULL,NULL,NULL,NULL,NULL, + NULL,NULL,NULL,NULL,NULL, + NULL, NULL, NULL, 'DISABLED', "", + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, p.indexstate, 'NO','DISABLED', + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, 'DISABLED','DISABLED' +FROM( + SELECT p1.table_schema, p1.table_name, p1.issubpartitioned, p1.partition_name, + p2.cntsp, p1.partition_expression, p1.hlen, p1.partition_ordinal_position, p1.tspacename, p1.indexstate + FROM( + SELECT distinct concat(concat(table_schema,'/',table_name),'#',partition_name) as fulname, table_schema, table_name, partition_name, + CASE + WHEN subpartition_name is NULL THEN 'NO' + ELSE 'YES' + END AS issubpartitioned, + partition_expression,length(partition_expression) as hlen,partition_ordinal_position, concat(table_schema,'/',concat(concat(table_name,'#','p'),'#',partition_name)) as tspacename, + CASE + WHEN index_length=0 THEN 'OFF-INDEXING' + ELSE 'ON-INDEXING' + END AS indexstate + FROM information_schema.partitions + WHERE partition_name is not NULL + )p1 + LEFT JOIN( + SELECT concat(concat(table_schema,'/',table_name),'#',partition_name) as fulname, count(concat(concat(table_schema,'/',table_name),'#',partition_name)) as cntsp + FROM information_schema.partitions + WHERE subpartition_name is not NULL + GROUP BY fulname + )p2 + ON p1.fulname=p2.fulname + )p; + +# dba_tablespaces +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_tablespaces( + TABLESPACE_NAME, + BLOCK_SIZE, + INITIAL_EXTENT, + NEXT_EXTENT, + MIN_EXTENTS, + MAX_EXTENTS, + MAX_SIZE, + PCT_INCREASE, + MIN_EXTLEN, + STATUS, + CONTENTS, + `LOGGING`, + FORCE_LOGGING, + EXTENT_MANAGEMENT, + ALLOC_ATION_TYPE, + PLUGGED_IN, + SEGMENT_SPACE_MANAGEMENT, + DEF_TAB_COMPRESSION, + RETENTION, + BIGFILE, + PREDICATE_EVALUATION, + ENCRYPTED, + COMPRESS_FOR, + DEF_INMEMORY, + DEF_INMEMORY_PRIORITY, + DEF_INMEMORY_DISTRIBUTE, + DEF_INMEMORY_COMPRESSION, + DEF_INMEMORY_DUPLICATE, + SHARED, + DEF_INDEX_COMPRESSION, + INDEX_COMPRESS_FOR, + DEF_CELLMEMORY, + DEF_INMEMORY_SERVICE, + DEF_INMEMORY_SERVICE_NAME, + LOST_WRITE_PROTECT, + CHUNK_TABLESPACE +) +AS +SELECT DISTINCT tbs.name, tbs.fs_block_size, tbs.file_size, NULL, NULL, + NULL, tbs.page_size, NULL, NULL, 'ONLINE', + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, 'DISABLED', NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL +FROM( + SELECT name,fs_block_size, file_size,page_size + FROM information_schema.innodb_tablespaces +)tbs; + +# dba_tab_privs +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_tab_privs( + GRANTEE, + OWNER, + TABLE_NAME, + GRANTOR, + PRIVILEGE, + GRANTABLE, + HIERARCHY, + COMMON, + TYPE, + INHERITED +) +AS +SELECT DISTINCT tp.relgrantee, tp.table_schema, tp.table_name, +mtp.relgrantor, tp.privilege_type, tp.is_grantable, 'NO', +NULL, t.table_type, NULL +FROM( + SELECT substring_index(substring_index(grantee, '.', -1),'\'',1) as relgrantee,table_schema, table_name, privilege_type, is_grantable + FROM information_schema.table_privileges +)tp +LEFT JOIN( + SELECT table_name, substring_index(grantor,'@',1) as relgrantor + FROM mysql.tables_priv +)mtp +ON tp.table_name=mtp.table_name +LEFT JOIN( + SELECT table_name,table_type + FROM information_schema.tables +)t +ON tp.table_name=t.table_name; + + +# all_users +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.all_users( + USERNAME, + USER_ID, + CREATED, + COMMON, + ORACLE_MAINTAINED, + INHERITED, + DEFAULT_COLLATION, + IMPLICIT, + ALL_SHARD +) +AS +SELECT DISTINCT u.reluser, NULL, NULL, u.common, + 'N', NULL, NULL, NULL,NULL +FROM( + SELECT substring_index(user,'.',-1) as reluser, + CASE + WHEN host='localhost' OR host='127.0.0.1' THEN 'NO' + ELSE 'YES' + END AS common + FROM mysql.user +)u; + +# dba_users +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_users( + USERNAME, + USER_ID, + PASSWORD, + ACCOUNT_STATUS, + LOCK_DATE, + EXPIRY_DATE, + DEFAULT_TABLESPACE, + TEMPORARY_TABLESPACE, + LOCAL_TEMP_TABLESPACE, + CREATED, + PROFILE, + INITIAL_RSRC_CONSUMER_GROUP, + EXTERNAL_NAME, + PASSWORD_VERSIONS, + EDITIONS_ENABLED, + AUTHENTICATION_TYPE, + PROXY_ONLY_CONNECT, + COMMON, + LAST_LOGIN, + ORACLE_MAINTAINED, + INHERITED, + DEFAULT_COLLATION, + IMPLICIT, + ALL_SHARD, + PASSWORD_CHANGE_DATE +) +AS +SELECT DISTINCT u.reluser, NULL, u.password, u.status, + NULL, u.expiry_date, NULL, NULL, NULL, + NULL, u.profile, NULL, NULL, NULL, + NULL, u.plugin, NULL, u.common, NULL, + 'N', NULL, NULL, NULL, NULL, + u.password_last_changed +FROM( + SELECT substring_index(user,'.',-1) as reluser, plugin AS password, + CASE + WHEN account_locked='N' AND password_expired='N' THEN 'OPEN' + WHEN account_locked='N' AND password_expired='Y' THEN 'EXPIRED' + WHEN account_locked='Y' AND password_expired='N' THEN 'LOCKED' + ELSE 'EXPIRED & LOCKED' + END AS status, + date_add(password_last_changed,interval password_lifetime day) as expiry_date, + CASE + WHEN profile_name is NULL then 'DEFAULT' + ELSE profile_name + END AS profile, plugin, + CASE + WHEN host='localhost' OR host='127.0.0.1' THEN 'NO' + ELSE 'YES' + END AS common, password_last_changed + FROM mysql.user +)u; + +# all_tables +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.all_tables( + OWNER, + TABLE_NAME, + TABLESPACE_NAME, + CLUSTER_NAME, + IOT_NAME, + STATUS, + PCT_FREE, + PCT_USED, + INI_TRANS, + MAX_TRANS, + INITIAL_EXTENT, + NEXT_EXTENT, + MIN_EXTENTS, + MAX_EXTENTS, + PCT_INCREASE, + FREELISTS, + FREELIST_GROUPS, + `LOGGING`, + BACKED_UP, + NUM_ROWS, + BLOCKS, + EMPTY_BLOCKS, + AVG_SPACE, + CHAIN_CNT, + AVG_ROW_LEN, + AVG_SPACE_FREELIST_BLOCKS, + NUM_FREELIST_BLOCKS, + DEGREE, + INSTANCES, + CACHE, + TABLE_LOCK, + SAMPLE_SIZE, + LAST_ANALYZED, + PARTITIONED, + IOT_TYPE, + TEMPORARY, + SECONDARY, + NESTED, + BUFFER_POOL, + FLASH_CACHE, + CELL_FLASH_CACHE, + ROW_MOVEMENT, + GLOBAL_STATS, + USER_STATS, + DURATION, + SKIP_CORRUPT, + MONITORING, + CLUSTER_OWNER, + DEPENDENCIES, + COMPRESSION, + COMPRESS_FOR, + DROPPED, + READ_ONLY, + SEGMENT_CREATED, + RESULT_CACHE, + CLUSTERING, + ACTIVITY_TRACKING, + DML_TIMESTAMP, + HAS_IDENTITY, + CONTAINER_DATA, + INMEMORY, + INMEMORY_PRIORITY, + INMEMORY_DISTRIBUTE, + INMEMORY_COMPRESSION, + INMEMORY_DUPLICATE, + DEFAULT_COLLATION, + DUPLICATED, + SHARDED, + EXTERNAL, + HYBRID, + CELLMEMORY, + CONTAINERS_DEFAULT, + CONTAINER_MAP, + EXTENDED_DATA_LINK, + EXTENDED_DATA_LINK_MAP, + INMEMORY_SERVICE, + INMEMORY_SERVICE_NAME, + CONTAINER_MAP_OBJECT, + MEMOPTIMIZE_READ, + MEMOPTIMIZE_WRITE, + HAS_SENSITIVE_COLUMN, + ADMIT_NULL, + DATA_LINK_DML_ENABLED, + LOGICAL_REPLICATION +) +AS +SELECT DISTINCT t.table_schema, t.table_name, ts.name, NULL, + NULL, 'VALID', 0, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + t.table_rows, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, t.ispartitioned, + NULL, 'N', NULL, 'NO', NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, 'NO', NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, 'DISABLED',NULL,NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL +FROM( + SELECT table_schema, table_name, table_rows, + CASE + WHEN create_options='partitioned' THEN 'YES' + ELSE 'NO' + END AS ispartitioned, + concat(table_schema,'/',table_name) AS table_full_name + FROM information_schema.tables +)t +LEFT JOIN( + SELECT SPACE, substring_index(name, '#', 1) AS table_full_name + FROM information_schema.innodb_tables + ) temp_it + ON t.table_full_name = temp_it.table_full_name + INNER JOIN information_schema.innodb_tablespaces ts ON ts.space = temp_it.space; + +# dba_constraints +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_constraints( + OWNER, + CONSTRAINT_NAME, + CONSTRAINT_TYPE, + TABLE_NAME, + SEARCH_CONDITION, + SEARCH_CONDITION_VC, + R_OWNER, + R_CONSTRAINT_NAME, + DELETE_RULE, + STATUS, + DEFERRABLE, + DEFERRED, + VALIDATED, + `GENERATED`, + `BAD`, + `RELY`, + `LAST_CHANGE`, + `INDEX_OWNER`, + `INDEX_NAME`, + INVALID, + VIEW_RELATED, + ORIGIN_CON_ID +) +AS +SELECT tc.table_schema, tc.constraint_name, tc.type, tc.table_name, + cc.clause0, cc.clause, tc.constraint_schema, rc.unique_constraint_name, rc.delete_rule, + tc.status, 'NOT DEFERRABLE', 'IMMEDIATE', 'VALIDATED', 'USER NAME', + "", "", "", tc.indexowner, tc.indexname, + "", "", 0 +FROM ( + SELECT table_schema,constraint_name, + CASE + WHEN constraint_type='UNIQUE' THEN 'U' + WHEN constraint_type='PRIMARY KEY' THEN 'P' + WHEN constraint_type='FOREIGN KEY' THEN 'F' + WHEN constraint_type='CHECK' THEN 'C' + ELSE NULL + END AS type, table_name, constraint_schema, + CASE + WHEN enforced='YES' THEN 'ENABLED' + ELSE 'DISABLED' + END AS status, + CASE + WHEN constraint_type='UNIQUE' OR constraint_type='PRIMARY KEY' THEN table_schema + ELSE NULL + END AS indexowner, + CASE + WHEN constraint_type='UNIQUE' OR constraint_type='PRIMARY KEY' THEN constraint_name + ELSE NULL + END AS indexname + FROM information_schema.table_constraints +)tc + LEFT JOIN( + SELECT constraint_name, substring_index(substring_index(check_clause, '(', -1),')',1) as clause0, substring_index(substring_index(check_clause, '(', -1),')',1) as clause + FROM information_schema.check_constraints + )cc + ON cc.constraint_name=tc.constraint_name + LEFT JOIN( + SELECT constraint_name, unique_constraint_name, delete_rule + FROM information_schema.referential_constraints +)rc + ON rc.constraint_name=tc.constraint_name; + +# all_objects +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.all_objects( + OWNER, + OBJECT_NAME, + SUBOBJECT_NAME, + OBJECT_ID, + DATA_OBJECT_ID, + OBJECT_TYPE, + CREATED, + LAST_DDL_TIME, + TIMESTAMP, + STATUS, + TEMPORARY, + `GENERATED`, + `SECONDARY`, + `NAMESPACE`, + `EDITION_NAME`, + `SHARING`, + `EDITIONABLE`, + ORACLE_MAINTAINED, + APPLICATION, + DEFAULT_COLLATION, + DUPLICATED, + SHARDED, + CREATED_APPID, + CREATED_VSNID, + MODIFIED_APPID, + MODIFIED_VSNID +) +AS +SELECT DISTINCT tt.owner, tt.object_name, tt.subobject_name, tt.object_id, + tt.tablespace_id,tt.object_type, tc.create_time, tc.ddlt, '2022-11-24 17:58:23', + 'VALID', 'N', 'N', 'N', tt.tablespace_name, + "", NULL, 'Y', 'N', 'N', + "", NULL, NULL, "", "", + "", "" +FROM( + SELECT DISTINCT t1.owner, t1.object_name, t1.subobject_name, t1.object_id, t1.object_type, + CASE + WHEN t1.name is NULL THEN "" + ELSE t1.name + END AS tablespace_name, + CASE + WHEN t1.space is NULL THEN "" + ELSE t1.space + END AS tablespace_id + FROM ( + SELECT distinct it.owner, it.object_name, it.subobject_name, it.object_id, it.object_type,itsp.name,itsp.space + FROM( + SELECT name,substring_index(name,'/',1) as owner, + CASE + WHEN locate('#',name)=0 THEN substring_index(name,'/',-1) + ELSE substring_index(substring_index(name,'/',-1),'#',1) + END AS object_name, + CASE + WHEN locate('#',name)=0 THEN "" + ELSE substring_index(name, '/',-1) + END AS subobject_name, + table_id as object_id, 'TABLE' AS object_type + FROM information_schema.innodb_tables + )it + LEFT JOIN( + SELECT space,name + FROM information_schema.innodb_tablespaces + )itsp + ON it.name=itsp.name + )t1 + UNION( + SELECT distinct table_schema as owner, table_name as object_name,"" AS subobject_name, + "" AS object_id,'VIEW' AS object_type,"" AS tablespace_name, "" AS tablespace_id + FROM information_schema.views) + UNION( + SELECT distinct itt.owner, iit.object_name, iit.subobject_name, iit.object_id,iit.object_type, "" AS tablespace_name, "" AS tablespace_id + FROM + ( + SELECT substring_index(name,'/',1) as owner, table_id + FROM information_schema.innodb_tables + )itt + INNER JOIN( + SELECT table_id, name as object_name,"" AS subobject_name, index_id AS object_id, 'INDEX' as object_type, "" AS tablespace_name, "" AS tablespace_id + FROM information_schema.innodb_indexes + )iit + ON iit.table_id=itt.table_id + ) +)tt +LEFT JOIN( + SELECT distinct table_schema, table_name, create_time, create_time as ddlt + FROM information_schema.tables + UNION ( + SELECT distinct table_schema, + CASE + WHEN partition_name is not NULL THEN concat(concat(table_name,'#','p'),'#',partition_name) + ELSE NULL + END AS table_name, create_time ,create_time as ddlt + FROM information_schema.partitions where partition_name is not NULL + ) +)tc +ON tc.table_name=tt.object_name AND tc.table_schema=tt.owner; + +# dba_objects +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_objects( + OWNER, + OBJECT_NAME, + SUBOBJECT_NAME, + OBJECT_ID, + DATA_OBJECT_ID, + OBJECT_TYPE, + CREATED, + LAST_DDL_TIME, + TIMESTAMP, + STATUS, + TEMPORARY, + `GENERATED`, + `SECONDARY`, + `NAMESPACE`, + `EDITION_NAME`, + `SHARING`, + `EDITIONABLE`, + ORACLE_MAINTAINED, + APPLICATION, + DEFAULT_COLLATION, + DUPLICATED, + SHARDED, + CREATED_APPID, + CREATED_VSNID, + MODIFIED_APPID, + MODIFIED_VSNID +) +AS +SELECT DISTINCT tt.owner, tt.object_name, tt.subobject_name, tt.object_id, + tt.tablespace_id,tt.object_type, tc.create_time, tc.ddlt, '2022-11-24 17:58:23', + 'VALID', 'N', 'N', 'N', tt.tablespace_name, + "", NULL, 'Y', 'N', 'N', + "", NULL, NULL, "", "", + "", "" +FROM( + SELECT DISTINCT t1.owner, t1.object_name, t1.subobject_name, t1.object_id, t1.object_type, + CASE + WHEN t1.name is NULL THEN "" + ELSE t1.name + END AS tablespace_name, + CASE + WHEN t1.space is NULL THEN "" + ELSE t1.space + END AS tablespace_id + FROM ( + SELECT distinct it.owner, it.object_name, it.subobject_name, it.object_id, it.object_type,itsp.name,itsp.space + FROM( + SELECT name,substring_index(name,'/',1) as owner, + CASE + WHEN locate('#',name)=0 THEN substring_index(name,'/',-1) + ELSE substring_index(substring_index(name,'/',-1),'#',1) + END AS object_name, + CASE + WHEN locate('#',name)=0 THEN "" + ELSE substring_index(name, '/',-1) + END AS subobject_name, + table_id as object_id, 'TABLE' AS object_type + FROM information_schema.innodb_tables + )it + LEFT JOIN( + SELECT space,name + FROM information_schema.innodb_tablespaces + )itsp + ON it.name=itsp.name + )t1 + UNION( + SELECT distinct table_schema as owner, table_name as object_name,"" AS subobject_name, + "" AS object_id,'VIEW' AS object_type,"" AS tablespace_name, "" AS tablespace_id + FROM information_schema.views) + UNION( + SELECT distinct itt.owner, iit.object_name, iit.subobject_name, iit.object_id,iit.object_type, "" AS tablespace_name, "" AS tablespace_id + FROM + ( + SELECT substring_index(name,'/',1) as owner, table_id + FROM information_schema.innodb_tables + )itt + INNER JOIN( + SELECT table_id, name as object_name,"" AS subobject_name, index_id AS object_id, 'INDEX' as object_type, "" AS tablespace_name, "" AS tablespace_id + FROM information_schema.innodb_indexes + )iit + ON iit.table_id=itt.table_id + ) +)tt +LEFT JOIN( + SELECT distinct table_schema, table_name, create_time, create_time as ddlt + FROM information_schema.tables + UNION ( + SELECT distinct table_schema, + CASE + WHEN partition_name is not NULL THEN concat(concat(table_name,'#','p'),'#',partition_name) + ELSE NULL + END AS table_name, create_time ,create_time as ddlt + FROM information_schema.partitions where partition_name is not NULL + ) +)tc +ON tc.table_name=tt.object_name AND tc.table_schema=tt.owner; + +# DBA_PART_KEY_COLUMNS +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_part_key_columns ( + owner, + name, + object_type, + column_name, + column_position, + COLLATED_COLUMN_ID +) +AS +SELECT table_schema, TABLE_NAME, 'TABLE', partition_name, partition_ordinal_position + , NULL +FROM information_schema.partitions +WHERE partition_name IS NOT NULL; + +# DBA_ROLE_PRIVS +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_role_privs( + GRANTEE, + GRANTED_ROLE, + ADMIN_OPTION, + DELEGATE_OPTION, + DEFAULT_ROLE, + COMMON, + INHERITED +) +AS +SELECT user, role_name, is_grantable, NULL, + is_default, NULL, NULL +FROM information_schema.applicable_roles; + +# dba_sys_privs +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_sys_privs ( + GRANTEE, + PRIVILEGE, + ADMIN_OPTION, + COMMON, + INHERITED +) +AS +SELECT substring_index(substring_index(grantee,'\'@',1),'\'',-1), PRIVILEGE_TYPE, IS_GRANTABLE,NULL, NULL +FROM information_schema.USER_PRIVILEGES; + +# DBA_TABLES +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_tables( + OWNER, + TABLE_NAME, + TABLESPACE_NAME, + CLUSTER_NAME, + IOT_NAME, + STATUS, + PCT_FREE, + PCT_USED, + INI_TRANS, + MAX_TRANS, + INITIAL_EXTENT, + NEXT_EXTENT, + MIN_EXTENTS, + MAX_EXTENTS, + PCT_INCREASE, + FREELISTS, + FREELIST_GROUPS, + `LOGGING`, + BACKED_UP, + NUM_ROWS, + BLOCKS, + EMPTY_BLOCKS, + AVG_SPACE, + CHAIN_CNT, + AVG_ROW_LEN, + AVG_SPACE_FREELIST_BLOCKS, + NUM_FREELIST_BLOCKS, + DEGREE, + INSTANCES, + CACHE, + TABLE_LOCK, + SAMPLE_SIZE, + LAST_ANALYZED, + PARTITIONED, + IOT_TYPE, + TEMPORARY, + SECONDARY, + NESTED, + BUFFER_POOL, + FLASH_CACHE, + CELL_FLASH_CACHE, + ROW_MOVEMENT, + GLOBAL_STATS, + USER_STATS, + DURATION, + SKIP_CORRUPT, + MONITORING, + CLUSTER_OWNER, + DEPENDENCIES, + COMPRESSION, + COMPRESS_FOR, + DROPPED, + READ_ONLY, + SEGMENT_CREATED, + RESULT_CACHE, + CLUSTERING, + ACTIVITY_TRACKING, + DML_TIMESTAMP, + HAS_IDENTITY, + CONTAINER_DATA, + INMEMORY, + INMEMORY_PRIORITY, + INMEMORY_DISTRIBUTE, + INMEMORY_COMPRESSION, + INMEMORY_DUPLICATE, + DEFAULT_COLLATION, + DUPLICATED, + SHARDED, + EXTERNAL, + HYBRID, + CELLMEMORY, + CONTAINERS_DEFAULT, + CONTAINER_MAP, + EXTENDED_DATA_LINK, + EXTENDED_DATA_LINK_MAP, + INMEMORY_SERVICE, + INMEMORY_SERVICE_NAME, + CONTAINER_MAP_OBJECT, + MEMOPTIMIZE_READ, + MEMOPTIMIZE_WRITE, + HAS_SENSITIVE_COLUMN, + ADMIT_NULL, + DATA_LINK_DML_ENABLED, + LOGICAL_REPLICATION +) +AS +SELECT DISTINCT NULL, t.table_name, ts.name, NULL, + NULL, 'VALID', NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + t.table_rows, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, t.ispartitioned, + NULL, 'N', NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, 'DISABLED',NULL,NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL +FROM( + SELECT table_schema, table_name, table_rows, + CASE + WHEN create_options='partitioned' THEN 'YES' + ELSE 'NO' + END AS ispartitioned, + concat(table_schema,'/',table_name) AS table_full_name + FROM information_schema.tables +)t +LEFT JOIN( + SELECT SPACE, substring_index(name, '#', 1) AS table_full_name + FROM information_schema.innodb_tables + ) temp_it + ON t.table_full_name = temp_it.table_full_name + INNER JOIN information_schema.innodb_tablespaces ts ON ts.space = temp_it.space; + +# v$instance +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.v$instance +(INSTANCE_NUMBER,INSTANCE_NAME,HOST_NAME,VERSION,VERSION_LEGACY,VERSION_FULL,STARTUP_TIME,STATUS,PARALLEL,`THREAD#`,ARCHIVER,LOG_SWITCH_WAIT, +LOGINS,SHUTDOWN_PENDING,DATABASE_STATUS,INSTANCE_ROLE,ACTIVE_STATE,BLOCKED,CON_ID,INSTANCE_MODE,EDITION,FAMILY,DATABASE_TYPE) +AS +select (select VARIABLE_VALUE from performance_schema.global_variables where VARIABLE_NAME='server_id') AS INSTANCE_NUMBER, + 'GoldenDB_DN' AS INSTANCE_NAME, + (select VARIABLE_VALUE from performance_schema.global_variables where VARIABLE_NAME='server_id') AS HOST_NAME, + (select VARIABLE_VALUE from performance_schema.global_variables where VARIABLE_NAME='version') AS VERSION, + (select VARIABLE_VALUE from performance_schema.global_variables where VARIABLE_NAME='version') AS VERSION_LEGACY, + (select concat((select VARIABLE_VALUE from performance_schema.global_variables where VARIABLE_NAME='goldendb_version')," ", + (select VARIABLE_VALUE from performance_schema.global_variables where VARIABLE_NAME='version')," ", + (select VARIABLE_VALUE from performance_schema.global_variables where VARIABLE_NAME='version_compile_machine')," ", + (select VARIABLE_VALUE from performance_schema.global_variables where VARIABLE_NAME='version_comment'))) AS VERSION_FULL, + (select VARIABLE_VALUE from performance_schema.global_status where VARIABLE_NAME='Uptime') AS STARTUP_TIME, + NULL AS STATUS, + NULL AS PARALLEL, + (select VARIABLE_VALUE from performance_schema.global_status where VARIABLE_NAME='Threadpool_active_threads') AS `THREAD#`, + (select substring_index(substring_index((select STORAGE_ENGINES from performance_schema.log_status),",",-1),"}",1)) AS ARCHIVER, + NULL AS LOG_SWITCH_WAIT, + NULL AS LOGINS, + NULL AS SHUTDOWN_PENDING, + NULL AS DATABASE_STATUS, + CASE WHEN ((select VARIABLE_VALUE from performance_schema.global_status where VARIABLE_NAME='Rpl_semi_sync_master_status') = 'ON') + THEN 'MASTER' WHEN ((select VARIABLE_VALUE from performance_schema.global_status where VARIABLE_NAME='Rpl_semi_sync_slave_status') = 'ON') + THEN 'SLAVE' ELSE 'UNKNOWN' + END AS INSTANCE_ROLE, + NULL AS ACTIVE_STATE, + NULL AS BLOCKED, + NULL AS CON_ID, + IF (((select VARIABLE_VALUE from performance_schema.global_variables where VARIABLE_NAME = 'read_only') = 'ON'),'READ_ONLY','NORMAL') AS INSTANCE_MODE, + (select VARIABLE_VALUE from performance_schema.global_variables where VARIABLE_NAME='version_comment') AS EDITION, + NULL AS FAMILY, + NULL AS DATABASE_TYPE; + +# dba_indexes +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_indexes ( + OWNER, + INDEX_NAME, + INDEX_TYPE, + TABLE_OWNER, + TABLE_NAME, + TABLE_TYPE, + UNIQUENESS, + COMPRESSION, + PREFIX_LENGTH, + TABLESPACE_NAME, + INI_TRANS, + MAX_TRANS, + INITIAL_EXTENT, + NEXT_EXTENT, + MIN_EXTENTS, + MAX_EXTENTS, + PCT_INCREASE, + PCT_THRESHOLD, + INCLUDE_COLUMN, + FREELISTS, + FREELIST_GROUPS, + PCT_FREE, + `LOGGING`, + BLEVEL, + LEAF_BLOCKS, + DISTINCT_KEYS, + AVG_LEAF_BLOCKS_PER_KEY, + AVG_BLOCKS_PER_KEY, + CLUSTERING_FACTOR, + STATUS, + NUM_ROWS, + SAMPLE_SIZE, + LAST_ANALYZED, + DEGREE, + INSTANCES, + PARTITIONED, + TEMPORARY, + `GENERATED`, + SECONDARY, + BUFFER_POOL, + FLASH_CACHE, + CELL_FLASH_CACHE, + USER_STATS, + DURATION, + PCT_DIRECT_ACCESS, + ITYP_OWNER, + ITYP_NAME, + PARAMETERS, + GLOBAL_STATS, + DOMIDX_STATUS, + DOMIDX_OPSTATUS, + FUNCIDX_STATUS, + JOIN_INDEX, + IOT_REDUNDANT_PKEY_ELIM, + DROPPED, + VISIBILITY, + DOMIDX_MANAGEMENT, + SEGMENT_CREATED +) +AS +SELECT DISTINCT index_schema, s.index_name, s.index_type, s.table_schema, s.table_name + , 'TABLE', s.uniqueness, 'DISABLED', NULL, ts.name + , NULL, NULL, NULL, NULL, NULL + , NULL, NULL, NULL, NULL, NULL + , NULL, NULL, NULL, NULL, NULL + , NULL, NULL, NULL, NULL, 'VALID' + , NULL, NULL, NULL, NULL, NULL + , s.ispartitioned, NULL, NULL, NULL, NULL + , NULL, NULL, NULL, NULL, NULL + , NULL, NULL, NULL, NULL, 'NO' + , 'NO', 'NO', 'VISIBLE', NULL, NULL + , 'NO', 'FULL', 'NO' +FROM ( + SELECT DISTINCT s1.index_schema, s1.index_name, s1.index_type, s1.table_schema, s1.table_name, + CASE + WHEN p.partition_name is NULL THEN 'NO' + ELSE 'YES' + END AS ispartitioned, s1.uniqueness,s1.fulname + FROM + ( + SELECT DISTINCT index_schema, index_name, index_type,table_schema, table_name, + CASE + WHEN non_unique = 0 THEN 'NONUNIQUE' + ELSE 'UNIQUE' + END AS uniqueness, concat(table_schema, '/', table_name) AS fulname + FROM information_schema.statistics + )s1 + LEFT JOIN( + SELECT DISTINCT concat(table_schema,'/',table_name) as fulname, partition_name + FROM information_schema.partitions + WHERE partition_name is not NULL + )p + ON s1.fulname=p.fulname +) s +LEFT JOIN ( + SELECT SPACE, substring_index(name, '#', 1) AS table_full_name + FROM information_schema.innodb_tables +) temp_it +ON s.fulname = temp_it.table_full_name +LEFT JOIN information_schema.innodb_tablespaces ts ON ts.space = temp_it.space; + +# dba_ind_columns +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_ind_columns ( + index_owner, + index_name, + table_owner, + table_name, + column_name, + column_position, + column_length, + char_length, + descend, + collated_column_id +) +AS +SELECT DISTINCT s.index_schema, s.index_name, s.table_schema, s.table_name, s.column_name + , s.seq_in_index, ic.len, ic.len, 'ASC',NULL +FROM ( + SELECT DISTINCT index_schema, index_name,table_schema, table_name, column_name, seq_in_index + , concat(table_schema, '/', table_name) AS table_full_name + FROM information_schema.statistics +) s + LEFT JOIN ( + SELECT table_id, substring_index(name, '#', 1) AS table_full_name + FROM information_schema.innodb_tables + ) temp_it + ON s.table_full_name = temp_it.table_full_name + LEFT JOIN information_schema.innodb_columns ic + ON ic.table_id = temp_it.table_id + AND s.column_name = ic.name; + +# v$lock +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.v$lock ( + addr, + kaddr, + sid, + type, + id1, + id2, + lmode, + REQUEST, + ctime, + block, + con_id +) +AS +SELECT OBJECT_INSTANCE_BEGIN, ENGINE_LOCK_ID, THREAD_ID, LOCK_TYPE, 0 + , 0, LOCK_MODE, 0, NULL, 0 + , 0 +FROM performance_schema.data_locks; + +# dba_segments +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_segments( + OWNER, + SEGMENT_NAME, + PARTITION_NAME, + SEGMENT_TYPE, + SEGMENT_SUBTYPE, + TABLESPACE_NAME, + HEADER_FILE, + HEADER_BLOCK, + BYTES, + BLOCKS, + EXTENTS, + INITIAL_EXTENT, + NEXT_EXTENT, + MIN_EXTENTS, + MAX_EXTENTS, + MAX_SIZE, + RETENTION, + MINRETENTION, + PCT_INCREASE, + FREELISTS, + FREELIST_GROUPS, + RELATIVE_FNO, + BUFFER_POOL, + FLASH_CACHE, + CELL_FLASH_CACHE, + INMEMORY, + INMEMORY_PRIORITY, + INMEMORY_DISTRIBUTE, + INMEMORY_DUPLICATE, + INMEMORY_COMPRESSION, + CELLMEMORY +) +AS +SELECT itp.owner, itp.name, itp.pname, itp.space_type, NULL, + itp.tpname, NULL, NULL, itp.file_size, itp.fs_block_size, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, 'DEFAULT', 'NONE', 'NONE', + 'DISABLED', NULL, NULL, NULL, NULL, + 'DISABLED' +FROM ( + SELECT + CASE + WHEN locate('/', name)=0 THEN NULL + ELSE substring_index(name,'/',1) + END AS owner, name, + CASE + WHEN locate('#',name)=0 THEN NULL + ELSE substring_index(name,'/',-1) + END AS pname, space_type, name as tpname, file_size, fs_block_size + FROM information_schema.innodb_tablespaces +)itp; + +# user_segments +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.user_segments( + SEGMENT_NAME, + PARTITION_NAME, + SEGMENT_TYPE, + SEGMENT_SUBTYPE, + TABLESPACE_NAME, + BYTES, + BLOCKS, + EXTENTS, + INITIAL_EXTENT, + NEXT_EXTENT, + MIN_EXTENTS, + MAX_EXTENTS, + MAX_SIZE, + RETENTION, + MINRETENTION, + PCT_INCREASE, + FREELISTS, + FREELIST_GROUPS, + RELATIVE_FNO, + BUFFER_POOL, + FLASH_CACHE, + CELL_FLASH_CACHE, + INMEMORY, + INMEMORY_PRIORITY, + INMEMORY_DISTRIBUTE, + INMEMORY_DUPLICATE, + INMEMORY_COMPRESSION, + CELLMEMORY +) +AS +SELECT itp.name, itp.pname, itp.space_type, NULL, + itp.tpname, itp.file_size, itp.fs_block_size, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, 'DEFAULT', 'NONE', 'NONE', + 'DISABLED', NULL, NULL, NULL, NULL, + 'DISABLED' +FROM ( + SELECT name, + CASE + WHEN locate('#',name)=0 THEN NULL + ELSE substring_index(name,'/',-1) + END AS pname, space_type, name as tpname, file_size, fs_block_size + FROM information_schema.innodb_tablespaces +)itp; + +# dba_ind_partitions +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_ind_partitions( + INDEX_OWNER, + INDEX_NAME, + COMPOSITE, + PARTITION_NAME, + SUBPARTITION_COUNT, + HIGH_VALUE, + HIGH_VALUE_LENGTH, + PARTITION_POSITION, + STATUS, + TABLESPACE_NAME, + PCT_FREE, + INI_TRANS, + MAX_TRANS, + INITIAL_EXTENT, + NEXT_EXTENT, + MIN_EXTENT, + MAX_EXTENT, + MAX_SIZE, + PCT_INCREASE, + FREELISTS, + FREELIST_GROUPS, + `LOGGING`, + COMPRESSION, + BLEVEL, + LEAF_BLOCKS, + DISTINCT_KEYS, + AVG_LEAF_BLOCKS_PER_KEY, + AVG_DATA_BLOCKS_PER_KEY, + CLUSTERING_FACTOR, + NUM_ROWS, + SAMPLE_SIZE, + LAST_ANALYZED, + BUFFER_POOL, + FLASH_CACHE, + CELL_FLASH_CACHE, + USER_STATS, + PCT_DIRECT_ACCESS, + GLOBAL_STATS, + DOMIDX_OPSTATUS, + PARAMETERS, + `INTERVAL`, + `SEGMENT_CREATED`, + `ORPHANED_ENTRIES` +) +AS +SELECT s.index_schema, s.index_name, 'NO', p.partition_name, + '0', p.partition_expression, p.length, s.seq_in_index, 'USABLE', + p.tpname, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, 'NONE', NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, 'NO' +FROM +( + SELECT concat(table_schema,'#', table_name) as fulname, partition_name, partition_expression, length(partition_expression) AS length, concat(table_schema,'/',concat(concat(table_name,'#','p'),'#', partition_name)) AS tpname + FROM information_schema.partitions + where partition_name is not NULL +)p +INNER JOIN +( + SELECT concat(table_schema,'#', table_name) as fulname, index_schema, index_name, seq_in_index, column_name + FROM information_schema.statistics +)s +ON locate(s.column_name, p.partition_expression)!=0 AND s.fulname=p.fulname; + +# dba_tab_statistics +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_tab_statistics( + OWNER, + TABLE_NAME, + PARTITION_NAME, + PARTITION_POSITION, + SUBPARTITION_NAME, + SUBPARTITION_POSITION, + OBJECT_TYPE, + NUM_ROWS, + BLOCKS, + EMPTY_BLOCKS, + AVG_SPACE, + CHAIN_CNT, + AVG_ROW_LEN, + AVG_SPACE_FREELIST_BLOCKS, + NUM_FREELIST_BLOCKS, + AVG_CACHED_BLOCKS, + AVG_CACHE_HIT_RATIO, + IM_IMCU_COUNT, + IM_BLOCK_COUNT, + IM_STAT_UPDATE_TIME, + SCAN_RATE, + SAMPLE_SIZE, + LAST_ANALYZED, + GLOBAL_STATS, + USER_STATS, + STATTYPE_LOCKED, + STALE_STATS, + NOTES, + SCOPE +) +AS +SELECT p.table_schema, p.table_name, p.partition_name, p.partition_ordinal_position, +p.subpartition_name, p.subpartition_ordinal_position, p.type, t.table_rows, NULL, +NULL, NULL, NULL, t.avg_row_length, NULL, +NULL, NULL, NULL, NULL, NULL, +NULL, NULL, t.data_length, NULL, NULL, +'NO', 'ALL', 'NO', p.partition_comment, 'SHARED' +FROM( + SELECT table_schema, table_name, concat(table_schema,'#',table_name) as fulname, partition_name, partition_ordinal_position, subpartition_name, subpartition_ordinal_position, + CASE + WHEN partition_name is not NULL THEN 'PARTITION' + ELSE 'TABLE' + END AS type, partition_comment + FROM information_schema.partitions +)p +LEFT JOIN( + SELECT concat(table_schema,'#', table_name) as fulname, table_rows, avg_row_length, data_length + FROM information_schema.tables +)t +ON p.fulname=t.fulname; + +# dba_part_indexes +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_part_indexes( + OWNER, + INDEX_NAME, + TABLE_NAME, + PARTITIONING_TYPE, + SUBPARTITIONING_TYPE, + PARTITION_COUNT, + DEF_SUBPARTITION_COUNT, + PARTITIONING_KEY_COUNT, + SUBPARTITIONING_KEY_COUNT, + LOCALITY, + ALIGNMENT, + DEF_TABLESPACE_NAME, + DEF_PCT_FREE, + DEF_INI_TRANS, + DEF_MAX_TRANS, + DEF_INITIAL_EXTENT, + DEF_NEXT_EXTENT, + DEF_MIN_EXTENTS, + DEF_MAX_EXTENTS, + DEF_MAX_SIZE, + DEF_PCT_INCREASE, + DEF_FREELISTS, + DEF_FREELIST_GROUPS, + DEF_LOGGING, + DEF_BUFFER_POOL, + DEF_FLASH_CACHE, + DEF_CELL_FLASH_CACHE, + DEF_PARAMETERS, + `INTERVAL`, + `AUTOLIST`, + `INTERVAL_SUBPARTITION`, + `AUTOLIST_SUBPARTITION` +) +AS +SELECT s.index_schema, s.index_name, p0.pname, p0.partition_method, +p0.subpartition_method, p1.cntp, 0, p0.cntpc, p0.cntspc, +'LOCAL', 'PREFIXED', p0.tbsp, 0, 0, +'NONE', 'DEFAULT', 'DEFAULT', 'DEFAULT', 'DEFAULT', +'DEFAULT', 'DEFAULT', '0', '0', 'NONE', +'DEFAULT','NONE', 'NONE', "", "", +'NO', "", 'NO' +FROM( + SELECT distinct concat(table_schema,'/',table_name) as fulname, concat(table_name,'_',partition_name) as pname, partition_method, subpartition_method, + length(partition_expression)-length(replace(partition_expression,',',''))+1 AS cntpc, + length(subpartition_expression)-length(replace(subpartition_expression,',',''))+1 AS cntspc, concat(table_schema,'/',concat(concat(table_name,'#','p'),'#',partition_name)) AS tbsp,partition_expression + FROM information_schema.partitions + WHERE partition_name is not NULL +)p0 +LEFT JOIN( + SELECT concat(table_schema,'/',table_name) as fulname, count(table_name) as cntp + FROM information_schema.partitions + WHERE partition_name is not NULL + GROUP BY concat(table_schema,'/',table_name) +)p1 +ON p0.fulname=p1.fulname +LEFT JOIN( + SELECT concat(table_schema,'/',table_name) as fulname, index_schema, index_name, column_name + FROM information_schema.statistics +)s +ON locate(s.column_name, p0.partition_expression)!=0 AND s.fulname=p0.fulname; + +# dba_ind_subpartitions +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_ind_subpartitions( + INDEX_OWNER, + INDEX_NAME, + PARTITION_NAME, + SUBPARTITION_NAME, + HIGH_VALUE, + HIGH_VALUE_LENGTH, + PARTITION_POSITION, + SUBPARTITION_POSITION, + STATUS, + TABLESPACE_NAME, + PCT_FREE, + INI_TRANS, + MAX_TRANS, + INITIAL_EXTENT, + NEXT_EXTENT, + MIN_EXTENT, + MAX_EXTENT, + MAX_SIZE, + PCT_INCREASE, + FREELISTS, + FREELIST_GROUPS, + `LOGGING`, + COMPRESSION, + BLEVEL, + LEAF_BLOCKS, + DISTINCT_KEYS, + AVG_LEAF_BLOCKS_PER_KEY, + AVG_DATA_BLOCKS_PER_KEY, + CLUSTERING_FACTOR, + NUM_ROWS, + SAMPLE_SIZE, + LAST_ANALYZED, + BUFFER_POOL, + FLASH_CACHE, + CELL_FLASH_CACHE, + USER_STATS, + GLOBAL_STATS, + `INTERVAL`, + `SEGMENT_CREATED`, + `DOMIDX_OPSTATUS`, + `PARAMETERS` +) +AS +SELECT s.index_schema, s.index_name, p.pname, p.subpartition_name, + p.subpartition_expression, p.length, s.seq_in_index, p.subpartition_ordinal_position, + s. isusable, p.tbsp, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, 'DISABLED', + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL +FROM ( + SELECT distinct concat(table_schema,'/',table_name) as fulname, index_schema, index_name, + seq_in_index, + CASE + WHEN is_visible='YES' THEN 'USABLE' + ELSE 'UNUSABLE' + END AS isusable + FROM information_schema.statistics +)s +INNER JOIN( + SELECT concat(table_schema,'/',table_name) as fulname, concat('table_name','_',partition_name) as pname, subpartition_name, subpartition_expression, length(subpartition_expression) as length, subpartition_ordinal_position, + concat(table_schema,'/',concat(concat(table_name,'#','p'),'#',partition_name)) as tbsp + FROM information_schema.partitions + WHERE subpartition_name is not NULL +)p +ON s.fulname=p.fulname; + +# v$sysstat +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.v$sysstat( + `STATISTIC#`, + `NAME`, + `CLASS`, + `VALUE`, + `STAT_ID`, + `CON_ID` +) +AS +SELECT DISTINCT e1.statistic, e1.event_name, e1.class, e2.cnt, e1.stat, '0' +FROM( + SELECT row_number() over (order by event_name) as statistic, event_name, + CASE + WHEN locate('sql', event_name)!=0 THEN '1' + ELSE '0' + END AS class, object_instance_begin AS stat + FROM performance_schema.events_waits_summary_by_instance +)e1 +LEFT JOIN( + SELECT event_name, count(event_name) as cnt + FROM performance_schema.events_waits_summary_by_instance + GROUP BY event_name +)e2 +ON e1.event_name=e2.event_name; + +# v$version +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.v$version( + BANNER, + BANNER_FULL, + BANNER_LEGACY, + CON_ID +) +AS +SELECT tv.v1, tv.v2, tv.v3, '0' +FROM( + SELECT variable_value as v1, variable_value as v2, variable_value as v3 + FROM performance_schema.global_variables + WHERE variable_name='goldendb_version' +)tv; + +# v$session_wait +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.v$session_wait( + SID, + `SEQ#`, + EVENT, + P1TEXT, + P1, + P1RAW, + P2TEXT, + P2, + P2RAW, + P3TEXT, + P3, + P3RAW, + WAIT_CLASS_ID, + `WAIT_CLASS#`, + WAIT_CLASS, + WAIT_TIME, + SECONDS_IN_WAIT, + STATE, + WAIT_TIME_MICRO, + TIME_REMAINING_MICRO, + TIME_SINCE_LAST_WAIT_MICRO, + CON_ID +) +AS +SELECT ewc.thread_id, ewc.event_id, ewc.event_name, ewc.p1, 0, + conv(left(0,4),10,16), 'ROW_ID', ewc.p2, ewc.p2raw, "", + 0, conv(left(0,4),10,16), ewc.object_instance_begin, ewc.operation_id,ewc.operation, + ewc.wait_time, ewc.seconds_wait, ewc.state, ewc.wait_time_micro, ewc.time_remaining_micro, + ewc.time_since_last_wait_micro, 0 +FROM( + SELECT thread_id, event_id, event_name, substring_index(source,':',1) as p1, + substring_index(source,':',-1) as p2, conv(left(substring_index(source,':',-1),4),10,16) as p2raw, object_instance_begin, + CASE + WHEN operation='sync' THEN 0 + WHEN operation='lock' THEN 1 + WHEN operation='read' THEN 2 + WHEN operation='write' THEN 3 + WHEN operation='timed_wait' THEN 4 + WHEN operation='idle' THEN 5 + ELSE 6 + END AS operation_id, operation, + CASE + WHEN timer_wait=NULL THEN 0 + WHEN timer_wait>(1e+10) THEN timer_wait div 10000000000 + ELSE -1 + END AS wait_time, timer_end div (1e+12) AS seconds_wait, + CASE + WHEN timer_wait=NULL THEN 'WAITING' + WHEN timer_wait<(1e+10) THEN 'WAITED_SHORT_TIME' + ELSE 'WAITED KNOWN TIME' + END AS state, timer_end div 1000000 as wait_time_micro, + CASE + WHEN timer_end<(1e+6) THEN -1 + ELSE timer_end div 1000000 + END AS time_remaining_micro, + CASE + WHEN timer_wait=NULL THEN 0 + ELSE timer_wait div 1000000 + END AS time_since_last_wait_micro + FROM performance_schema.events_waits_current +)ewc; + +# sys.v$sql +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.v$sql ( + CON_ID, + SVR_IP, + SVR_PORT, + PLAN_ID, + SQL_ID, + TYPE, + SQL_TEXT, + PLAN_HASH_VALUE, + FIRST_LOAD_TIME, + LAST_ACTIVE_TIME, + AVG_EXE_USEC, + SLOWEST_EXE_TIME, + SLOWEST_EXE_USEC, + SLOW_COUNT, + HIT_COUNT, + MEM_USED, + EXECUTIONS, + DISK_READS, + DIRECT_WRITES, + BUFFER_GETS, + APPLICATION_WAIT_TIME, + CONCURRENCY_WAIT_TIME, + USER_IO_WAIT_TIME, + ROWS_PROCESSED, + ELAPSED_TIME, + CPU_TIME +) +AS +SELECT 0, '127.0.0.1', 0, 0, 'query' + , 'local', QUERY_SAMPLE_TEXT, DIGEST, FIRST_SEEN, LAST_SEEN + , AVG_TIMER_WAIT, QUERY_SAMPLE_SEEN, QUERY_SAMPLE_TIMER_WAIT, 0 + , SUM_SELECT_RANGE + SUM_SELECT_SCAN, 0, COUNT_STAR + , SUM_PHYSICAL_READS, 0, SUM_LOGICAL_READS, SUM_TIMER_WAIT, SUM_LOCK_TIME + , 0, 0, 0, 0 +FROM performance_schema.events_statements_summary_by_digest; + +# sys.dba_source +CREATE OR REPLACE + DEFINER = 'mysql.sys'@'localhost' + SQL SECURITY INVOKER +VIEW sys.dba_source( + OWNER, + NAME, + TYPE, + LINE, + TEXT, + ORIGIN_CON_ID +) +AS +SELECT DISTINCT routine_schema, routine_name, routine_type, NULL, + routine_definition, 0 +FROM information_schema.routines; -- Gitee