expdp/impdp/rman会话进度查看

oracle11g使用DBA_DATAPUBMP_JOBS和DBA_DATAPUMP_SESSIONS视图来显示数据泵取作业的信息,
查看expdp进度:

select * from DBA_DATAPUBMP_JOBS;
select * from DBA_DATAPUMP_SESSIONS;
select sid,serial# from v$session s,dba_datapump_sessions d where s.saddr=d.saddr;

查看impdp进度:

SELECT   a.tablespace_name,
         ROUND (a.total_size) "total_size(MB)",
         ROUND (a.total_size) - ROUND (b.free_size, 3) "used_size(MB)",
         ROUND (b.free_size, 3) "free_size(MB)",
         ROUND (b.free_size / total_size * 100, 2) || '%' free_rate
  FROM   (  SELECT   tablespace_name, SUM (bytes) / 1024 / 1024 total_size
              FROM   dba_data_files
          GROUP BY   tablespace_name) a,
         (  SELECT   tablespace_name, SUM (bytes) / 1024 / 1024 free_size
              FROM   dba_free_space
          GROUP BY   tablespace_name) b
 WHERE   a.tablespace_name = b.tablespace_name(+);

查看RMAN备份进度:

SELECT SID,OPNAME, SERIAL#, CONTEXT, SOFAR, TOTALWORK,
ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"
FROM V$SESSION_LONGOPS
WHERE OPNAME LIKE 'RMAN%'
AND OPNAME NOT LIKE '%aggregate%'
AND TOTALWORK != 0
AND SOFAR <> TOTALWORK
order by "%_COMPLETE"
desc

CentOS7.x快速安装Mariadb10.4

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。

mariadb.png
CentOS7快速安装Mariadb10.04方法如下:
1、检查是否已经具有MariaDB相关安装,并删除已有安装:

rpm -qa|grep mariadb  #查询已安装包
rpm -e --nodeps mariadb-*   #移出相关包
yum remove mysql mysql-server mysql-libs compat-mysql51   # 删除Mysql服务

2、增加MariaDB的仓库源,使用官方脚本会自动安装最新仓库:

yum install wget -y
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
chmod +x mariadb_repo_setup
./mariadb_repo_setup
yum install MariaDB-server -y
systemctl start mariadb
systemctl enable mariadb

3、初始化安全设置:

mysql_secure_installation   #根据提示操作修改密码等


---阅读剩余部分---

CentOS7.8快速安装Redis6.0.5

在安装Redis6之前需要升级下gcc版本:参考 CentOS7.7快速升级gcc到8.x版本
快速安装步骤如下:
安装下tcl包:以免make test不能通过

yum install tcl -y

下载编译安装:

wget http://download.redis.io/releases/redis-6.0.5.tar.gz
tar xvf redis-6.0.5.tar.gz
mv redis-6.0.5 /usr/local/redis
cd /usr/local/redis/
make
make test
make install

修改参数,可参考redis.conf配置,最后启动即可;
以配置文件方式启动

/usr/local/redis/src/redis-server /usr/local/redis/redis.conf

redis-cli客户端命令整理

redis-cli 是Redis命令行界面,一个简单的程序,允许向Redis发送命令,并直接从终端读取服务器发送的回复。

有两种主要的模式:一种是交互模式,在这种模式下,用户输入命令并获得回复的REPL(Read Eval Print Loop)另一种模式是将命令作为参数发送redis-cli,执行并打印在标准输出上。

redis-cli命令参数:

主要参数:
-h host地址
-p 端口
-n 修改数据库
-r(repeat)选项代表江命令执行多次
-i(interval)选项代表每个几秒执行一次命令(必须和-r选项一致使用;单位是秒,不支持毫秒微单位)
-x 选项代表从标准输入(stdin)读取数据作为redis-cli的最后一个参数
-c(cluster)选项是连接Redis Cluster节点时需要使用的,-c选项可以防止moved和ask异常
-a 如果Redis配置了密码,可以用-a(auth)选项,有了这个选项就不需要手动输入auth命令
--scan和--pattern 选项用于扫描指定模式的键,相当于使用scan命令
--slave 选项是把当前客户端模拟成当前Redis节点的从节点,可以用来获取当前Redis节点的更新操作
--rdb 选项会请求Redis实例生成并发送RDB持久化文件,保存在本地,可使用它做持久化文件的定期备份
--pipe 选项用于将命令封装成Redis通信协议定义的数据格式,批量发送给Redis执行
--bigkeys 选项使用scan命令对Redis的键进行采样,从中找到内存占用比较大的键值,这些键可能是系统的瓶颈
--eval 选项用于执行指定Lua脚本
--latency 选项可以测试客户端到目标Redis的网络延迟(执行结果只有一条)
--latency-history 选项以分时段的形式了解延迟信息(延时信息每15秒输出一次),可以通过-i参数控制间隔时间
--latency-dist 选项会使用统计图表的形式从控制台输出延迟统计信息
--stat 选项可以实时获取Redis的重要统计信息(info命令中的统计信息更全),能实时看到一些增量的数据(例如requests)
--raw和--no-raw
--no-raw选项是要求命令的返回结果必须是原始的格式,--raw恰恰相反,返回格式化后的结果

常见命令:

从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。
SLAVEOF host port  #命令可以将当前服务器转变为指定服务器的从属服务器(slave server)
client list   #显示连接到服务器的客户端信息
shutdown   #关闭redis服务
ping       #该命令用于检测 redis 服务是否启动
redis-cli -h host -p port -a password  command  #该命令用于在远程服务上执行命令
keys *     #获取所有键值
dbsize     #获取键总数
exists key #查询键是否存在,返回存在的个数,可查询多个
type key   #查询键类型
move key db #移动键到其他数据库
ttl key    #查询key的生命周期(秒)-1:永远不过期。
设置过期时间
秒语法:expire key seconds
毫秒语法:pexpire key milliseconds
永不过期:persist key
rename key newkey  #更改键名称
strlen key   #获取值长度
append key value  #追加内容
set(key, value):给数据库中名称为key的string赋予值value
get(key):返回数据库中名称为key的string的value

via:https://www.runoob.com/redis/redis-keys.html
https://zhuanlan.zhihu.com/p/47692277
https://my.oschina.net/MrMichael/blog/294888

CentOS7快速升级OpenSSH到最新版本

openssh.gif
CentOS7默认带的ssh版本是7.4p1存在远程代码执行漏洞,需升级至当前最新版OpenSSH_8.3解决,查看当前版本信息:

[root@c7 ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
[root@c7 ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

快速升级步骤如下:
安装基础组件:

yum install gcc gcc-c++ openssl-devel autoconf automake zlib zlib-devel pcre-devel pam-devel rpm-build pam-devel telnet -y

卸载系统老版本openssh,备份配置文件

rpm -e --nodeps $(rpm -qa | grep openssh)
cp -r /etc/ssh/ /tmp/ssh
cd /etc/ssh/
rm /etc/ssh/* -rf


---阅读剩余部分---

CentOS7快速升级OpenSSL

openssl-logo.png
CentOS7的OpenSSL软件版本比较低,查看默认版本:

[root@c7 ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
[root@c7 ~]# openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

升级到OpenSSL 1.1.1g 版本步骤如下:
安装基础组件:

yum install gcc gcc-c++ autoconf automake zlib zlib-devel pcre-devel -y

下载解压编译安装openssl

wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
tar xvf openssl-1.1.1g.tar.gz
./config shared --openssldir=/usr/local/openssl --prefix=/usr/local/openssl
make
make install


---阅读剩余部分---

Tengine ngx_http_upstream_check_module 健康功能检测使用

ngx_http_upstream_check_module模块可以为Tengine提供主动式后端服务器健康检查的功能。
该模块在Tengine-1.4.0版本以前没有默认开启,它可以在配置编译选项的时候开启:

--add-module=modules/ngx_http_upstream_check_module

编辑nginx.conf

http {
    upstream cluster1 {
        # simple round-robin
        server 192.168.30.116:80;
        #server 192.168.0.2:80;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_send "HEAD / HTTP/1.0\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
    }
    upstream cluster2 {
        # simple round-robin
        server 192.168.30.113:80;
        server 192.168.30.114:80;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_keepalive_requests 100;
        check_http_send "HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
    }
    server {
        listen 80;
        location /1 {
            proxy_pass http://cluster1;
        }
        location /2 {
            proxy_pass http://cluster2;
        }
        location /status {
            check_status;
            access_log   off;
            allow SOME.IP.ADD.RESS;
            deny all;
        }
    }
}
指令后面的参数意义是:
interval:向后端发送的健康检查包的间隔。
fall(fall_count): 如果连续失败次数达到fall_count,服务器就被认为是down。
rise(rise_count): 如果连续成功次数达到rise_count,服务器就被认为是up。
timeout: 后端健康请求的超时时间。
default_down: 设定初始时服务器的状态,如果是true,就说明默认是down的,如果是false,就是up的。默认值是true,也就是一开始服务器认为是不可用,要等健康检查包达到一定成功次数以后才会被认为是健康的。
type:健康检查包的类型,现在支持以下多种类型
tcp:简单的tcp连接,如果连接成功,就说明后端正常。
ssl_hello:发送一个初始的SSL hello包并接受服务器的SSL hello包。
http:发送HTTP请求,通过后端的回复包的状态来判断后端是否存活。
mysql: 向mysql服务器连接,通过接收服务器的greeting包来判断后端是否存活。
ajp:向后端发送AJP协议的Cping包,通过接收Cpong包来判断后端是否存活。
port: 指定后端服务器的检查端口。你可以指定不同于真实服务的后端服务器的端口,比如后端提供的是443端口的应用,你可以去检查80端口的状态来判断后端健康状况。默认是0,表示跟后端server提供真实服务的端口一样。该选项出现于Tengine-1.4.0。
check_http_send http_packet:
该指令可以配置http健康检查包发送的请求内容。为了减少传输数据量,推荐采用"HEAD"方法。
当采用长连接进行健康检查时,需在该指令中添加keep-alive请求头,如:"HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n"。 同时,在采用"GET"方法的情况下,请求uri的size不宜过大,确保可以在1个interval内传输完成,否则会被健康检查模块视为后端服务器或网络异常。
check_http_expect_alive: 该指令指定HTTP回复的成功状态,默认认为2XX和3XX的状态是健康的。
check_status:
显示服务器的健康状态页面。该指令需要在http块中配置。
在Tengine-1.4.0以后,你可以配置显示页面的格式。支持的格式有: html、csv、 json。默认类型是html。
你也可以通过请求的参数来指定格式,假设‘/status’是你状态页面的URL, format参数改变页面的格式,比如:
/status?format=html
/status?format=csv
/status?format=jsonfan

via:
http://tengine.taobao.org/document_cn/http_upstream_check_cn.html

Tengine快速安装及使用

Tengine是由淘宝网发起的Web服务器项目。它在Nginx 的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网 ,天猫商城 等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
官网地址:http://tengine.taobao.org
tengine.png
步骤如下:
安装相关依赖包:

yum install gcc openssl-devel openssl openssl-devel -y
cd /opt
wget https://zlib.net/fossils/zlib-1.2.11.tar.gz
tar xvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure --prefix=/usr/local/zlib
make
make install

wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz
tar xvf pcre-8.42.tar.gz
cd pcre-8.42
./configure --prefix=/usr/local/pcre --libdir=/usr/local/lib/pcre --includedir=/usr/local/include/pcre
make
make install

安装Tengine,最新版本的Tegine可从官网 http://tengine.taobao.org 获取,使用nginx用户运行Tengine





---阅读剩余部分---

CentOS7安装入侵检测工具chkrootkit

rootkit是linux系统下常见一种木马后门程序,通过替换系统文件来达到隐藏和入侵的目的,攻击能力极强;
linux下容易被替换系统程序有login ls ps ifconfig du find nestat 等文件,其中login是最经常被替换的;因为linux登录,无论远程还是本地,都必须要启动/bin/login来收集并核对用户的账号和密码;系统管理员修改密码,攻击者还是可以登录系统的;
rootkit.jpg
安装步骤初始需要的组件:

yum install wget gcc-c++ glibc-static -y

下载安装包:

wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.md5

校验安装包:

md5sum -c chkrootkit.md5
chkrootkit.tar.gz: OK



---阅读剩余部分---

MySQL触发器的创建、查看、删除

介绍
表述:顾名思义在条件符合某种情况时,被触发执行的相关操作。
时间:事件发生前before和发生后after
事件:

名称    介绍
update    可用**old**访问旧数据,**new**访问新数据
delete    可用**old**访问旧数据
insert    可用**new**访问新数据 

创建触发器:

delimiter //  重定义行结束符
    create trigger trigger_name trigger_time trigger_event on table_name for each row
    begin
    -- 需要执行的sql操作语句
    end//
delimiter ;
-- delimiter          用于修改默认的行结束符,由于在触发器中有多条sql语句,他们需要使用分号来结束,但是触发器是一个整体,所以需要先更换默认的行结束符
-- trigger_name     自定义触发器名
-- trigger_time        时间点 before|after
-- trigger_event     事件 delete|update|insert
-- table_name         表名



---阅读剩余部分---

Nginx解决前端跨域问题

CORS是一个W3C标准,全称是跨域资源共享(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

当前几乎所有的浏览器(Internet Explorer 8+, Firefox 3.5+, Safari 4+和 Chrome 3+)都可通过名为跨域资源共享(Cross-Origin Resource Sharing)的协议支持AJAX跨域调用。

Chrome,Firefox,Opera,Safari都使用的是XMLHttpRequest2对象,IE使用XDomainRequest。

简单来说就是跨域的目标服务器要返回一系列的Headers,通过这些Headers来控制是否同意跨域。跨域资源共享(CORS)也是未来的跨域问题的标准解决方案。

---阅读剩余部分---

Windows批处理脚本获取前一天日期

Windows批处理获取日期时间还是稍有点复杂,以下脚本为记录获取前一天的日期:

@echo off
rem 获取昨天日期
set YE=%date:~0,4%
set MO=%date:~5,2%
set DA=%date:~8,2%
set DG=1
set/a vY1=%YE% %% 400
set/a vY2=%YE% %% 4
set/a vY3=%YE% %% 100
if %vY1%==0 (set var=true) else (if %vY2%==0 (if %vY3%==0 (set var=false) else (set var=true)) else (set var=false))
set LY=%YE%
set LM=%MO%
if %MO:~0,1%==0 (set MO=%MO:~1,1%)
if %DA:~0,1%==0 (set DA=%DA:~1,1%)
if %DA% GTR %DG% (set/a LD=%DA%-%DG%) else (
if %MO%==1 (set/a LY=%YE%-1) & (set/a LM=12+%MO%-1) & (set/a LD=31+%DA%-%DG%) else (
set/a LM=%MO%-1
if %MO%==3 (if %var%==false (set/a LD=28+%DA%-%DG%) else (set/a LD=29+%DA%-%DG%))
for %%a in (2 4 6 8 9 11) do (if "%MO%"=="%%a" (set/a LD=31+%DA%-%DG%))
for %%b in (5 7 8 10 12) do (if "%MO%"=="%%b" (set/a LD=30+%DA%-%DG%))))
if %LM% LSS 10 set LM=0%LM:~-1%
if %LD% LSS 10 set LD=0%LD:~-1%
set Han=
set Han=%LY%%LM%%LD%
echo 昨天的日期为:%Han%
pause

Nginx实现301跳转

将老域名后导流到新域名:
需要将之前用的www.a.com域名的流量全部跳转到www.b.com
实现效果:比如访问 www.a.com/news/123.html自动跳到www.b.com/news/123.html
使用Nginx的rewrite命令实现:

server {
listen     80;
server_name  www.a.com;
rewrite  ^/(.*)$  http://www.b.com/$1 permanent;
其他配置省略...
}



---阅读剩余部分---

ORA-01940: 无法删除当前连接的用户处理

Oracle11gR2删除用户时报错如下:

SQL> drop user HONGSINC CASCADE;
drop user ODI_SRC CASCADE
*
第 1 行出现错误:
ORA-01940: 无法删除当前连接的用户

ORA-01940是因为要删除的用户,还存在连接无法删除,解决方法如下:
查看当前用户的连接:

select username,sid,serial# from v$session where username='HONGSINC';
USERNAME                                                            SID    SERIAL#
------------------------------------------------------------ ---------- ----------
HONGSINC                                                             127       185
HONGSINC                                                             246       195
HONGSINC                                                             366       183

删除用户的sid,和serial:

SQL> alter system kill session'127,185';

系统已更改。

SQL> alter system kill session'246,195';

系统已更改。

SQL> alter system kill session'366,183';

系统已更改。

删除用户:

SQL> drop user HONGSINC CASCADE;
用户已删除。

如果在drop后还提示ORA-01940:无法删除当前已链接的用户,说明还有连接的session,可以通过查看session的状态来确定该session是否被kill了,
用如下语句查看:status为要删除用户的session状态,如果还为inactive,说明没有被kill掉,如果状态为killed,说明已kill。

select saddr,sid,serial#,paddr,username,status from v$session where username ='HONGSINC';

Go单引号和双引号的异同点

Go语言的字符串类型string在本质上就与其他语言的字符串类型不同:

Java的String、C++的std::string以及Python3的str类型都只是定宽字符序列

Go语言的字符串是一个用UTF-8编码的变宽字符序列,它的每一个字符都用一个或多个字节表示

即:一个Go语言字符串是一个任意字节的常量序列。

Golang的双引号和反引号都可用于表示一个常量字符串,不同在于:

双引号用来创建可解析的字符串字面量(支持转义,但不能用来引用多行)

反引号用来创建原生的字符串字面量,这些字符串可能由多行组成(不支持任何转义序列),原生的字符串字面量多用于书写多行消息、HTML以及正则表达式,一般用来原样输出;

单引号则用于表示Golang的一个特殊类型:rune,类似其他语言的byte但又不完全一样,是指:码点字面量(Unicode code point),不做任何转义的原始内容。

string和[]byte的对比:

string可以直接比较,而[]byte不可以,所以[]byte不可以当map的key值。
因为无法修改string中的某个字符,需要粒度小到操作一个字符时,用[]byte。
string值不可为nil,所以如果你想要通过返回nil表达额外的含义,就用[]byte。
[]byte切片这么灵活,想要用切片的特性就用[]byte。
需要大量字符串处理的时候用[]byte,性能好很多。

最新

分类

归档

评论

其它