MySQL5.7.x中group concat函数数据被截断问题解决

MySQL5.6中没这个问题,5.7中存在group concat函数数据被截断的问题,查询默认初始设置

mysql> show variables like 'group_concat_max_len';
+----------------------+-------+
| Variable_name  | Value |
+----------------------+-------+
| group_concat_max_len | 1024 |
+----------------------+-------+
1 row in set (0.00 sec)

能查询出来,但是查询结果异常,
MySQL官方手册 对它的定义是 The maximum permitted result length in bytes for the GROUP_CONCAT() function. ,也就是它限制了 GROUP_CONCAT 数据的长度。
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html

The maximum value for group_concat_max_len for 64-bit is  18446744073709551615
The maximum value for group_concat_max_len for 32-bit is  4294967295

解决方法:
1、修改MySQL配置文件my.cnf,在[mysqld]节点中添加

group_concat_max_len = 18446744073709551615

2、更改全局配置

SET GLOBAL group_concat_max_len=18446744073709551615;
SET SESSION group_concat_max_len=18446744073709551615;

使配置在当前会话中也立即生效,其它已经登录的会话终端需要重启生效,查询查询结果正常。

/lib/libz.so.1: no version information available问题解决

出现了/lib/libz.so.1: no version information available 警告信息,但命令还是可以执行的
安装zlib新版本即可解决

wget http://zlib.net/zlib-1.2.11.tar.gz  
tar zxvf zlib-1.2.11.tar.gz  
cd zlib-1.2.11
./configure  
make  
make install  
  
#覆盖原版本,可以先备份一下原版本  
cp /usr/local/lib/libz.so.1 /lib/ 

MongoDB删除集合db.collection.drop

MongoDB 的 db.collection.drop() 用于从数据库中删除集合,删除集合collection语法如下:

db.COLLECTION_NAME.drop()

首先,检查数据库 test 中可用的集合。

>use test
switched to db test
> show collections
mycol
mycollection
newcollection

现在删除名称为 mycollection 的集合。

>db.mycollection.drop()
true

再次检查当前数据库的集合列表,如下 -

> show collections
mycol
newcollection

如果选定的集合成功删除,drop()方法将返回true,否则返回false。

CentOS7下快速安装部署Svn服务

Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,现在发展成为 Apache 软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分。SVN相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS,互联网上免费的版本控制服务多基于Subversion。
subversion_logo.png
Subversion官网地址:http://subversion.apache.org/packages.html
SVN客户端:TortoiseSVN 官网下载地址:http://tortoisesvn.net/downloads.html
安装SVN服务:

yum install subversion -y

创建svn目录

mkdir -p /data/svn

新建资源仓库

svnadmin create /data/svn/project
ll /data/svn/project/
total 24
drwxr-xr-x 2 root root 4096 Mar 23 14:43 conf
drwxr-sr-x 6 root root 4096 Mar 23 15:15 db
-r--r--r-- 1 root root    2 Mar 23 14:35 format
drwxr-xr-x 2 root root 4096 Mar 23 14:35 hooks
drwxr-xr-x 2 root root 4096 Mar 23 14:35 locks
-rw-r--r-- 1 root root  229 Mar 23 14:35 README.txt
目录用途说明:
hooks目录:放置hook脚本文件的目录
locks目录:用来放置subversion的db锁文件和db_logs锁文件的目录,用来追踪存取文件库的客户端
format文件:是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号
conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等)

配置svn服务svnserver.conf

vim /data/svn/project/svnserver.conf
[general]
anon-access = none
auth-access = write
password-db = /data/svn/project/conf/passwd
authz-db = /data/svn/project/conf/authz
realm = My Test Repository         #提示信息

添加用户和密码

vim /data/svn/project/passwd
[users]
a1 = 123abc
a2 = aaabbbccc
test1 = 11aabb
用户配置文件的修改立即生效,不必重启svn服务

配置用户授权文件

vim /data/svn/project/authz
[groups]

user = a1,a2
test = test1
[/]

@user = rw
@test = r
* =

格式说明

版本库目录格式: 

[<版本库>:/项目/目录] 

@<用户组名> = <权限> 

<用户名> = <权限>

/ 表示对根目录(即/data/svn/project目录)下的所有子目录范围设置权限;

[/abc] 表示对资料库中abc项目设置权限;

创建一个user组,组成员包括a1和a2

创建一个test组,成员只有test1;

user组对目录有读写权限;

单个用户test1有读权限;

*=表示除了上面设置的权限用户组以外,其他所有用户都设置空权限,空权限表示禁止访问本目录,这很重要一定要加上。

注意:对权限配置文件的修改立即生效,不必重启svn。 

启动svn服务

svnserve -d -r /data/svn/project/

注意:不要使用系统提供的 /etc/init.d/svnserve start 来启动,因为系统默认的启动脚本中没有使用 –r /data/svn/project参数指定一个资源。这种情况下启动的svn服务,客户端连接会提示“svn: No repository found in 'svn://x.x.x.x/project' ”这样的错误。

默认svn服务器端口是3690。

杀死svn服务:

ps -ef|grep svnserve
直接kill -9 Pid号即可

或者修改/etc/init.d/svnserve在start()函数部分的daemon增加svn路径,修改后的服务文件为:

 cat /etc/init.d/svnserve 
#!/bin/bash
#
# svnserve        Startup script for the Subversion svnserve daemon
#
# chkconfig: - 85 15
# description: The svnserve daemon allows access to Subversion repositories \
#              using the svn network protocol.
# processname: svnserve
# config: /etc/sysconfig/svnserve
# pidfile: /var/run/svnserve.pid
#
### BEGIN INIT INFO
# Provides: svnserve
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Short-Description: start and stop the svnserve daemon
# Description: The svnserve daemon allows access to Subversion
#   repositories using the svn network protocol.
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/svnserve ]; then
        . /etc/sysconfig/svnserve
fi

exec=/usr/bin/svnserve
prog=svnserve
pidfile=${PIDFILE-/var/run/svnserve.pid}
lockfile=${LOCKFILE-/var/lock/subsys/svnserve}
args="--daemon --pid-file=${pidfile} $OPTIONS"
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

lockfile=/var/lock/subsys/$prog

start() {
    [ -x $exec ] || exit 5
    [ -f $config ] || exit 6
    echo -n $"Starting $prog: "
    daemon --pidfile=${pidfile} $exec $args -r /data/svn/project
    retval=$?
    echo
    if [ $retval -eq 0 ]; then
        touch $lockfile || retval=4
    fi
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc -p ${pidfile} $prog
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    stop
    start
}

reload() {
    restart
}

force_reload() {
    restart
}

rh_status() {
    # run checks to determine if the service is running or use generic status
    status -p ${pidfile} $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $?

常见问题处理:

提示svn: No repository found in 'svn://x.x.x.x/project'错误?
解决:启动svn服务的时候没有使用-r /svn/project参数,没有指明资源库的具体路径。使用# svnserve -d -r /svn/project/ 命令来启动就可以了,不要使用/etc/init.d/svnserver脚本。

执行命令# svn co svn://x.x.x.x.x/project时提示“svn: Authorization failed”错误?
解决:一般这种授权失败的错误原因都来自conf/authz文件的配置。

checkout的时候SVN看到anon-access = read只读模式 日志文件显示正常,不要求用户名密码,而到了具体目录的时候问题发生了,这时没有用户密码就不能获得文件就会出错;
anon-access = none 禁止所有匿名访问,也就是说如果不在authz-db中开放访问的用户,是不会允许读写版本日志的,故系统对日志的读写也纳入禁止访问范围,所以anon-access = none才会正常。

Nginx https代理tomcat redirect问题的解决

前端nginx,同时启用http和https服务,但是在https页面内不允许加载 http的请求、服务器端重定向时会返回http导致页面不加载也就是请求不到资源,修改nginx配置,关键配置如下:
在server段增加:

proxy_redirect http:// $scheme://;
port_in_redirect on;
proxy_set_header Host $host:$server_port;

reload nginx以后问题解决;

Oracle查看执行最慢与查询次数、高消耗资源最多的sql语句

在ORACLE数据库应用调优中,一个SQL的执行次数/频率也是常常需要关注的,因为某个SQL执行太频繁,要么是由于应用设计有缺陷,需要在业务逻辑上做出优化处理,要么是业务特殊性所导致。如果执行频繁的SQL,往往容易遭遇一些并发性的问题:
查询执行最慢的sql

select *
 from (select sa.SQL_TEXT,
        sa.SQL_FULLTEXT,
        sa.EXECUTIONS "执行次数",
        round(sa.ELAPSED_TIME / 1000000, 2) "总执行时间",
        round(sa.ELAPSED_TIME / 1000000 / sa.EXECUTIONS, 2) "平均执行时间",
        sa.COMMAND_TYPE,
        sa.PARSING_USER_ID "用户ID",
        u.username "用户名",
        sa.HASH_VALUE
     from v$sqlarea sa
     left join all_users u
      on sa.PARSING_USER_ID = u.user_id
     where sa.EXECUTIONS > 0
     order by (sa.ELAPSED_TIME / sa.EXECUTIONS) desc)
 where rownum <= 50;

查询次数最多的 sql

select *
 from (select s.SQL_TEXT,
        s.EXECUTIONS "执行次数",
        s.PARSING_USER_ID "用户ID",
        rank() over(order by EXECUTIONS desc) EXEC_RANK
     from v$sql s
     left join all_users u
      on u.USER_ID = s.PARSING_USER_ID) t
 where exec_rank <= 100;

根据用户ID查询用户名:

select USERNAME from dba_users where USER_ID = '89'; 

读硬盘多或占用内存可能多的SQL

select sql_text, disk_reads, buffer_gets, parsing_schema_name, executions
from v$sqlarea
order by disk_reads desc;

说明:单纯从V$sqlarea中是无法查出每个SQL消耗的内存量的,但我们可以借助磁盘读次数间接反映可能的消耗内存量较大的SQL语句,然后再借助执行计划(如v$sql_plan视图)具体查看。
利用系统视图v$sqlarea,其中disk_reads是磁盘读次数,也是主要字段,剩余字段均为参考字段。其中,buffer_gets是内存读次数,parsing_schema_name是首次编译者模式名(一般与user名相同),executions是语句执行次数。
需要注意的是,v$sqlarea中sql_text可能不完整,若需要完整的则需要借助hash_value或sql_id结合v$sqltext来查看分析。
查看排序次数最多的SQL

select sql_text, sorts, parsing_schema_name
from v$sqlarea
order by sorts desc;

V$SQL中的列说明:

SQL_TEXT:SQL文本的前1000个字符 
SHARABLE_MEM:占用的共享内存大小(单位:byte) 
PERSISTENT_MEM:生命期内的固定内存大小(单位:byte) 
RUNTIME_MEM:执行期内的固定内存大小 
SORTS:完成的排序数 
LOADED_VERSIONS:显示上下文堆是否载入,1是0否 
OPEN_VERSIONS:显示子游标是否被锁,1是0否 
USERS_OPENING:执行语句的用户数 
FETCHES:SQL语句的fetch数。 
EXECUTIONS:自它被载入缓存库后的执行次数 
USERS_EXECUTING:执行语句的用户数 
LOADS:对象被载入过的次数 
FIRST_LOAD_TIME:初次载入时间 
INVALIDATIONS:无效的次数 
PARSE_CALLS:解析调用次数 
DISK_READS:读磁盘次数 
BUFFER_GETS:读缓存区次数 
ROWS_PROCESSED:解析SQL语句返回的总列数 
COMMAND_TYPE:命令类型代号 
OPTIMIZER_MODE:SQL语句的优化器模型 
OPTIMIZER_COST:优化器给出的本次查询成本 
PARSING_USER_ID:第一个解析的用户ID 
PARSING_SCHEMA_ID:第一个解析的计划ID 
KEPT_VERSIONS:指出是否当前子游标被使用DBMS_SHARED_POOL包标记为常驻内存 
ADDRESS:当前游标父句柄地址 
TYPE_CHK_HEAP:当前堆类型检查说明 
HASH_VALUE:缓存库中父语句的Hash值 
PLAN_HASH_VALUE:数值表示的执行计划。 
CHILD_NUMBER:子游标数量 
MODULE:在第一次解析这条语句是通过调用DBMS_APPLICATION_INFO.SET_MODULE设置的模块名称。 
ACTION:在第一次解析这条语句是通过调用DBMS_APPLICATION_INFO.SET_ACTION设置的动作名称。 
SERIALIZABLE_ABORTS:事务未能序列化次数 
OUTLINE_CATEGORY:如果outline在解释cursor期间被应用,那么本列将显示出outline各类,否则本列为空 
CPU_TIME:解析/执行/取得等CPU使用时间(单位,毫秒) 
ELAPSED_TIME:解析/执行/取得等消耗时间(单位,毫秒) 
OUTLINE_SID:outline session标识 
CHILD_ADDRESS:子游标地址 
SQLTYPE:指出当前语句使用的SQL语言版本 
REMOTE:指出是否游标是一个远程映象(Y/N) 
OBJECT_STATUS:对象状态(VALID or INVALID) 
IS_OBSOLETE:当子游标的数量太多的时候,指出游标是否被废弃(Y/N) 

v$sqlarea常用字段说明

 SQL_TEXT:SQL语句的前1000个字符;
    SQL_FULLTEXT:SQL语句的所有字符;
    SQL_ID:缓存在高速缓冲区(library cache)中的SQL父游标的唯一标识ID(注,类似于hash_value,不过hash_value是4bytes而sql_id是8bytes,sql_id更精确后期可能会替代hash_value);
    SHARABLE_MEM:SQL语句及其子游标占用的共享内存大小;
    PERSISTENT_MEM:打开SQL语句的生命周期内所占用的固定内存大小(包含子游标);
    RUNTIME_MEM:游标执行期间所占用的固定内存大小;
    SORTS:语句执行导致的排序次数;
    VERSION_COUNT:在缓存中以该语句为父语句的子游标总数;
    LOADED_VERSIONS:缓存中载入了这条语句上下文堆(KGL heap 6)的子游标数;
    OPEN_VERSIONS:父游标下打开的子游标个数;
    USERS_OPENING:打开子游标的用户个数;
    FETCHES:SQL语句的fetch数;
    EXECUTIONS:包含所有子游标在内该SQL语句共执行次数;
    USERS_EXECUTING:执行过该语句所有子游标的用户总数;
    LOADS:语句被载入的总次数;
    FIRST_LOAD_TIME:父游标被首次载入(编译)的时间;
    PARSE_CALLS:父游标下所有子游标解析调用次数;
    DISK_READS:该语句通过所有子游标导致的读磁盘次数;
    DIRECT_WRITES:该语句通过所有子游标导致的直接写入次数;
    BUFFER_GETS:该语句通过所有子游标导致的读缓存次数;
    APPLICATION_WAIT_TIME:应用等待时间;
    USER_IO_WAIT_TIME:用户I/O等待时间;
    PLSQL_EXEC_TIME:PLSQL执行时间;
    ROWS_PROCESSED:该SQL语句处理的总行数;
    OPTIMIZER_COST:此查询优化给出的成本数;
    PARSING_USER_ID:第一次解析该父语句的用户ID;
    PARSING_SCHEMA_ID:第一次解析该语句SCHEMA的ID;
    PARSING_SCHEMA_NAME:解析该语句的SCHEMA的NAME;
    KEPT_VERSIONS:指出是否当前子游标被使用DBMS_SHARED_POOL包标记为常驻内存;
    ADDRESS:当前游标父句柄(唯一指向该游标的一种地址编号);
    HASH_VALUE:该语句在library cache中hash值;
    PLAN_HASH_VALUE:执行计划的hash值,可依此确定两个执行计划是否相同(取代每行每字符进行比较的方式);
    CPU_TIME:该语句解析、执行和fetch(取值)所消耗的CPU时间;
    ELAPSED_TIME:该语句解析、执行和fetch(取值)所经过的时间;
    LAST_ACTIVE_TIME:查询计划最后一次执行的时间;
    LOCKED_TOTAL:所有子游标被锁的次数;
v$sqltext
    ADDRESS:当前游标父句柄(唯一指向该游标的一种地址编号);
    HASH_VALUE:该游标(子游标)在library cache中唯一hash值;
    SQL_ID:缓存游标中该SQL的一个唯一标识值;
    COMMAND_TYPE:SQL语句类型,如select、insert、update等;
    PIECE:排序SQL文本的碎片数;
    SQL_TEXT:包含一个完整SQL中的某一小块SQL文本字符(要完整的SQL语句需要把这些碎片组合起来);
v$session
    SADDR:session地址;
    SID:session标识值,常跟serial#联合唯一确定一个session(在杀进程时,有时SID会重用,造成误杀。而serial会增加但不会重复,sid 在同一个instance的当前session中是一个unique key,而sid ,serial#则是在整个instance生命期内的所有session中是unique key);
    SERIAL#:会话序列号,用于在一个会话结束而另一个会话重用这该会话的SID时,唯一确定一个会话;
    AUDSID:审计会话ID,可以通过audsid查询当前session的sid,select sid from v$session where audsid=userenv('sessionid');
    PADDR:进程地址,关联v$process的addr字段,通过这个可以查询到进程对应的session;
    USER#:同于dba_users中的user_id,Oracle内部进程user#为0;
    USERNAME:会话拥有者用户名,等于dba_users中的username,Oracle内部进程的username为空;
    COMMAND:正在执行的SQL语句类型,如1为create table、3为select等;
    OWNERID:如果该列值为2147483644则值无效,否则值用于会话迁移、并行等;
    TADDR:Address of transaction state object;
    LOCKWAIT:标识当前查询是否处于锁等待状态,为空则表示无等待;
    STATUS:标识session状态,Active正执行SQL语句,inactive等待操作,killed被标注为杀死;
    SERVER:服务器类型,DEDICATED专用、SHARED共享等;
    SCHEMA#:SCHEMA标识ID值,Oracle内部进程的schema#为0;
    SCHEMANAME:SCHEMA用户名,Oracle内部进程的为sys;
    OSUSER:客户端操作系统用户名;
    PROCESS:客户端操作系统进程ID;
    MACHINE:操作系统机器名;
    TERMINAL:操作系统终端名;
    PROGRAM:操作系统应用程序名,如EXE或sqlplus.exe;
    TYPE:会话类型,如BACKGROUND或USER;
    SQL_ADDRESS:和SQL_HASH_VALUE一起使用标识正在执行的SQL语句;
    SQL_HASH_VALUE:和SQL_ADDRESS一起使用标识正在执行的SQL语句;
    SQL_ID:正在执行的SQL语句的标识ID;
    SQL_CHILD_NUMBER:正在执行的SQL语句的子ID;
    FIXED_TABLE_SEQUENCE:当session完成一个user call后就会增加的一个数值,也就是说,如果session挂起,它就不会增加。因此可以根据这个字段来监控某个时间点以来的session性能情况。例如,一个小时前某个session的此字段数值为10000,而现在是20000,则表明一个小时内其user call较频繁,可以重点关注此session的performance statistics。
    ROW_WAIT_OBJ#:被锁定行所在table的object_id,和dba_object中的object_id关联可以得到被锁定的table name;
    ROW_WAIT_FILE#:被锁定行所在的datafile id,和v$datafile中的file#关联可以得到datafile name;
    ROW_WAIT_BLOCK#:被锁定的块ID;
    ROW_WAIT_ROW#:被锁定的当前行;
    LOGON_TIME:登录时间;

Docker下面安装MySQL5.7.21

安装MySQL5.7.21镜像

docker pull mysql:5.7.21

查看安装的镜像docker images

[root@cops163 ~]# docker images | grep mysql
docker.io/mysql         5.7.21              5195076672a7        6 days ago          371 MB

创建数据目录

mkdir /data/mysql_data

创建配置文件目录

mkdir /data/conf

创建并运行镜像

docker run -p 3306:3306 --name mysql001 --restart=always -v /data/conf:/etc/my.cnf.d -v /data/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.21 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci

参数说明如下:

-p 3306:3306  #将容器的3306端口映射到主机的3306端口
--name mysql001  #容器的名字为mysql001
--restart=always  #在宿主机重启后或者Docker服务重启后自动启动容器,
no #不重启(不带restart参数时,默认不重启)
on-failure  #退出状态非0时重启
always  #始终重启
-v /data/conf:/etc/my.cnf.d  #将/data/conf目录映射到/etc/my.cnf.d下面 
-v /data/mysql_data:/var/lib/mysql  #将/data/mysql目录映射到/var/lib/mysql下面
-e MYSQL_ROOT_PASSWORD=123456 #设置root初始密码为123456
 -d mysql:5.7.21  #后台运行容器,并返回容器ID
--character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci   #设置编码为utf8mb4

进入Docker MySQL控制台

docker exec -it mysql001 mysql -uroot -p
mysql> status;
--------------
mysql  Ver 14.14 Distrib 5.7.21, for Linux (x86_64) using  EditLine wrapper

Connection id:          2
Current database:       langold_enrolment
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.7.21 MySQL Community Server (GPL)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    latin1
Conn.  characterset:    latin1
UNIX socket:            /var/run/mysqld/mysqld.sock
Uptime:                 47 min 16 sec

Threads: 2  Questions: 1785612  Slow queries: 0  Opens: 246  Flush tables: 1  Open tables: 135  Queries per second avg: 629.623
--------------
mysql> 

查看docker容器的log

docker logs -f mysql001

导入SQL文件到MySQL中

docker exec -i mysql001 mysql -uroot -p123456 langold_enrolment < /tmp/langold_enrolment.sql

导出SQL文件

docker exec -it mysql001 mysqldump -uroot -p123456 aaa > /tmp/aaa.sql

更多参考Docker官方文档:
https://hub.docker.com/r/mysql/mysql-server/

Docker学习笔记一:docker基础

Docker 是什么?
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

docker-facebook.png
Docker 的用途
Docker 的主要用途,目前有三大类。

(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。

(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。

(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

Docker的优点
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
容器是进程级别的,相比虚拟机有很多优势。

(1)启动快
容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。

(2)资源占用少
容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所有资源。另外,多个容器可以共享资源,虚拟机都是独享资源。

(3)体积小
容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。
总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小得多。
docker安装:

yum install docker -y

启动docker:

systemctl start docker

加入开启启动:

systemctl enable docker

建立 docker 组:

groupadd docker

将当前用户加入docker组

usermod -aG docker $USER

添加内核参数:

tee -a /etc/sysctl.conf <<-EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

重新加载

sysctl -p

重新启动服务

systemctl daemon-reload
systemctl restart docker

加入国内镜像

/etc/docker/daemon.json文件中加入
{
 "registry-mirrors": ["https://registry.docker-cn.com"]
}

加入完以后,重启docker服务,使用docker info 命令查看是否生效

修改docker镜像和容器保存路径
在/etc/sysconfig/docker文件中加入下内容

OPTIONS=--graph="/data/docker"

或者

DOCKER_OPTS="-g /data/docker"

重启docker服务生效
运行docker run hello-world查看是否安装成功:

[root@cops163 docker]# docker run hello-world
Unable to find image 'hello-world:latest' locally
Trying to pull repository docker.io/library/hello-world ... 
latest: Pulling from docker.io/library/hello-world
ca4f61b1923c: Pull complete 
Digest: sha256:97ce6fa4b6cdc0790cda65fe7290b74cfebd9fa0c9b8c38e979330d547d22ce1
Status: Downloaded newer image for docker.io/hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

获取镜像
从 Docker 镜像仓库获取镜像的命令是 docker pull。其命令格式为:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
docker pull --help
Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub。
仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。
获取官方ubuntu 16.04镜像

docker pull ubuntu:16.04

运行ubuntu:16.04

docker run -it --rm ubuntu:16.04

docker运行:
docker run 就是运行容器的命令
参数:
-it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
--rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。
ubuntu:16.04:这是指用 ubuntu:16.04 镜像为基础来启动容器。
bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。

列出镜像

docker image ls

镜像体积

docker system df

由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 <none> 的镜像。这类无标签镜像也被称为 虚悬镜像(dangling image)
虚悬镜像

docker image ls -f dangling=true

中间层镜像
为了加速镜像构建、重复利用资源,Docker 会利用 中间层镜像。所以在使用一段时间后,可能会看到一些依赖的中间层镜像。默认的 docker image ls 列表中只会显示顶层镜像,如果希望显示包括中间层镜像在内的所有镜像的话,需要加 -a 参数。

docker image ls -a

特殊显示
以表格等距显示,并且有标题行,和默认一样,自定义列:

docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

只包含镜像ID和仓库名

docker image ls --format "{{.ID}}: {{.Repository}}"

只显示镜像ID

docker image ls -q

显示已经安装镜像的详细内容

docker images --no-trunc 

显示所有退出状态为1的容器

docker ps -a --filter &quot;exited=1&quot;

显示指定容器的IP

docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID}
docker ps :列出当前所有正在运行的container
docker ps -l :列出最近一次启动的container
docker ps -a :列出所有的container(包含历史,即运行过的container)
docker ps -q :列出最近一次运行的container ID
docker ps | grep wildfly | awk '{print $1}' 通过正则表达式查找容器的镜像ID

进入容器

docker attach ${CID} 

进入容器打开一个shell

docker exec -it ${CID} bash

停止指定容器

docker stop ${CID}

停止所有正在运行的容器

docker kill $(docker ps -a -q)

删除本地镜像
docker image rm 命令,其格式为:
docker image rm [选项] <镜像1> [<镜像2> ...]

用 ID、镜像名、摘要删除镜像
其中,<镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要。

用 docker image ls 命令来配合
像其它可以承接多个实体的命令一样,可以使用 docker image ls -q 来配合使用 docker image rm,这样可以成批的删除希望删除的镜像。

删除所有仓库名为 redis 的镜像:

docker image rm $(docker image ls -q redis)

删除所有在 mongo:3.2 之前的镜像:

docker image rm $(docker image ls -q -f before=mongo:3.2)

充分利用你的想象力和 Linux 命令行的强大,你可以完成很多非常赞的功能。
删除所有虚悬镜像

docker rmi $(docker images -q -f dangling=true)

使用正则表达式删除容器

docker ps -a | grep wildfly | awk '{print $1}' | xargs docker rm -f

删除docker容器

docker rm xxxx 删除容器 -f 删除运行中的
docker rm $(docker ps -a -q) 删除所有终止的容器

查找镜像

docker search redis

安装redis

docker pull redis:4.0.8

运行redis容器

docker run -p 6379:6379 -d redis:4.0.8 redis-server --appendonly yes

oracle多实例的启动与关闭

oracle/oracle登录

1、启监听器

lsnrctl start

监听一般不需要动,如果机器重新启动的话需要将监听启动。

查看当前SID:

echo $ORACLE_SID

2、启动数据库实例:

设置需要操作的实例:

export ORACLE_SID=a(需要启动的实例)

进入sqlplus0:sqlplus/nolog

DBA登录:conn /as sysdba

启动:startup

退出sqlplus:quit

设置需要操作的实例:

export ORACLE_SID=b(需要启动的实例)

进入sqlplus:sqlplus /nolog

DBA登录:conn /as sysdba

启动:startup

退出sqlplus:quit

3、关闭数据库实例:

设置需要操作的实例:

export ORACLE_SID=a(需要启动的实例)

进入sqlplus:sqlplus /nolog

DBA登录:conn /as sysdba

关闭:shutdown immediate

退出sqlplus:quit

设置需要操作的实例:export ORACLE_SID=b(需要启动的实例)

进入sqlplus:sqlplus /nolog

DBA登录:conn /as sysdba

关闭:

shutdown immediate

退出sqlplus:quit

Nginx报The plain HTTP request was sent to HTTPS port 400错误解决方法

nginx在配置https以后,使用http访问系统,报400错误The plain HTTP request was sent to HTTPS port
原因主要是nginx.conf里面打开了ssl on参数

ssl on;

ssl on会将整个virtual server都开启成ssl,会造成http请求也转发到了https上造成400错误,所以http访问的时候回报400错误,参见官方文档http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl
要http和https共存可以用下面这个方法:

    server {
        listen       80;
        listen       443 ssl;
    #ssl on;
        server_name  localhost;
        ......
        ......

即可http和https共存,都能访问系统·

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance报错解决方法

服务器来电启动的oracle的时候报错ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.,详细信息如下:

[root@hch_test_pd_121_217 local]$su - oracle
[oracle@hch_test_pd_121_217 ~]$rlwrap sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Sat Mar 17 15:08:08 2018

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.

Total System Global Area 3.0198E+10 bytes
Fixed Size                  2214456 bytes
Variable Size            1.3959E+10 bytes
Database Buffers         1.6106E+10 bytes
Redo Buffers              130793472 bytes
Database mounted.
Database opened.

查看数据库弃用的系统参数:

SQL> select name from v$parameter where isdeprecated = 'TRUE';

NAME
--------------------------------------------------------------------------------
lock_name_space
instance_groups
resource_manager_cpu_allocation
active_instance_count
buffer_pool_keep
buffer_pool_recycle
log_archive_start
standby_archive_dest
log_archive_local_first
parallel_server
parallel_server_instances

NAME
--------------------------------------------------------------------------------
fast_start_io_target
serial_reuse
max_enabled_roles
remote_os_authent
global_context_pool_size
cursor_space_for_time
plsql_v2_compatibility
plsql_debug
background_dump_dest
user_dump_dest
commit_write

NAME
--------------------------------------------------------------------------------
sql_trace
parallel_automatic_tuning
parallel_io_cap_enabled

25 rows selected.

ora-32004错误不影响数据库的使用,报错信息为参数过期,可以看alter_orcl.log 日志文件那个参数过期

SQL> show parameter background_dump_dest;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest                 string      /oracle/app/oracle/diag/rdbms/
                                                 pdunq/powerdes/trace

新开ssh窗口,直接查看alert日志:

tail -f /oracle/app/oracle/diag/rdbms/pdunq/powerdes/trace/alert_powerdes.log

具体日志内容:

  dispatchers              = "(PROTOCOL=TCP) (SERVICE=powerdes)"
  job_queue_processes      = 1000
  _system_trig_enabled     = FALSE
  audit_file_dest          = "/oracle/app/oracle/admin/powerdes/adump"
  audit_trail              = "NONE"
  db_name                  = "powerdes"
  db_unique_name           = "pdunq"
  open_cursors             = 3000
  optimizer_mode           = "FIRST_ROWS"
  optimizer_index_cost_adj = 25
  optimizer_index_caching  = 90
  _optim_peek_user_binds   = FALSE
  pga_aggregate_target     = 5591424409
  diagnostic_dest          = "/oracle/app/oracle"
Deprecated system parameters with specified values:
  log_archive_start        
End of deprecated system parameter listing

重点看Deprecated system parameters with specified values,其中log_archive_start为相关的参数,
查看log_archive_start参数的值

SQL> show parameter log_archive_start;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_start                    boolean     FALSE

将log_archive_start参数重置为系统默认值

SQL> alter system reset log_archive_start;

System altered.

最后在重启数据库,

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
Total System Global Area 3.0198E+10 bytes
Fixed Size                  2214456 bytes
Variable Size            1.3959E+10 bytes
Database Buffers         1.6106E+10 bytes
Redo Buffers              130793472 bytes
Database mounted.
Database opened.
SQL> 

没有报ORA-32004错误问题解决.

Linux查看文件系统分区格式类型的几个方法

fstab 记录了计算机上硬盘分区的相关信息,启动 Linux 的时候,检查分区的 fsck 命令,和挂载分区的 mount 命令,都需要 fstab 中的信息,来正确的检查和挂载硬盘。
/etc/mtab 和 fstab 文件的结构和内容基本相同,但是不同的是,mtab 文件记录的是,当前已挂载的分区信息。
每当 mount 挂载分区、umount 卸载分区,都会动态更新 mtab,mtab 总是保持着当前系统中已挂载的分区信息,fdisk、df 这类程序,必须要读取 mtab 文件,才能获得当前系统中的分区挂载情况。
使用df -hT命令查看

[root@ops163 ~]# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/vda2      xfs        20G  1.2G   19G   6% /
devtmpfs       devtmpfs  7.8G     0  7.8G   0% /dev
tmpfs          tmpfs     7.8G     0  7.8G   0% /dev/shm
tmpfs          tmpfs     7.8G  8.4M  7.8G   1% /run
tmpfs          tmpfs     7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/vda5      xfs       172G   33M  172G   1% /data
/dev/vda1      xfs       473M  168M  305M  36% /boot
tmpfs          tmpfs     1.6G     0  1.6G   0% /run/user/0



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

MySQL中grant授权和撤销权限revoke的语法说明

MySQL的权限系统围绕着两个概念:
认证->确定用户是否允许连接数据库服务器
授权->确定用户是否拥有足够的权限执行查询请求等。
如果认证不成功的话,哪么授权肯定是无法进行的。
revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from”
GRANT和REVOKE管理的权限

ALL PRIVILEGES
影响除WITH GRANT OPTION之外的所有权限

ALTER
影响ALTER TABLE命令的使用

ALTER ROUTINE
影响创建存储例程的能力

CREATE
影响CREATE TABLE命令的使用

CREATE ROUTINE
影响更改和弃用存储例程的能力

CREATE TEMPORARY TABLES
影响CREATE TEMPORARY TABLE命令的使用

CREATE USER
影响创建、弃用;重命名和撤销用户权限的能力

CREATE VIEW
影响CREATE VIEW命令的使用

DELETE
影响DELETE命令的使用

DROP
影响DROP TABLE命令的使用

EXECUTE
影响用户运行存储过程的能力

EVENT
影响执行事件的能力(从MySQL5.1.6开始)

FILE
影响SELECT INTO OUTFILE和LOAD DATA INFILE的使用

GRANT OPTION
影响用户委派权限的能力

INDEX
影响CREATE INDEX和DROP INDEX命令的使用

INSERT
影响INSERT命令的使用

LOCK TABLES
影响LOCK TABLES命令的使用

PROCESS
影响SHOW PROCESSLIST命令的使用

REFERENCES
未来MySQL特性的占位符

RELOAD
影响FLUSH命令集的使用

REPLICATION CLIENT
影响用户查询从服务器和主服务器位置的能力

REPLICATION SLAVE
复制从服务器所需的权限

SELECT
影响SELECT命令的使用

SHOW DATABASES
影响SHOW DATABASES命令的使用

SHOW VIEW
影响SHOW CREATE VIEW命令的使用

SHUTDOWN
影响SHUTDOWN命令的使用

SUPER
影响管理员级命令的使用,如CHANGE、MASTER、KILL thread、mysqladmin debug、PURGE MASTER LOGS和SET GLOBAL

TRIGGER
影响执行触发器的能力(从MySQL5.1.6开始)

UPDATE
影响UPDATE命令的使用

USAGE
只连接,不授予权限

Oracle数据库修改用户临时表空间

查看所有用户的临时表空间及相应的数据文件

select d.username, t.file_name, d.temporary_tablespace from DBA_TEMP_FILES t,dba_users d where t.tablespace_name = d.temporary_tablespace

修改临时表空间tmp的大小

alter database tempfile '/home/oracle/oradata/trade/temp01.dbf' resize 10G;

将系统的默认临时表空间设为tmp

alter database default temporary tablespace tmp

修改用户aa的默认表空间为tmp

alter user aa temporary tablespace tmp;

删除用户aa以前的临时表空间ex_aa

drop tablespace ex_aa including contents and datafiles;

Oracle增加表空间大小的四种方法

给表空间增加数据文件

ALTER TABLESPACE app_data ADD DATAFILE
'/oracle/app/oracle/oradata/jxctest/BF_DATA.dbf' SIZE 10G;

新增数据文件,并且允许数据文件自动增长

ALTER TABLESPACE app_data ADD DATAFILE
'/oracle/app/oracle/oradata/jxctest/BF_DATA.dbf' SIZE 20G
AUTOEXTEND ON NEXT 5G MAXSIZE 30G;

允许已存在的数据文件自动增长

ALTER DATABASE DATAFILE '/oracle/app/oracle/oradata/jxctest/BF_DATA.dbf'
AUTOEXTEND ON NEXT 1G MAXSIZE 20G;

手工改变已存在数据文件的大小

ALTER DATABASE DATAFILE '/oracle/app/oracle/oradata/jxctest/BF_DATA.dbf'
RESIZE 20G;

注意事项:
如果是在执行导入操作的时候最好用新增表空间文件的方法解决:

ORA-39171: Job is experiencing a resumable wait.
ORA-01691: unable to extend lob segment ORACLE.SYS_LOB0000070698C00030$$ by 8192 in tablespace USERS1

增加完以后使用下面SQL查询表空间使用情况:

SELECT a.tablespace_name, 
a.bytes total, 
b.bytes used, 
c.bytes free, 
(b.bytes * 100) / a.bytes "% USED ", 
(c.bytes * 100) / a.bytes "% FREE " 
FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c 
WHERE a.tablespace_name = b.tablespace_name 
AND a.tablespace_name = c.tablespace_name; 

使用strings查看dmp文件中的信息

获取基本信息:导出的版本、时间、导出的用户

strings exp111.dmp | head -10
运行结果如下:
"BFPUB_MALL"."SYS_EXPORT_FULL_01"    #BFPUB_MALL导出的用户名
x86_64/Linux 2.4.xx                  #数据库服务器类型
jxctest                              #数据库名字
ZHS16GBK                             #编码类型
11.02.00.04.00                       #数据库版本
001:001:000001:000001
HDR>T<?
[uUUUUUUUUUU
VWRMF
ww|(

获取dmp文件中的表信息

strings test.dmp | grep "CREATE TABLE"|awk '{print $3}'|sed 's/"//g'

oracle创建实例提示主机名不能有下划线并且不能超过32个字符

EMCA stops with "Hostname should not contain underscore _ in it and it should not be longer than 32 characters" [ID 1265731.1]
Applies to:
Enterprise Manager Grid Control - Version: 10.2.0.4 to 11.2.0.2 - Release: 10.2 to 11.2
Information in this document applies to any platform.
10.x和11.2.x版本都存在这个问题,主机名一定不要加_线,加的话,会带来很多莫名其妙的问题
解决方法:
1、去掉主机名中的下划线,长度别超过32个字符
2、修改oracle用户环境变量增加:

export ORACLE_HOSTNAME=HOSTNAME

3、修改/etc/hosts文件增加主机名对应的本机IP解析,如

192.168.121.127 dev127

expdp和impdp时应该注重的事项

1、exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
2、expdp和impdp是服务端的工具程序,他们只能在oracle服务端使用,不能在客户端使用。
3、imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用于expdp导出的文件,而不适用于exp导出文件。
4、对于10g以上的服务器,使用exp通常不能导出0行数据的空表,而此时必须使用expdp导出。

一、创建逻辑目录,该命令不会在操作系统创建真正的目录(请先创建真正的目录),最好以system等管理员创建逻辑目录。

rlwrap sqlplus / as sysdba
SQL>create directory dump_dir as '/home/oracle/dumpfile';

二、查看管理员目录(同时查看操作系统是否存在,因为oracle并不关心该目录是否存在,假如不存在,则出错)

SQL>select * from dba_directories;

三、给ice用户赋予在指定目录的操作权限,最好以system等管理员赋予。

SQL>grant read,write on directory dump_dir to ice;

四、用expdp导出数据

1)导出用户

expdp ice/123456@orcl schemas=ice dumpfile=ice.dmp directory=dump_dir;

2)导出表

expdp ice/123456@orcl tables=emp,dept dumpfile=expdp.dmp directory=dump_dir;

3)按查询条件导

expdp ice/123456@orcl directory=dump_dir dumpfile=expdp.dmp tables=emp query='where deptno=20';

4)按表空间导

expdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmp tablespaces=temp,example;

5)导整个数据库

expdp system/manager@orcl directory=dump_dir dumpfile=full.dmp full=y;

6)导出用户下的所有表

expdp ice/123456@orcl dumpfile=expdp.dmp directory=dump_dir logfile=expdp.log;

五、用impdp导入数据

1)导入用户(从用户scott导入到用户scott)

impdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp schemas=scott;

2)导入表(从scott用户中把表dept和emp导入到system用户中)

impdp system/manager@orcl directory=dump_dir dumpfile=expdp.dmp tables=scott.dept,scott.emp remap_schema=scott:system;

3)导入表空间

impdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmp tablespaces=example;

4)导入数据库

impdb system/manager@orcl directory=dump_dir dumpfile=full.dmp full=y;

5)追加数据

impdp system/manager@orcl directory=dump_dir dumpfile=expdp.dmp schemas=system table_exists_action

导数据得时候,有可能报错。为什么?有以下主要的原因:

  A. 导入的对象(表,视图,方法等)原本不属于当前连接的用户的
  B. 导入的对象在该数据库的指定用户下已经存在
  C. 导入的对象的原本用户不在这个数据库里

对于这三个问题的处理方法如下:  
a/c、所有对象全部导入到指定的账户下:
imp kf_new/zx@zxcc_new file=d:\zxcc.dmp fromuser=kf touser=kf_new
其中fromuser=kf为.dmp文件里的对象的原先的owner, touser=kf_new 为作为导入的对象的新的Owner.

b、忽略/插入数据:
imp kf_new/zx@zxcc_new file= d:\zxcc.dmp ignore=y
其中ignore=y告诉imp.exe把数据直接插入到相应对象(并且如果导入的对象里面有其他的对象,如约束,索引等,会在数据插入后被创建)。

忽略加载约束
  有时候导数据进来的时候,我们不需要把它的约束,比如一些外键约束等都导进来,可以加上参数constraints=N
  不加载索引(比如唯一性的索引),可以加上参数indexs=N
只加载结构,不加载数据,如果只要表的结构等定义(约束,触发器),而不要里面的数据,可以加上参数rows=N
  对于上述操作登陆操作的用户需是管理员,如果不是管理员,而是普通用户,那么这个用户必须有创建删除对象的权利,对象可能包括表,视图,方法,存储过程等等常见的对象。为什么“可能”包括?因为这个视导入导出的时候是否涉及相关类型的对象而定.

Expdp/Impdp的相关参数

EXPDP命令行选项
1. ATTACH
该选项用于在客户会话与已存在导出作用之间建立关联.语法如下
ATTACH=[schema_name.]job_name
Schema_name用于指定方案名,job_name用于指定导出作业名.注意,如果使用ATTACH选项,在命令行除了连接字符串和ATTACH选项外,不能指定任何其他选项,示例如下:
Expdp scott/tiger ATTACH=scott.export_job
2. CONTENT
该选项用于指定要导出的内容.默认值为ALL
CONTENT={ALL | DATA_ONLY | METADATA_ONLY}
当设置CONTENT为ALL 时,将导出对象定义及其所有数据.为DATA_ONLY时,只导出对象数据,为METADATA_ONLY时,只导出对象定义
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dump
CONTENT=METADATA_ONLY
3. DIRECTORY
指定转储文件和日志文件所在的目录
DIRECTORY=directory_object
Directory_object用于指定目录对象名称.需要注意,目录对象是使用CREATE DIRECTORY语句建立的对象,而不是OS 目录
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dump
建立目录:
CREATE DIRECTORY dump as ‘d:dump’;
查询创建了那些子目录:
SELECT * FROM dba_directories;
4. DUMPFILE
用于指定转储文件的名称,默认名称为expdat.dmp
DUMPFILE=[directory_object:]file_name [,….]
Directory_object用于指定目录对象名,file_name用于指定转储文件名.需要注意,如果不指定directory_object,导出工具会自动使用DIRECTORY选项指定的目录对象
Expdp scott/tiger DIRECTORY=dump1 DUMPFILE=dump2:a.dmp
5. ESTIMATE
指定估算被导出表所占用磁盘空间分方法.默认值是BLOCKS
EXTIMATE={BLOCKS | STATISTICS}
设置为BLOCKS时,oracle会按照目标对象所占用的数据块个数乘以数据块尺寸估算对象占用的空间,设置为STATISTICS时,根据最近统计值估算对象占用空间
Expdp scott/tiger TABLES=emp ESTIMATE=STATISTICS
DIRECTORY=dump DUMPFILE=a.dump
6. EXTIMATE_ONLY
指定是否只估算导出作业所占用的磁盘空间,默认值为N
EXTIMATE_ONLY={Y | N}
设置为Y时,导出作用只估算对象所占用的磁盘空间,而不会执行导出作业,为N时,不仅估算对象所占用的磁盘空间,还会执行导出操作.
Expdp scott/tiger ESTIMATE_ONLY=y NOLOGFILE=y
7. EXCLUDE
该选项用于指定执行操作时释放要排除对象类型或相关对象
EXCLUDE=object_type[:name_clause] [,….]
Object_type用于指定要排除的对象类型,name_clause用于指定要排除的具体对象.EXCLUDE和INCLUDE不能同时使用
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dup EXCLUDE=VIEW
8. FILESIZE
指定导出文件的最大尺寸,默认为0,(表示文件尺寸没有限制)
9. FLASHBACK_SCN
指定导出特定SCN时刻的表数据
FLASHBACK_SCN=scn_value
Scn_value用于标识SCN值.FLASHBACK_SCN和FLASHBACK_TIME不能同时使用
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp
FLASHBACK_SCN=358523
10. FLASHBACK_TIME
指定导出特定时间点的表数据
FLASHBACK_TIME=”TO_TIMESTAMP(time_value)”
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_TIME=
“TO_TIMESTAMP(’25-08-2004 14:35:00’,’DD-MM-YYYY HH24:MI:SS’)”
11. FULL
指定数据库模式导出,默认为N
FULL={Y | N}
为Y时,标识执行数据库导出.
12. HELP
指定是否显示EXPDP命令行选项的帮助信息,默认为N
当设置为Y时,会显示导出选项的帮助信息.
Expdp help=y
13. INCLUDE
指定导出时要包含的对象类型及相关对象
INCLUDE = object_type[:name_clause] [,… ]
14. JOB_NAME
指定要导出作用的名称,默认为SYS_XXX
JOB_NAME=jobname_string
15. LOGFILE
指定导出日志文件文件的名称,默认名称为export.log
LOGFILE=[directory_object:]file_name
Directory_object用于指定目录对象名称,file_name用于指定导出日志文件名.如果不指定directory_object.导出作用会自动使用DIRECTORY的相应选项值.
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp logfile=a.log
16. NETWORK_LINK
指定数据库链名,如果要将远程数据库对象导出到本地例程的转储文件中,必须设置该选项.
17. NOLOGFILE
该选项用于指定禁止生成导出日志文件,默认值为N.
18. PARALLEL
指定执行导出操作的并行进程个数,默认值为1
19. PARFILE
指定导出参数文件的名称
PARFILE=[directory_path] file_name
20. QUERY
用于指定过滤导出数据的where条件
QUERY=[schema.] [table_name:] query_clause
Schema 用于指定方案名,table_name用于指定表名,query_clause用于指定条件限制子句.QUERY选项不能与 CONNECT=METADATA_ONLY,EXTIMATE_ONLY,TRANSPORT_TABLESPACES等选项同时使用.
Expdp scott/tiger directory=dump dumpfiel=a.dmp
Tables=emp query=’WHERE deptno=20’
21. SCHEMAS
该方案用于指定执行方案模式导出,默认为当前用户方案.
22. STATUS
指定显示导出作用进程的详细状态,默认值为0
23. TABLES
指定表模式导出
TABLES=[schema_name.]table_name[:partition_name][,…]
Schema_name用于指定方案名,table_name用于指定导出的表名,partition_name用于指定要导出的分区名.
24. TABLESPACES
指定要导出表空间列表
25. TRANSPORT_FULL_CHECK
该选项用于指定被搬移表空间和未搬移表空间关联关系的检查方式,默认为N.
当设置为Y时,导出作用会检查表空间直接的完整关联关系,如果表空间所在表空间或其索引所在的表空间只有一个表空间被搬移,将显示错误信息.当设置为N时, 导出作用只检查单端依赖,如果搬移索引所在表空间,但未搬移表所在表空间,将显示出错信息,如果搬移表所在表空间,未搬移索引所在表空间,则不会显示错误信息.
26. TRANSPORT_TABLESPACES
指定执行表空间模式导出
27. VERSION
指定被导出对象的数据库版本,默认值为COMPATIBLE.
VERSION={COMPATIBLE | LATEST | version_string}
为COMPATIBLE时,会根据初始化参数COMPATIBLE生成对象元数据;为LATEST时,会根据数据库的实际版本生成对象元数据.version_string用于指定数据库版本字符串.调用EXPDP
使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录.因此,
使用EXPDP工具时,必须首先建立DIRECTORY对象.并且需要为数据库用户授予使用DIRECTORY对象权限.

Oracle查看用户默认的表空间及大小

查看用户默认的表空间:

select username,default_tablespace from dba_users;

查看用户默认的表空间文件路径:

select t1.name,t2.name from v$tablespace t1, v$datafile t2 where t1.ts# = t2.ts#;

查看用户默认的表空间文件大小:(单位MB)

SELECT tablespace_name, 
file_id, 
file_name, 
round(bytes / (1024 * 1024), 0) total_space 
FROM dba_data_files 
ORDER BY tablespace_name; 

查看指定用户下的所有表

select  table_name from all_tables where owner = upper('TANAME');

MongoDB备份/还原/导出/导入

mongodb数据备份和还原主要分为二种,一种是针对于库的mongodump和mongorestore,一种是针对库中表的mongoexport和mongoimport。
mongodb.png
一、mongodump备份数据库
常用命令

mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径  

如果没有用户谁,可以去掉-u和-p。
如果导出本机的数据库,可以去掉-h。
如果是默认端口,可以去掉--port。
如果想导出所有数据库,可以去掉-d。
导出所有数据库

mongodump -h 127.0.0.1 --port 30000 -o /tmp/mon

导出指定库

mongodump -h 127.0.0.1 --port 30000 -d DBNAME -o /tmp/mon

二、mongorestore还原数据库

mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件路径

--drop的意思是,先删除所有的记录,然后恢复
恢复所有数据库到mongodb中

mongorestore -h 127.0.0.1 --port 30000 /tmp/mon

还原指定的数据库

mongorestore -h 127.0.0.1 --port 30000 -d NEWDB /tmp/mon/newdb

三、mongoexport导出表,或者表中部分字段
常用命令格式

mongoexport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 -f 字段 -q 条件导出 --csv -o 文件名  

-f 导出指字段,以字号分割,-f name,email,age导出name,email,age这三个字段
-q 可以根查询条件导出,-q '{ "uid" : "100" }' 导出uid为100的数据
--csv 表示导出的文件格式为csv的,这个比较有用,因为大部分的关系型数据库都是支持csv,在这里有共同点
导出整张表

mongoexport -d DBNAME -c TBNAME -o /tmp/mon/xxx/xxxx.dat

导出表中部分字段

mongoexport -d DBNAME -c TBNAME -f uid,name,sex -o /tmp/mon/xxx/xxxx.dat

根据条件导出

mongoexport -d DBNAME -c TBNAME -q '{uid:{$gt:1}}' -o /tmp/mon/users.json

四、mongoimport导入表或表字段
还原整表导出的非csv文件

mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --upsert --drop 文件名  
--upsert参数:插入或者更新现有数据

还原部分字段的导出文件

mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --upsertFields 字段 --drop 文件名
--upsertFields参数:插入或者更新现有数据

还原导出的csv文件

mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --type 类型 --headerline --upsert --drop 文件名

还原导出的表数据

mongoimport -d DBNAME -c TBNAME --upsert /tmp/mon/users.dat

部分字段的表数据导入

mongoimport -d DBNAME -c TBNAME  --upsertFields uid,name,sex /tmp/mon/users.dat

还原csv文件

mongoimport -d DBNAME -c TBNAME --type csv --headerline --file /tmp/mon/users.csv

最新

分类

归档

评论

  • Liang: 贴下编译参数和步骤,...
  • shao3911: 您好,为什么我在编译...
  • aliang: 先看是yum安装还是...
  • aliang: 将原来的nginx安...
  • yen: 3、如果要回滚的话,...
  • yen: 刚好需要升级ngin...
  • 文雨: 一些新的method...
  • aliang: 默认不屏蔽估计开发团...
  • 山野愚人居: PHP既然允许直接使...
  • aliang: 最下面有github地址·

其它