DB Related

DB2

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
db2 get snapshot for dynamic sql on 库 >>snap.log                                #动态语句监控 
grep -n "Deadlocks detected" snap.log | grep -v "= 0" | more #识别是否存在死锁
grep -n " Number of executions" snap.log | grep -v "= 0" | sort -k 5,5rn | more #搜索语句的执行次数
grep -n " Rows read" snap.log | grep -v "= 0" | sort -k 5,5rn #读取行数最多的语句
grep -n " Total execution time" snap.log | grep -v "= 0.0" |sort -k 5,5rn | more #获取语句执行时间
grep -n " Statement text" snap.log | more #相似语句排序
cd /opt/ibm/db2/V10.5
db2iset -d db2inst1 #如果无法删除实例,执行此命令删除实例
db2 activate db LYLDB #激活数据库
db2 deactivate db LYLDB #关闭激活数据库
db2cklog $归档日志的数字编号 #检查归档日志文件是否完整,返回值'0',则完整
db2diag -g level=Error,db=SI2DB #db2diag按日志输出等级,库名过滤db2diag.log文件
db2ckbkp -h $备份文件 #检测备份文件的完整性

表统计

1
2
3
4
db2 "select count(*) from iplat.TEWWF02"         #表行数统计
db2 "describe table iplat.TEWWF02" #表结构查看
db2 "select substr(indname,1,10),substr(tabname,1,20),substr(colnames,1,20) from syscat.indexes where tabname='iplat.TEWWF02'" #查看表有哪些索引
db2 "select firstkeycard, first2keycard from syscat.indexes where indname='I_T1'" #具体表索引查看

db2恢复

一丶在线备份恢复,需要在线备份包和归档日志
1丶目录一致使用这种方式
1
2
3
4
5
db2 restore db lyldb from /data/db2bak/ taken at 20180710233503 LOGTARGET '/data/db2bak/'                #数据库恢复并指定生成目录 
#上传所需的日志到/data/db2bak/NODE0000/LOGSTREAM0000/下面,可采用的前滚有两种:
(1)丶db2 "rollforward db lyldb to 2018-07-11-11.30.00 using local time overflow log path (/data/db2bak/)" #前滚到指定时间点
db2 "rollforward database lyldb stop overflow log path (/data/db2bak/)"
(2)丶db2 "rollforward db lyldb to end of logs and complete overflow log path (/data/db2bak/)" #前滚到活动日志的末尾
2丶重定向恢复(目录不一致使用这种方式)
1
2
3
db2 restore db lyldb from /data/db2bak taken at 20180710233503 redirect generate script /data/db2bak/restore.sql    #生成重定向脚本修改restore.sql中表空间的路径,确保与服务器目录一致
db2 -tvf restore.sql -l out.log
db2 "rollforward db lyldb to end of logs and complete overflow log path (/data/db2bak/)"
二丶离线备份恢复

db2执行计划

1
2
db2expln -d SI2DB -i -g -stmtfile t1.sql -terminator ';' -output t1.exp    #t1.sql为一条需要执行计划的sql语句,例如:
UPDATE IPLAT.TEDMDM1 SET SEQ_VALUE=SEQ_VALUE + 1,REC_REVISOR=?,REC_REVISE_TIME=? WHERE SEQ_NAME=?

Oracle

1
2
lsnrctl start #开启监听
sqlplus / as sysdba #以管理员模式登录

mysql

suse linux 11安装mysql

从MySQL官网上分别下载mysql社区版服务器端与客户端应用包:官网
例如:
MySQL-server-5.5.59-1.sles11.x86_64.rpm
MySQL-client-5.5.59-1.sles11.x86_64.rpm

检测系统是否已安装mysql

1
2
3
rpm -qa | grep mysql
#若已经安装,则执行以下命令来删除,例如
rpm --nodeps -e mysql-5.5.31-0.7.10 mysql-client-5.5.31-0.7.10

安装mysql:

1
2
3
4
5
6
rpm -ivh MySQL-server-5.5.59-1.sles11.x86_64.rpm MySQL-client-5.5.59-1.sles11.x86_64.rpm
mkdir /data
chmod 755 -R /data
mv /var/lib/mysql /data
vim /etc/init.d/mysql #将datadir的值,修改为/data/mysql
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

编辑 my.cnf,对应内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[client]
password = 123456
port = 3306
socket = /data/mysql/mysql.sock
default-character-set=utf8
[mysqld]
port = 3306
socket = /data/mysql/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
character_set_server=utf8
collation-server=utf8_general_ci
lower_case_table_names=1
character_set_client=utf8
max_connections=1000
[mysql]
default-character-set = utf8
no-auto-rehash

重启mysql服务

1
2
3
cd /usr/bin
mysql_install_db
service mysql restart

登录mysql

1
2
3
4
5
6
7
8
mysql -u root -p
Enterpassword: (直接回车,因为第一次为空密码)
mysql> show databases;
mysql> use mysql;
mysql> show tables;
mysql> update user set password=password('123456')where user='root'; #登录成功后,修改密码
/usr/bin/mysqld_safe --user=mysql &
service mysql restart #最后重启mysql,密码生效

设置远程访问

1
2
3
4
5
mysql -u root -p                     
mysql> use mysql;
mysql> grant all PRIVILEGES on *.* to root@192.168.229.70 identified by 'password';
mysql> select host,user from user;
mysql> FLUSH PRIVILEGES;

mysql忘记密码

1
2
3
4
5
6
7
#停止mysql服务
/usr/bin/mysqld_safe --user=mysql --skip-grant-tables &
#输入mysql进入数据库
use mysql;
update user set password=password("密码") where user='root';
flush privileges;
#重启mysql服务

数据库备份

1
2
3
mysqldump -u用户 -p 库名 >库名.sql              #备份一个库
mysqldump -u用户 -p 库名 表名 >表名.sql #备份表
mysqldump -u用户 -p --all-databases >all.sql #备份所有库

恢复库

1
2
3
create database 库名 charset=utf8;
mysql -u用户 -p 库名 <库名.sql #恢复一个库
source 库名.sql #导入

删除库

1
drop databases 库名  #删除库

客户端连接远程主机

1
mysql -uroot -pLyl@1992 -h 192.168.229.85 -P3306

windows安装mysql

1丶下载windows对应的32位或者64位版本,例如32位7.7.22社区版本
2丶解压到目录,例如G:\mysql-5.7.22-win32
3丶在解压目录bin下初始化mysql

1
2
mysqld --initialize-insecure                #初始化
mysql -uroot -p #进入数据库,默认密码为空

4丶添加环境变量,系统变量path添加:G:\mysql-5.7.22-win32\bin
5丶将MySQL服务制作成windows服务

1
2
3
4
"G:\mysql-5.7.22-win32\bin\mysqld" --install              #制作MySQL的Windows服务
"G:\mysql-5.7.22-win32\bin\mysqld" --remove #移除MySQL的Windows服务
net start mysql #启动MySQL服务
net stop mysql #关闭MySQL服务

6丶给root设置密码,例如密码为123456

1
mysqladmin -uroot -p password 123456

SQL

SUBSTR函数,取一个字段中的某几位
SUBSTR(S,m,n),S表示字段名,m表示开始截取的位置,n表示截取的长度

推荐文章