达梦数据库更新统计信息
收集指定用户下所有表所有列的统计信息:
-- 进入达梦命令行 disql
cd /data/dmdbms/tool
./disql
disql V7.6.1.52-Build(2020.03.17-119193)ENT
SQL> conn ncc_0611_TW/nccloud001@192.168.xx.xx:5236
服务器[192.168.61.19:5236]:处于普通打开状态
登录使用时间: 2.411(毫秒)
SQL> DBMS_STATS.GATHER_SCHEMA_STATS('CQJ',100,TRUE,'FOR ALL COLUMNS SIZE AUTO');
收集指定用户下所有索引的统计信息:
DBMS_STATS.GATHER_SCHEMA_STATS('CQJ',1.0,TRUE,'FOR ALL INDEXED SIZE AUTO');
Mysql导入dump文件
login Mysql using root
drop database cqj;
Then cmd to sql dump file path:
mysql -uroot -pWelcome1 < 20210407cqj.sql
If not drop database , then
c:\Data\sas\Datadump_mysql>mysql -u root -pWelcome1 --default-character-set=utf8 -D jeesite < 20200101.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
Parameter:
Usage: mysql [OPTIONS] [database] //命令方式
-?, --help //显示帮助信息并退出
-I, --help //显示帮助信息并退出
–auto-rehash //自动补全功能,就像linux里面,按Tab键出提示差不多
-A, --no-auto-rehash //默认状态是没有自动补全功能的。-A就是不要自动补全功能
-B, --batch //ysql不使用历史文件,禁用交互
(Enables --silent)
–character-sets-dir=name //字体集的安装目录
–default-character-set=name //设置数据库的默认字符集
-C, --compress //在客户端和服务器端传递信息时使用压缩
-#, --debug[=#] //bug调用功能
-D, --database=name //使用哪个数据库
–delimiter=name //mysql默认命令结束符是分号,下面有例子
-e, --execute=name //执行mysql的sql语句
-E, --vertical //垂直打印查询输出
-f, --force //如果有错误跳过去,继续执行下面的
-G, --named-commands
-g, --no-named-commands
-i, --ignore-spaces //忽视函数名后面的空格.
–local-infile //启动/禁用 LOAD DATA LOCAL INFILE.
-b, --no-beep //sql错误时,禁止嘟的一声
-h, --host=name //设置连接的服务器名或者Ip
-H, --html //以html的方式输出
-X, --xml //以xml的方式输出
–line-numbers //显示错误的行号
-L, --skip-line-numbers //忽略错误的行号
-n, --unbuffered //每执行一次sql后,刷新缓存
–column-names //查寻时显示列信息,默认是加上的
-N, --skip-column-names //不显示列信息
-O, --set-variable=name //设置变量用法是–set-variable=var_name=var_value
–sigint-ignore //忽视SIGINT符号(登录退出时Control-C的结果)
-o, --one-database //忽视除了为命令行中命名的默认数据库的语句。可以帮跳过日志中的其它数据库的更新。
–pager[=name] //使用分页器来显示查询输出,这个要在linux可以用more,less等。
–no-pager //不使用分页器来显示查询输出。
-p, --password[=name] //输入密码
-P, --port=# //设置端口
–prompt=name //设置mysql提示符
–protocol=name //使用什么协议
-q, --quick //不缓存查询的结果,顺序打印每一行。如果输出被挂起,服务器会慢下来,mysql不使用历史文件。
-r, --raw //写列的值而不转义转换。通常结合–batch选项使用。
–reconnect //如果与服务器之间的连接断开,自动尝试重新连接。禁止重新连接,使用–disable-reconnect。
-s, --silent //一行一行输出,中间有tab分隔
-S, --socket=name //连接服务器的sockey文件
–ssl //激活ssl连接,不激活–skip-ssl
–ssl-ca=name //CA证书
–ssl-capath=name //CA路径
–ssl-cert=name //X509 证书
–ssl-cipher=name //SSL cipher to use (implies --ssl).
–ssl-key=name //X509 密钥名
–ssl-verify-server-cert //连接时审核服务器的证书
-t, --table //以表格的形势输出
–tee=name //将输出拷贝添加到给定的文件中,禁时用–disable-tee
–no-tee //根–disable-tee功能一样
-u, --user=name //用户名
-U, --safe-updates //Only allow UPDATE and DELETE that uses keys.
-U, --i-am-a-dummy //Synonym for option --safe-updates, -U.
-v, --verbose //输出mysql执行的语句
-V, --version //版本信息
-w, --wait //服务器down后,等待到重起的时间
–connect_timeout=# //连接前要等待的时间
–max_allowed_packet=# //服务器接收/发送包的最大长度
–net_buffer_length=# //TCP / IP和套接字通信缓冲区大小。
–select_limit=# //使用–safe-updates时SELECT语句的自动限制
–max_join_size=# //使用–safe-updates时联接中的行的自动限制
–secure-auth //拒绝用(pre-4.1.1)的方式连接到数据库
–server-arg=name //Send embedded server this as a parameter.
–show-warnings //显示警告
清除MySQL的binlog
查看当前的binlog
show binary logs;
删除无用的binlog
purge binary logs to 'binlog.000281';
MySQL查看表信息
use 库名;
show table status like '表名' ;
select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
order by data_length desc, index_length desc;
oracle查看表空间占用情况
SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS,SPACE-NVL(FREE_SPACE,0) "USED_SPACE(M)",
ROUND((1-NVL(FREE_SPACE,0)/SPACE)*100,2) "USED_RATE(%)",FREE_SPACE "FREE_SPACE(M)"
FROM
(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) D,
(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) FREE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME order by TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
UNION ALL --if have tempfile
SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS,
USED_SPACE "USED_SPACE(M)",ROUND(NVL(USED_SPACE,0)/SPACE*100,2) "USED_RATE(%)",
NVL(FREE_SPACE,0) "FREE_SPACE(M)"
FROM
(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS
FROM DBA_TEMP_FILES
GROUP BY TABLESPACE_NAME) D,
(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES_USED)/(1024*1024),2) USED_SPACE,
ROUND(SUM(BYTES_FREE)/(1024*1024),2) FREE_SPACE
FROM V$TEMP_SPACE_HEADER
GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+);
1 查看Oracle性能参数
select view_definition from v$fixed_view_definition where view_name = 'V$PARAMETER';
select view_definition from v$fixed_view_definition where view_name = 'GV$PARAMETER';
select NUM , NAME , TYPE , VALUE , DISPLAY_VALUE, ISDEFAULT , ISSES_MODIFIABLE , ISSYS_MODIFIABLE ,
ISINSTANCE_MODIFIABLE, ISMODIFIED , ISADJUSTED , ISDEPRECATED, ISBASIC, DESCRIPTION, UPDATE_COMMENT, HASH
from GV$PARAMETER where inst_id = USERENV('Instance');
2 查看消耗资源最多的 SQL:
SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls FROM V$SQLAREA
WHERE buffer_gets > 10000000 OR disk_reads > 1000000
ORDER BY buffer_gets + 100 * disk_reads DESC ;
3 查看某条 SQL 语句的资源消耗:
SELECT hash_value, buffer_gets, disk_reads, executions, parse_calls
FROM V$SQLAREA
WHERE hash_Value = 228801498 AND address = hextoraw( 'CBD8E4B0' );
4 查找前10条性能差的sql语句
SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea order BY disk_reads DESC )where ROWNUM<10 ;
说明:
EXECUTIONS表示同一条SQL语句一共执行了多少次,SORTS表示排序的次数,DISK_READS表示物理读的数量。
5 解锁用户
1 使用root登录系统, 然后 su - oracle 到oracle用户
2 以管理员身份登录oracle (sqlplus / as sysdba)
[oracle@db4 ~] sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Sun Sep 30 09:54:23 2018
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
3 查看用户状态:
select username,account_status from dba_users;
4 解锁用户
alter user SYSTEM ACCOUNT UNLOCK;
5 修改用户密码
alter user sys identified by password;
修改日期格式
关于日期格式的 oracle 语法
select * from nls_session_parameters where parameter = 'NLS_TIMESTAMP_FORMAT' ; --'NLS_DATE_FORMAT'; -- 'DD-MON-RR HH.MI.SSXFF AM' --原格式
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS:FF6';
ALTER SESSION SET NLS_date_FORMAT = 'YYYY-MM-DD';
select systimestamp from dual;
select unitid , zcrq, months_between(zcrq,to_date('9999-12-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) from prr_enterprise
where months_between(zcrq,to_date('9999-12-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) > 0;
update prr_enterprise set zcrq = to_date('1900-12-01 00:00:00','yyyy-mm-dd hh24:mi:ss'),
gsdjrq = to_date('1900-12-01 00:00:00','yyyy-mm-dd hh24:mi:ss')
where unitid in
(select unitid from prr_enterprise where months_between(zcrq,to_date('9999-12-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) > 0);
MySQL库表区分大小写
lower_case_table_names 是mysql设置大小写是否敏感的一个参数。
.参数说明:
lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的
lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的
unix,linux下lower_case_table_names默认值为 0 .Windows下默认值是 1 .Mac OS X下默认值是 2
查看方法:
#进入mysql命令行 执行以下任一语句查看:
show variables like 'lower_case_table_names';
select @@lower_case_table_names;
更改方法:
更改数据库参数文件my.cnf
在mysqld下 添加或修改 lower_case_table_names = 1
之后重启数据库
现实情况修改 注意事项:
因目前MySQL安装在Linux系统上较多 初始化时采取了默认的lower_case_table_names值 即区分大小写,后续可能会造成同一实例大小写库表都存在的情况,调用时还要注意大小写。
这时 更改步骤如下:
1.核实实例中是否存在大写的库及表
2.将大写的库名及表名改为小写
更改库名可参考:
更改表名:rename table TEST_TB to test_tb;
3.设置lower_case_table_names = 1
4.重启数据库
修改Oracle的用户密码
隔几个月Oracle会提醒你的用户密码要过期,需要这么修改:
1 使用sqlplus方式本地登录oracle数据库
sqlplus / as sysdba;
2 查看用户
select username from dba_users;
3 修改用户
alter user cqj identified by xxxxxx;
综合查询
1 任意时点企业信息查询
select count(*) from dbs_enterprise where startdate< date_format('2017-1-1','%Y-%m-%d %H:%i:%s')
and enddate > date_format('2017-1-1','%Y-%m-%d %H:%i:%s');
select count(*) from dbs_enterprise where startdate< date_format('2018-1-1','%Y-%m-%d %H:%i:%s')
and enddate > date_format('2018-1-1','%Y-%m-%d %H:%i:%s');
select count(*) from dbs_enterprise where startdate< date_format('2019-1-1','%Y-%m-%d %H:%i:%s')
and enddate > date_format('2019-1-1','%Y-%m-%d %H:%i:%s');
select count(*) from dbs_enterprise where startdate< date_format('2020-1-1','%Y-%m-%d %H:%i:%s')
and enddate > date_format('2020-1-1','%Y-%m-%d %H:%i:%s');
select count(*) from dbs_enterprise where startdate< date_format(sysdate(),'%Y-%m-%d %H:%i:%s')
and enddate > date_format(sysdate(),'%Y-%m-%d %H:%i:%s');
创建索引出错 Lock wait timeout exceeded; try restarting transaction
1 查看当前Mysql的进程, 分析是否有慢sql
SHOW PROCESSLIST;
或者
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
2 查看当前的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX ;
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS ;
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS ;
看事务表INNODB_TRX,里面是否有正在锁定的事务线程,看看ID是否在show processlist里面的sleep线程中,如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉.
3 批量删除事务
select concat('KILL ',id,';') from information_schema.processlist where user='root';
+------------------------+
| concat('KILL ',id,';') |
+------------------------+
| KILL 10508; |
| KILL 10521; |
| KILL 10297; |
+------------------------+
18 rows in set (0.00 sec)
然后 删掉进程:
mysql> kill xxxx ;
使用数据泵
- 安装oracle数据库并配置
- 创建oracle数据库逻辑目录
SQL> create directory datadump as '/home/oracle/datadump';
Directory created.
- 创建cqj用户并授权。
CREATE TABLESPACE data_space_cqj DATAFILE '/oracle/oradata/cqj/spacecqj1.dbf' SIZE 10240M AUTOEXTEND ON NEXT 1024M MAXSIZE 30720M;
// ALTER TABLESPACE data_space_cqj ADD DATAFILE '/oracle/oradata/cqj/spacecqj2.dbf' SIZE 10240M AUTOEXTEND ON NEXT 1024M MAXSIZE 30720M;
create user cqj identified by cqj default tablespace data_space_cqj;
GRANT CREATE SESSION,CREATE TABLE,CREATE VIEW,CREATE SEQUENCE,UNLIMITED TABLESPACE TO cqj;
GRANT CONNECT TO cqj;
GRANT RESOURCE TO cqj;
GRANT DBA TO cqj;
SQL> create user cqj identified by cqj;
User created.
SQL> grant dba to cqj;
Grant succeeded.
SQL> grant write,read on directory datapump to cqj;
Grant succeeded.
- 将备份文件(以cqj.dmp为例)上传至/home/oracle/datadump 目录下。
[oracle@db01 dpump]$ ls
cqj.dmp
- 执行expdp命令,导入数据库。
[oracle@db01 dpump]$ impdp cqj/cqj@localhost:1521/orcl directory=datadump dumpfile=cqj.dmp transform=segment_attributes:n table_exists_action=replace logfile=cqj.log
输出如下:
```powershell
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "CQJ"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "CQJ"."SYS_IMPORT_FULL_01": cqj/********@localhost:1521/orcl directory=datapump dumpfile=cqj.dmp transform=segment_attributes:n table_exists_action=replace logfile=cqj.log
Processing object type SCHEMA_EXPORT/USER
ORA-31684: Object type USER:"CQJ" already exists
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
………
. . imported "CQJ"."LOGRECORD" 206.3 MB 4072 rows
. . imported "CQJ"."PRR_DRAFT"69.50 MB 48246 rows
. . imported "CQJ"."ACT_GE_BYTEARRAY"69.15 MB 114656 rows
. . imported "CQJ"."PRR_ENTERPRISE" 45.25 KB 23 rows
. . imported "CQJ"."PRR_INVESTOR" 47.43 MB 291404 rows
………
Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "CQJ"."SYS_IMPORT_FULL_01" completed with 25 error(s) at Wed Sep 11 00:08:34 2019 elapsed 0 00:02:27
参数说明:
① Directory:指定逻辑目录。
② Dumpfile:指定备份文件路径及文件名。
③ Logfile:指定日志文件路径及文件名。
④ Transform=segment_attributes:n:数据导入默认表空间之中,无 需新建表空间。
⑤ Table_exists_action=replace:如表存在,则覆盖。
- 检查数据导入是否成功。(检查表的个数)
SQL> select count(*) from user_tables;
COUNT(*)
----------
360
PS:
– 查看当前用户的缺省表空间
select * from user_users;
查看数据库表空间使用情况:
SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS,SPACE-NVL(FREE_SPACE,0) "USED_SPACE(M)",
ROUND((1-NVL(FREE_SPACE,0)/SPACE)*100,2) "USED_RATE(%)",FREE_SPACE "FREE_SPACE(M)"
FROM
(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) D,
(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) FREE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME order by TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
UNION ALL --if have tempfile
SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS,
USED_SPACE "USED_SPACE(M)",ROUND(NVL(USED_SPACE,0)/SPACE*100,2) "USED_RATE(%)",
NVL(FREE_SPACE,0) "FREE_SPACE(M)"
FROM
(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS
FROM DBA_TEMP_FILES
GROUP BY TABLESPACE_NAME) D,
(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES_USED)/(1024*1024),2) USED_SPACE,
ROUND(SUM(BYTES_FREE)/(1024*1024),2) FREE_SPACE
FROM V$TEMP_SPACE_HEADER
GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+);
7,导出部分表
expdp cqj/Welcome1@orcl directory=datadump tables=CQJ.SYS_LOG,CQJ.ACT_HI_DETAIL,CQJ.ACT_HI_ACTINST,CQJ.ACT_HI_IDENTITYLINK,CQJ.ACT_HI_VARINST,CQJ.ACT_HI_TASKINST,CQJ.LOGRECORD,CQJ.PRR_ENTERPRISEHIS,CQJ.PRR_INVESTOR_HIS,CQJ.ACT_GE_BYTEARRAY,CQJ.PRR_DRAFT,CQJ.ACT_HI_COMMENT dumpfile=cqj_20200330.dmp logfile=cqj_20200330.log
2021/1/4 向本地oracle数据库导入备份文件
c:\Data\sas\Datadump_mysql>impdp cqj/cqj@JONIU-CN:1521/orcl directory=datadump dumpfile=cqj20201231.dmp remap_schema=CQJ:CQJ remap_tablespace=CQJ:DATA_SPACE_CQJ transform=segment_attributes:n table_exists_action=replace logfile=cqj20210104.log
清理ORACLE数据库的temp表空间
create temporary tablespace TEMPA TEMPFILE 'C:\APP\JONIU\ORADATA\ORCL\TEMPA01.DBF' SIZE 4096M REUSE AUTOEXTEND ON NEXT 1024K MAXSIZE 10240M; --创建中转临时表空间
alter database default temporary tablespace tempa; --改变缺省临时表空间
drop tablespace temp including contents and datafiles; --删除原来临时表空间
此时windows系统里的TEMP01.DBF文件并没有被删除,需要关闭数据库实例后手动删除
shutdown immediate;
删除文件
startup;
查看数据库内表容量
select segment_name, bytes/1024/1024||'MB' from user_segments
where segment_type = 'TABLE' order by bytes desc;