yum -y install unixODBC unixODBC-devel
- #以下所有操作使用root账号执行
- #创建目录
- mkdir -p /opt/oracle
- cd /opt/oracle
- #下载odbc安装包
- wget https://download.oracle.com/otn_software/linux/instantclient/213000/oracle-instantclient-basic-21.3.0.0.0-1.x86_64.rpm
- wget https://download.oracle.com/otn_software/linux/instantclient/213000/oracle-instantclient-sqlplus-21.3.0.0.0-1.x86_64.rpm
- wget https://download.oracle.com/otn_software/linux/instantclient/213000/oracle-instantclient-devel-21.3.0.0.0-1.x86_64.rpm
- wget https://download.oracle.com/otn_software/linux/instantclient/213000/oracle-instantclient-odbc-21.3.0.0.0-1.x86_64.rpm
- #安装unixODBC和unixODBC-devel
- yum -y install unixODBC unixODBC-devel
- #安装oracle-instantclient
- yum localinstall oracle-instantclient-*
- #oracle-instantclient的安装位置如下
- /usr/lib/oracle/21/client64
- /usr/share/oracle/21/client64
- /usr/include/oracle/21/client64
- mkdir /usr/lib/oracle/21/client64/network/admin/ -p
- cd /usr/lib/oracle/21/client64/network/admin/
- vim tnsnames.ora
-
- HOST写oracle数据库服务器IP地址,
- SERVICE_NAME写global_name
- sqlplus / as sysdba
- select global_name from global_name;

- ORCL =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.61.105)(PORT = 1521))
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = ORCL)
- )
- )
- export ORACLE_HOME=/usr/lib/oracle/21/client64
- export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib64:$LD_LIBRARY_PATH
- export TNS_ADMIN=$ORACLE_HOME/network/admin
- export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
- export ORACLE_SID=ORCL
-
- #保存后适用新的环境变量
- source /etc/profile
- #配置类库
- chmod +x /usr/lib/oracle/21/client64/lib/libsqora.so.21.1
- cd /usr/lib64
- ln -s libodbcinst.so.2.0.0 libodbcinst.so.1
sqlplus NCC10/XXXXX@ORCL
- #sqlplus NCC10/XXXX@ORCL
-
- SQL*Plus: Release 21.0.0.0.0 - Production on Tue Nov 15 17:19:33 2022
- Version 21.3.0.0.0
-
- Copyright (c) 1982, 2021, Oracle. All rights reserved.
-
- Last Successful login time: Tue Nov 15 2022 17:12:14 +08:00
-
- Connected to:
- Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
- Version 19.12.0.0.0
-
- SQL>
- #cat cascade.sh
- #!/bin/bash
- ID=$1
- sqlplus NCC10/XXXX@ORCL > /aliyun/NCC/oracle/Tmp/list << EOF
- select username,sid,serial#,paddr from v\$session where username='$ID';
- EOF
- less /aliyun/NCC/oracle/Tmp/list| grep [0-9]|awk '{if (NR%2==0) {print} else {printf "%s:",$0}}'|grep -Ev 'Oracle|Release|Version'|awk '{print $1" "$2" "$3}'|sed 's/://g' >/aliyun/NCC/oracle/list
- #echo "select username,sid,serial#,paddr from v\$session where username='$ID';";
- while read a b c
- do
- echo "alter system kill session '$b,$c';";
- done < /aliyun/NCC/oracle/list
- echo "drop user $ID cascade; ;"
注释:
1.连接并把执行结果输出到/aliyun/NCC/oracle/Tmp/list;sqlplus NCC10/XXXX@ORCL > /aliyun/NCC/oracle/Tmp/list
2.执行的sql语句(可以根据自己的需求调整)select username,sid,serial#,paddr from v\$session where username='$ID';
3、less是对输出文件的处理
执行输出如下
- #./cascade.sh NCC10
- alter system kill session '25,64344';
- alter system kill session '198,42428';
- alter system kill session '223,3497';
- alter system kill session '402,8434';
- alter system kill session '415,11774';
- alter system kill session '588,28512';
- alter system kill session '602,1934';
- alter system kill session '794,46347';
- alter system kill session '970,58980';
- alter system kill session '980,21601';
- drop user NCC10 cascade; ;
直接多次执行就可以删除需要被删除的oracle的实例
- ORA-01940 无法删除当前已连接的用户之解决方案
-
- SQL> drop user ecity ;
- ERROR at line 1:
- ORA-01940: cannot drop a user that is currently connected
-
- 解决方案:
- 首先查询一下数据中有没有用户在使用
- SQL> select username,sid,serial#,paddr from v$session where username='ECITY';
- USERNAME SID SERIAL# PADDR
-
- 其次杀掉系统中的这个进程
- SQL> alter system kill session '${SID},${SERIAL}';
- SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;
-
- 然后执行删除操作,即可完成
- SQL> drop user ecity CASCADE;
- User dropped.
-
- 一直杀不干净咋办(列出所有的SID和SERIAL)和删除用户的命令一起执行
- SQL> alter system kill session '${SID},${SERIAL}';
- SQL> drop user ecity CASCADE;