PLSQL_统计信息系列09_统计信息在不同数据库中迁移

简介: 2014-01-05 Created By BaoXinjian 一、摘要 由于系统在升级,或者克隆数据迁移等等问题中,会导致数据的统计信息的问题 解决方式无非两种,一种进行重新分析,另外一中就是统计信息在不同的数据库进行迁移 前一种方式,如果数据量过大的话,会导致重新分析统计信息耗时时间...

2014-01-05 Created By BaoXinjian

一、摘要


由于系统在升级,或者克隆数据迁移等等问题中,会导致数据的统计信息的问题

解决方式无非两种,一种进行重新分析,另外一中就是统计信息在不同的数据库进行迁移

前一种方式,如果数据量过大的话,会导致重新分析统计信息耗时时间过长,优点是统计信息应该是最准确的

后一种方式,虽然耗时较短,但是必须确认源端统计信息是正确的,源端和目标端统计信息的比对分析,之后才可以做

(1) Create the holding table using DBMS_STATS:

(2) Move the statistics to the STATS holding table.

(3) Export and Import the data in the STATS table.

(4) Populate the data dictionary in the new database.

 

二、案例


1. 创建源端创建统计信息备份表

BEGIN
   DBMS_STATS.create_stat_table ('SCOTT', 'STATS'); END;

2. 查看备份表信息

3. 导出HR.EMPLOYEES的统计信息至备份表中

BEGIN
   DBMS_STATS.export_table_stats ('HR','EMPLOYEES',NULL,'STATS',NULL,TRUE); END;

4. 查看备份表

5. 通过数据泵,将备份表中的数据从源端导入到目标端

First, run the export:
%exp hr/tiger tables=STATS file=expstat.dmp 
About to export specified tables via Conventional Path ... . . exporting table STATS ...
Then on the new database, run import: %imp hr/tiger file=expstat.dmp full=y log=implog.txt

6. 在目标端从备份表的信息导入到字典统计信息中

dbms_stats.import_table_stats('HR','EMPLOYEES',NULL,'STATS',NULL,TRUE);

 

三、其他信息


1. 如果要使用STATID信息 - If you export statistics declaring a specific STATID, then you must use it。

when importing the statistics:

exec dbms_stats.export_table_stats('SCOTT','SJD_TEST',NULL,'STATS','"1"',TRUE);

Then you must import with:

exec dbms_stats.import_table_stats('SCOTT','SJD_TEST',NULL,'STATS','"1"',TRUE);

 

2. 如果不知道STATID - If you do not know the statid then you can see it in the statid column of the stats table。

SQL> select distinct statid,c1 from stats;

If your init.ora parameters are the same in both databases, you expect

the same explain plans on the old and new databases, regardless of the

actual data. This is because the Cost-Based Optimizer makes its decisions on how to obtain the data based on statistics.

 

3. 导出整个Schema统计信息 - here are also procedures for performing this activity on the whole schema and database.

For example, IMPORT_SCHEMA_STATS,IMPORT_DATABASE_STATS, EXPORT_DATABASE_STATS,EXPORT_SCHEMA_STATS

To export statististics for an entire schema:

SQL> exec dbms_stats.export_schema_stats('SCOTT','STATS');

You may also export system statistcs (cpu/io information):

SQL> exec dbms_stats.export_system_stats('STAT');

 

4. dbms_stats更多信息 - For more information on these prodedures, issue the command。

desc dbms_stats

This command describes the package and lists the procedures and arguments.

Examples

Same schema:

============

SD_STAT = table to store statistics in

SD - is my table

SCOTT & JBARLOW - user accounts

'a' - optional statid (otherwise NULL)

exec dbms_stats.gather_table_stats('SCOTT','SD');

exec dbms_stats.drop_stat_table('SCOTT','SD_STAT');

exec dbms_stats.create_stat_table('SCOTT','SD_STAT');

exec dbms_stats.export_table_stats('SCOTT','SD',NULL,'SD_STAT','a',TRUE,'SCOTT');

 

5. 统计信息删除后,解析计划的变化

5.1 删除统计信息前的解析计划

set autot trace explain

select * from sd;

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=133 Card=100000 Bytes=5500000)

1 0 TABLE ACCESS (FULL) OF 'SD' (Cost=133 Card=100000 Bytes=5500000)

5.2 删除统计信息

exec dbms_stats.delete_stat_table('SCOTT','SD');

select * from sd;

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE

1 0 TABLE ACCESS (FULL) OF 'SD'

5.3 导入统计信息后的解析计划

exec dbms_stats.import_table_stats('SCOTT','SD',NULL,'SD_STAT','a',TRUE,'SCOTT');

select * from sd;

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=133 Card=100000 Bytes=5500000)

1 0 TABLE ACCESS (FULL) OF 'SD' (Cost=133 Card=100000 Bytes=5500000)

 

Thanks and Regards

ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
相关文章
|
3月前
|
SQL 监控 Java
在IDEA 、springboot中使用切面aop实现日志信息的记录到数据库
这篇文章介绍了如何在IDEA和Spring Boot中使用AOP技术实现日志信息的记录到数据库的详细步骤和代码示例。
在IDEA 、springboot中使用切面aop实现日志信息的记录到数据库
|
3月前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!点击阅读原文完成实验就可获得一本日历哦~
|
3月前
|
关系型数据库 MySQL 数据库
|
3月前
|
关系型数据库 MySQL 数据库
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
|
8天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
165 1
|
14天前
|
算法 大数据 数据库
云计算与大数据平台的数据库迁移与同步
本文详细介绍了云计算与大数据平台的数据库迁移与同步的核心概念、算法原理、具体操作步骤、数学模型公式、代码实例及未来发展趋势与挑战。涵盖全量与增量迁移、一致性与异步复制等内容,旨在帮助读者全面了解并应对相关技术挑战。
25 3
|
2月前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
330 15
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
1月前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
1月前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
103 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
2月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
111 5