DBA常用SQL语句

达梦数据库更新统计信息

收集指定用户下所有表所有列的统计信息:

-- 进入达梦命令行 disql
cd /data/dmdbms/tool
./disql
disql V7.6.1.52-Build(2020.03.17-119193)ENT
SQL> conn ncc_0611_TW/[email protected]: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.将大写的库名及表名改为小写
更改库名可参考:https://www.cnblogs.com/gomysql/p/3584881.html
更改表名: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 ;  

使用数据泵

  1. 安装oracle数据库并配置
  2. 创建oracle数据库逻辑目录
SQL> create directory datadump as '/home/oracle/datadump';
Directory created.
  1. 创建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.
  1. 将备份文件(以cqj.dmp为例)上传至/home/oracle/datadump 目录下。
[oracle@db01 dpump]$ ls
cqj.dmp
  1. 执行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:如表存在,则覆盖。

  1. 检查数据导入是否成功。(检查表的个数)
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;

你可能感兴趣的:(tech,数据库)