1、下载安装包
官网下载地址:https://www.oracle.com/database/technologies/oracle-database-software-downloads.html#11g,可下载11g R2版本,两个包都下载。
提供一个百度网盘下载,若失效可网上自找相应安装包。
百度网盘下载地址:
链接:https://pan.baidu.com/s/1A6R9bdAb-9_Pv4eCeANR5w
提取码:znyd
2、准备工作
上传及解压安装包,使用root用户
su - root //切换root用户 yum -y install vim //个人喜好vim编辑各种配置文件(有颜色) --如果以安装可不需要 yum install unzip //下载unzip,用来解压上述两个zip压缩文件 --如果以安装可不需要 mkdir /path mkdir /path/oracle cd /path/oracle //下载的安装包zip放在oracle下面 unzip linux.x64_11gR2_database_1of2.zip //解压 unzip linux.x64_11gR2_database_2of2.zip
解压后出现一个/path/oracle/database目录,里面是解压后的所有oracle安装文件。
关闭 selinux 命令vim /etc/selinux/config #设置 SELINUX=disabled #Disable(关闭模式)
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled #此处修改为disabled # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
SELinux 是部署在 Linux 系统中的安全增强功能模块,它通过对进程和文件资源采用 MAC
(强制访问控制方式)为 Linux 系统提供了改进的安全性。
setenforce 0 #关闭selinux
service iptables stop #临时关闭防火墙 => 可以不关
3、安装必须的依赖包
安装oracle之前需要许多软件包依赖,如果可用外网,使用如下命令安装。
yum install binutils compat-libstdc++ elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel
查看这些软件包版本,可使用如下命令,如有未安装的会有提示。
rpm -q binutils compat-libstdc++ elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel
如果 compat-libstdc++ 安装提示No package compat-libstdc++ available.,请使用命令yum install compat-libstdc++-33安装。
使用rpm -qa | grep "compat-libstdc"可查看。
当再次查看哪些安装包未安装时还会报is not installed;这个是因为使用rpm查询时,包名不正确所致。它真正的报名为 compat-libstdc++-33 而不是compat-libstdc++ 。如果包名正确,那么查询结果就会不一样,或可用查看compat-libstdc++-33:
rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel
4、准备安装用户及用户组
除了root的其它用户和分组 => 这里是设置一个oracle用户
groupadd oinstall#只安装 => only install(一个组叫做只安装) groupadd dba#DBA一般指数据库管理员(一个组叫dba数据库管理)
-g <群组> => 指定用户所属的群组。
-D => 变更预设值.
-d <登入目录> => 指定用户登入时的起始目录。
useradd -g oinstall -G dba -d /opt/oracle oracle #会自动创建oracle目
#cat /etc/passwd #可以查看所有用户的列表
#cat /etc/group #查看用户组
#userdel [-r] [要删除的用户的名称]
[root@localhost ~]# passwd oracle #设置用户oracle的登陆密码,不设置密码,在CentOS的图形登陆界面没法登陆 Changing password for user oracle. New password: # 密码 BAD PASSWORD: The password is shorter than 8 characters Retype new password: # 确认密码 passwd: all authentication tokens updated successfully. [root@localhost ~]# id oracle # 查看新建的oracle用户 uid=1001(oracle) gid=1002(dba) groups=1002(dba)
5、创建安装目录和设置文件权限
mkdir /path/oracle #创建安装目录,前面创建过一次不用重复创建(放置压缩包) mkdir /path/oracle/11.2.0 #数据库系统安装目录 mkdir /opt/oracle/inventory #清单目录(创建的oracle用户目录里) chown -R oracle:oinstall /path/oracle #给目录赋oracle用户oinstall组 chown -R oracle:oinstall /opt/oracle/inventory #给目录赋oracle用户oinstall组 chmod -R 775 /path/oracle #给目录赋权限
6、修改内核参数配置文件
vi /etc/sysctl.conf #在文件最后增加
fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 2147483648 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048586
使用/sbin/sysctl -p命令使 sysctl.conf 配置生效。
7、配置oracle环境变量
切换到oracle用户,su - oracle
cd /opt/oracle #创建用户oracle时自动创建的目录 vim .bash_profile #新建并编辑文件 =>
修改并加入内容如下
umask 022 export ORACLE_HOSTNAME=linux #通过hostname获取机器名 export ORACLE_BASE=/path/oracle #安装目录 export ORACLE_HOME=$ORACLE_BASE/11.2.0 #安装目录 export ORACLE_SID=orcl #oracle的sid export ORACLE_UNQNAME=$ORACLE_SID #export LC_ALL="en_US" #export #export NLS_LANG="ZHS16GBK" export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS" export LD_LIBRARY_PATH=$ORACLE_HOME/lib export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$HOME/bin
:wq保存后使用如下命令,使设置生效:
source /opt/oracle/.bash_profile
8、修改用户的限制文件
使用root用户 su - root
vi /etc/security/limits.conf #在文件后增加
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240
修改vi /etc/pam.d/login文件,增加如下:
session required /lib64/security/pam_limits.so #64为系统,千万别写成/lib/security/pam_limits.so,否则导致无法登录 session required pam_limits.so
修改vi /etc/profile,增加:
if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi
:wq保存后使设置生效:
source /etc/profile
若交换空间不足时,根据需要配置swap大小。
9、编辑静默安装响应文件
静默安装指的是安装时无需任何用户干预,直接按默认设置安装。
数据库静默响应文件_dbca.rsp简要解释
Oracle数据库有诸如图形化建库、OMF建库、静默建库等几种不同形式的数据库创建方式 各自都有其优势所在。
图形化胜在创建过程图形化对用户更加友好;
OMF优势则在于十分简便,一条’create database’即可创建数据库;
静默创建也是一种十分方便的方式,不过需要用户提前配置好dbca.rsp静默响应文件。
su - oracle#进入oracle用户(权限不一样而已) => 用户有大小写区分的(后面经常进入这个用户) cp -R /path/oracle/database/response /path/oracle #复制一份模板到安装目录(里面是静默安装的文件) cd /path/oracle/response mv db_install.rsp db_install_swonly.rsp #因为下面的安装只安装软件不安装数据库实例,所以改个名字以提示自己
vi db_install_swonly.rsp #开始修改这个安装响应文件
反正我看不懂英文,我把注释的英文都干成了中文…
需要设置的选项如下:
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0 //系统生成的,不要修改
oracle.install.option=INSTALL_DB_SWONLY #只安装软件,不安装实例启动数据库
ORACLE_HOSTNAME=linux #通过hostname命令获得
UNIX_GROUP_NAME=oinstall #用户组
INVENTORY_LOCATION=/opt/oracle/inventory #我们放在的用户目录,不是安装目目录
SELECTED_LANGUAGES=en,zh_CN #设置语言
ORACLE_HOME=/path/oracle/11.2.0 #oracle主目录完整路径
ORACLE_BASE=/path/oracle #设置语言oracle_base路径
oracle.install.db.InstallEdition=EE #oracle版本企业版
oracle.install.db.isCustomInstall=false
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
DECLINE_SECURITY_UPDATES=true //一定要设置为true
10、安装oracle
su - oracle #切换oracle用户 cd /path/oracle/database ./runInstaller -silent -responseFile /path/oracle/response/db_install_swonly.rsp -ignorePrereq
linux silent模式:
当远程连接的linux服务器未安装vnc服务时,无法打开图形界面,为了解决这种问题,我们可以采用silent mode来进行安装。
很多操作系统,如Windows、Linux都提供了服务器网络安装和批量安装,目的就是为了减少系统运维人员的安装负担和安装错误。
原理其实都是相同的,都是将各种交互问题答案 事先保存在一个文件(通常是文本文件)中,之后安装程序会去读取文件中的配置信息,用于安装过程。
在Oracle安装过程中,包括Oracle程序安装、Oracle Net配置和数据库创建,都提供了silent安装方法。只需要在安装程序中,指定responseFile的名字,就可以进行silent安装过程。
ignorePrereq:忽略运行先决条件检查。
responseFile:响应文件。一个响应文件是一个文本文件。指定文件名称and位置。
安装过程中,如果提示[WARNING]不必理会,此时安装程序仍在进行,如果出现[FATAL],则安装程序已经停止了。
打开另一个终端,执行 =>
#tail -100f /opt/oracle/inventory/logs/installActions......log//最后的路径TAB补全
可以实时跟踪查看安装日志,了解安装的进度。
要执行配置脚本, 请执行以下操作:
1.打开另一个终端窗口 2.也可能跟我一样已经显示成功了,exit退出到root用户直接去执行脚本 3.以 “root” 身份登录 4.运行脚本
按照其提示操作,有几个就执行几个,例如:
#exit //退回到root #/opt/oracle/inventory/orainstRoot.sh #/path/oracle/11.2.0/root.sh
11、静默配置监听
chmod -R 775 /path/oracle/#root用户赋予权限 su - oracle /path/oracle/11.2.0/bin/netca /silent /responsefile /path/oracle/response/netca.rsp
如果启动失败根据提示查看日志。 若是端口未开通可查看后续端口开通操作
成功运行后,在cd /path/oracle/11.2.0/network/admin目录下生成sqlnet.ora和listener.ora两个文件。
通过netstat -tnlp 命令,看到
yum -y install net-tools #安装命令 => root用户安装。
说明监听器已经在1521端口上开始工作了。
12、静默建立新库 实例
建库中文附录。
修改/path/oracle/response/dbca.rsp
修改如下:
RESPONSEFILE_VERSION = "11.2.0" //不能更改
OPERATION_TYPE = "createDatabase"//默认也是这个
GDBNAME = "orcl" //数据库的名字,重要,建议设置为orcl与sid相同
SID = "orcl" //对应的实例名字 => orcl是默认的,一般不建议用默认的,如同123456
TEMPLATENAME = "General_Purpose.dbc" //建库用的模板文件,默认也是这个
SYSPASSWORD = "sys" //SYS管理员密码 #需把注释去掉
SYSTEMPASSWORD = "sys" //SYSTEM管理员密码 #需把注释去掉
DBSNMPPASSWORD= "sys" //DBSNMP管理员密码 #需把注释去掉,可选
SYSMANPASSWORD= "sys" //SYSMAN管理员密码 #需把注释去掉,可选
DATAFILEDESTINATION = /path/oracle/oradata //数据文件存放目录(此时是没有创建的) #需把注释去掉
RECOVERYAREADESTINATION=/path/oracle/flash_recovery_area //恢复数据存放目录 #需把注释去掉
CHARACTERSET = "ZHS16GBK" //字符集,重要!!! 建库后一般不能更改,所以建库前要确定清楚。 #需把注释去掉
TOTALMEMORY = "1048" //oracle内存5120MB #需把注释去掉
静默建库命令如下:
Oracle中的 DBCA
DBCA都是一个必备工具,有了这个工具,创建数据库成为可能。而DBCA本身有图形和静默两种方式。静默方式看起来高大上,可以轻松搞定一个看似很复杂的创建数据库过程,而只需要一个命令。
在oracle用户下执行
dbca -silent -responseFile /path/oracle/response/dbca.rsp
dbca报错可能是环境变量出错(第7节)
建库后实例检查:
ps -ef | grep ora_ | grep -v grep | wc -l
ps -ef | grep ora
查看监听状态:
lsnrctl status #lsnrctl在安装Oracle的bin目录下 => 还有stop/start参数
开放1521端口
使用Root用户
查看想开的端口是否已开:firewall-cmd --query-port=1521/tcp
添加指定需要开放的端口:firewall-cmd --add-port=1521/tcp --permanent
重载入添加的端口:firewall-cmd --reload
查询指定端口是否开启成功:firewall-cmd --query-port=1521/tcp
移除指定端口:firewall-cmd --permanent --remove-port=1521/tcp
# firewall-cmd --query-port=1521/tcp no # firewall-cmd --add-port=1521/tcp --permanent success # firewall-cmd --reload success # firewall-cmd --query-port=1521/tcp yes
13、修改数据库为归档模式(归档模式才能热备份,增量备份)
su - oracle #切换oracle用户
sqlplus / as sysdba #要进入到oracle用户
conn / as sysdba#建立连接
SQL> shutdown immediate;#immediate:立即的
oracle之nomount、mount、open三种状态
nomount --根据参数文件启动实例(instance)
mount --加载控制文件,让实例和数据库相关联
open --根据控制文件找到并打开数据文件和日志文件,从而打开数据库
也是启动的步骤,三步都启动了才能正常使用。
我们通常在没有走到open之前要做一些事情。
SQL> startup mount;
SQL语言的ALTER (更改)
数据库建立以后我们也是可以进行修改的,我们可以使用
ALTER DATABASE或 ALTER SCHEMA ALTER TABLE语句来修改已经被创建或者存在的数据库的相关参数。
SQL> alter database archivelog; #archivelog:归档模式
SQL> alter database flashback on; #开启闪回
SQL> alter database open; #开启数据库,完成启动Oracle
SQL> execute utl_recomp.recomp_serial();
SQL> alter system archive log current;
SQL> exit;
14、修改oracle启动配置文件
vim /etc/oratab
orcl:/path/oracle/11.2.0:Y
这样就可以通过dbstart 启动此实例,也可以通过dbshut关闭此实例了。
dbshut /path/oracle/11.2.0/ #只能在orale用户下 => dbshut也在Oracle的bin目录下面
此时所有oracle的进程关闭,监听器也停止。
dbstart /path/oracle/11.2.0/
此时监听器工作,hello实例运行,再次查看监听器状态。
lsnrctl status
注意此时执行 dbstart和dbshut会提示报错
dbstart
ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener
这是因为dbstart和dbshut脚本文件中ORACLE_HOME_LISTNER的设置有问题
分别打开两个文件找到:ORACLE_HOME_LISTNER=$1
修改为ORACLE_HOME_LISTNER=$ORACLE_HOME
命令如下:oracle用户
vi $ORACLE_HOME/bin/dbstart
vi $ORACLE_HOME/bin/dbshut
修改后保存退出,即可以在启动dbstart和关闭dbshut oracle数据服务和LISTNER
15、建立Oracle服务及其开机自启动
以root身份建立开机启动oracle服务的脚本:
vim /etc/init.d/oracle
添加如下脚本:
#!/bin/sh #chkconfig: 2345 20 80 #以下请根据安装oracle时的具体情况进行修改 ORA_HOME=/path/oracle/11.2.0 ORA_OWNER=oracle LOGFILE=/var/log/oracle.log echo "#################################" >> ${LOGFILE} date +"### %T %a %D: Run Oracle" >> ${LOGFILE} if [ ! -f ${ORA_HOME}/bin/dbstart ] || [ ! -f ${ORA_HOME}/bin/dbshut ]; then echo "Error: Missing the script file ${ORA_HOME}/bin/dbstart or ${ORA_HOME}/bin/dbshut!" >> ${LOGFILE} echo "#################################" >> ${LOGFILE} exit fi start(){ echo "###开启 Database..." su - ${ORA_OWNER} -c "${ORA_HOME}/bin/dbstart ${ORA_HOME}" echo "###Done." echo "###Run database control..." su - ${ORA_OWNER} -c "${ORA_HOME}/bin/emctl start dbconsole" echo "###Done." } stop(){ echo "###Stop database control..." su - ${ORA_OWNER} -c "${ORA_HOME}/bin/emctl stop dbconsole" echo "###Done." echo "###停止 Database..." su - ${ORA_OWNER} -c "${ORA_HOME}/bin/dbshut ${ORA_HOME}" echo "###Done." } case "$1" in 'start') start ;; 'stop') stop ;; 'restart') stop start ;; *) stop start ;; esac date +"### %T %a %D: Finished." >> ${LOGFILE} echo "#################################" >> ${LOGFILE} echo ""
使用如下命令将/etc/init.d/oracle 置为可执行文件:
chmod a+x /etc/init.d/oracle
至此,可使用如下命令对oracle进行启动和关闭
/etc/init.d/oracle stop#关闭oracle(包括数据库实例、监听器、EM)
/etc/init.d/oracle start#启动oracle
/etc/init.d/oracle restart #重启oracle
netstat -tnlp
将 oracle 添加到 chkconfig中:
chkconfig --add oracle
至此可使用如下命令对oracle的启动或关闭进行管理
service oracle start #启动
service oracle stop #关闭
service oracle restart #重启
需要在关机或重启机器之前停止数据库,做一下操作
ln -s /etc/init.d/oracle /etc/rc0.d/K01oracle #关机执行
ln -s /etc/init.d/oracle /etc/rc6.d/K01oracle #重启执行
至此就配置完毕,reboot一下,切换到oracle用户,用sqlplus命令看能否连接到oracle了吧
注意:切换oracle用户使用:su - oracle不是su oracle
sqlplus system/密码
当然,你还可以查看和设置oracle服务的开机启动级别:
chkconfig | grep oracle#查看oracle服务的开机启动级别
chkconfig --level 24 oracle off#修改oracle服务的开机启动级别
chkconfig --level 35 oracle on#修改oracle服务的开机启动级别
chkconfig oracle on#直接输入这个也行
level级别说明:
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动
对 #chkconfig: 2345 20 80 的解释:这个就是服务默认在2345运行级别是开启的。
20 启动顺序,是服务在/etc/rcx.d文件里面的顺序。
这组数字就是系统启动的时候服务启动的优先级—数字越小,优先级越高,也就是启动的时候数值越小越先启动;
80 停止顺序,这组数值就是系统关闭的时候关闭服务的优先级—数字越小,优先级越高,也就是关闭的时候数值越小越先关闭。
16、用新建的用户连接数据库,并建立一个表
export NLS_LANG=American_America.AL32UTF8
注意:UTF8是为了使得sqlplus和linux终端环境一致起来,此时发往数据库的是UTF8,数据库存储前会转为ZHS16GBK.
当读取时,Sqlplus会把收到的ZHS16GBK转换为UTF8发送到Linux终端。
创建有一个数据库用户
sqlplus / as sysdba #进入sql执行窗口
conn / as sysdba #连接数据库
修改密码:
SQL >alter user system identified by system; //修改system密码
SQL >alter user sys identified by sys; //修改sys密码
SQL >ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; //密码不过期
创建用户:
SQL > create user test identified by test;
并给用户赋予权限:
SQL > grant connect,resource,dba to test;
SQL > exit;
使用test用户登录:
sqlplus test/test
SQL> create table STUDENT(ID int, NAME varchar(20));
SQL> insert into STUDENT values(1, '张三');
SQL> select * from student;
实例名:
SQL > select instance_name from v$instance;
服务名:
SQL > select global_name from global_name;
17、Oracle升级补丁
补丁准备
Linux 平台下 2019 年 4 月发布的补丁包 p6880880_112000_Linux-x86-64.zip p29255947_112040_Linux-x86-64.zip
如下地址下载:
https://support.oracle.com/epmos/faces/PatchSearchResults?_afrLoop=27957295908138&_afrWindowMode=0&_adf.ctrl-state=11h190dceq_4
su - root
cd /home/oracle/oraPatch/
unzip p6880880_112000_Linux-x86-64.zip
unzip p29255947_112040_Linux-x86-64.zip
chmod -R 775 /home/oracle/oraPatch/
停止oracle
service oracle stop
升级OPatch
su - oracle
opatch lsinventory
cd /opt/oracle/11.2.0/
原补丁备份
mv OPatch OPatch_bk
cp -R /home/oracle/oraPatch/OPatch /home/oracle/11.2.0/
opatch version
[oracle@oracleone ~]$ cd /opt/oracle/11.2.0/ [oracle@oracleone 11.2.0]$ cp -R /opt/oracle/oraPatch/OPatch /home/oracle/11.2.0/ [oracle@oracleone 11.2.0]$ opatch version OPatch Version: 11.2.0.3.21 OPatch succeeded.
升级PSU补丁
su - root
yum -y install psmisc
su - oracle
cd /home/oracle/oraPatch/29255947/29141056
opatch apply
首先输入 y, 不需要输入邮箱直接回车,接着输入 Y 然后输入 y
[oracle@oracleone ~]$ cd /opt/oracle/oraPatch/29255947/29141056 [oracle@oracleone 29141056]$ opatch apply Oracle 临时补丁程序安装程序版本 11.2.0.3.21 版权所有 (c) 2021, Oracle Corporation。保留所有权利。 Oracle 主目录 :/opt/oracle/11.2.0 主产品清单:/opt/oracle/inventory 来自 :/opt/oracle/11.2.0/oraInst.loc OPatch 版本 :11.2.0.3.21 OUI 版本 :11.2.0.4.0 日志文件位置:/opt/oracle/11.2.0/cfgtoollogs/opatch/opatch2021-11-30_11-37-51上午_1.log Verifying environment and performing prerequisite checks... OPatch continues with these patches: 17478514 18031668 18522509 19121551 19769489 20299013 20760982 21352635 21948347 22502456 23054359 24006111 24732075 25869727 26609445 26392168 26925576 27338049 27734982 28204707 28729262 29141056 是否继续? [y|n] y User Responded with: Y All checks passed. 提供电子邮件地址以用于接收有关安全问题的通知, 安装 Oracle Configuration Manager 并启动它。如果您使用 My Oracle Support 电子邮件地址/用户名, 操作将更简单。 有关详细信息, 请访问 http://www.oracle.com/support/policies.html。 电子邮件地址/用户名: 尚未提供电子邮件地址以接收有关安全问题的通知。 是否不希望收到有关安全问题 (是 [Y], 否 [N]) [N] 的通知: y 请关闭本地系统上在此 ORACLE_HOME 之外运行的 Oracle 实例。 (Oracle 主目录 = '/opt/oracle/11.2.0') 本地系统是否已准备打补丁? [y|n] y
启动数据库,执行升级脚本(如存在多个实例,每个实例都需要执行)
su - root
service oracle start
su - oracle
cd $ORACLE_HOME/rdbms/admin
sqlplus / as sysdba
SQL > @catbundle.sql psu apply ;
SQL > @utlrp.sql;
SQL > @dbmsjdev.sql;
SQL > exec dbms_java_dev.disable;
SQL > grant execute on DBMS_JAVA to resource;
至此oracle数据库安装配置完成!
本文由傻鸟发布,不代表傻鸟立场,转载联系作者并注明出处:https://shaniao.net/database/138.html