一、oracle常用sql语句
1)手动oracle开机启动流程
su - oracle
lsnrctl start
lsnrctl status
sqlplus / as sysdba
startup
linux 下ORACLE 配置单机开机自启
记下这两个值
echo $ORACLE_HOME
echo $ORACLE_SID
find / -iname dbstart
find / -iname dbshut
/opt/oracle/product/19c/dbhome_1/bin/dbstart
/opt/oracle/product/19c/dbhome_1/bin/dbshut
有报错信息,提示ORACLE_HOME不识别,如下解决方案,修改dbstart和dbstut,有的版本dbstut找不到不存在,可以忽略。
vim /opt/oracle/product/19c/dbhome_1/bin/dbstart
vim /opt/oracle/product/19c/dbhome_1/bin/dbshut
将
ORACLE_HOME_LISTNER =$1
改成
ORACLE_HOME_LISTNER=$ORACLE_HOME
修改oratab和rc.local
vim /etc/oratab
vim /etc/rc.d/rc.local
su oracle -lc "/opt/oracle/product/19c/dbhome_1/bin/dbstart start"
su oracle -lc "/opt/oracle/product/19c/dbhome_1/bin/dbshut "
#加执行权限
chmod +x /etc/rc.d/rc.local
换成另外一种方式
1.启动数据库实例的shell脚本
启动Oracle数据库的脚本为 /opt/oracle/product/19c/dbhome_1/dbstart.sh
cd /opt/oracle/product/19c/dbhome_1/bin
touch dbstart.sh
vim dbstart.sh
vim dbrestart.sh
vim dbshut.sh
#!/bin/sh
lsnrctl start
sqlplus / as sysdba <<EOF
startup;
EOF
2. 启数据库实例的shell脚本
重启Oracle数据库的脚本为/opt/oracle/product/19c/dbhome_1/dbrestart.sh
#!/bin/sh
sqlplus / as sysdba <<EOF
shutdown immediate;
startup;
EOF
3.关闭数据库实例的shell脚本
关闭Oracle数据库的脚本为/opt/oracle/product/19c/dbhome_1/dbshut.sh
#!/bin/sh
sqlplus / as sysdba <<EOF
shutdown immediate;
EOF
#建好之后给三个文件授权
chmod +x /opt/oracle/product/19c/dbhome_1/bin/dbstart.sh
chmod +x /opt/oracle/product/19c/dbhome_1/bin/dbrestart.sh
chmod +x /opt/oracle/product/19c/dbhome_1/bin/dbshut.sh
4.配置两个启动服务 【oracle.service】和【lsnrctl.service】
cd /usr/lib/systemd/system/
# 创建当前目录下的 oracle.service 文件 vim ./oracle.service
# 内容为:
[Unit]
Description=Oracle RDBMS
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/su - oracle -c "/opt/oracle/product/19c/dbhome_1/bin/dbstart.sh >> /tmp/oracle.log"
ExecReload=/usr/bin/su - oracle -c "/opt/oracle/product/19c/dbhome_1/bin/dbrestart.sh >> /tmp/oracle.log"
ExecStop=/usr/bin/su - oracle -c "/opt/oracle/product/19c/dbhome_1/bin/dbshut.sh \>\> /tmp/oracle.log"
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
# 查询 oracle 的安装目录
echo $ORACLE_HOME
# 创建当前目录下的 lsnrctl.service 文件
vim ./lsnrctl.service
# 内容为:
[Unit]
Description=Oracle lsnrctl
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/su - oracle -c "/opt/oracle/product/19c/dbhome_1/bin/lsnrctl start >> /tmp/lsnrctl.log"
ExecReload=/usr/bin/su - oracle -c "/opt/oracle/product/19c/dbhome_1/bin/lsnrctl reload >> /tmp/lsnrctl.log"
ExecStop=/usr/bin/su - oracle -c "/opt/oracle/product/19c/dbhome_1/bin/lsnrctl stop >> /tmp/lsnrctl.log"
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
刷新服务配置文件
systemctl daemon-reload
5.测试 启动/停止/重启
在root账号下测试oracle和lsnrctl服务
1.直接先执行脚本检查是否有问题:
su - oracle -c "/opt/oracle/product/19c/dbhome_1/bin/lsnrctl status >> /tmp/lsnrctl.log"
su - oracle -c "/opt/oracle/product/19c/dbhome_1/bin/dbshut.sh \>\> /tmp/oracle.log"
2.命令测试
# 切换 root 账号
su root
# 启动oracle服务
systemctl start oracle
# 重启oracle服务
systemctl restart oracle
# 关闭oracle服务
systemctl stop oracle
# 启动lsnrctl服务
systemctl start lsnrctl
# 重启lsnrctl服务
systemctl restart lsnrctl
# 关闭lsnrctl服务
systemctl stop lsnrctl
# 将 oracle 和 lsnrctl 服务设置为开机/关机自动启动/停止
# 把oracle实例服务设置为开机自启动
systemctl enable oracle
# 把oracle监听服务设置为开机自启动
systemctl enable lsnrctl
# 执行 systemctl stop oracle ,避免 oracle 因为异常关闭,而导致开机启动异常。
systemctl stop oracle
# 关机
reboot
chmod 777 /usr/lib/systemd/system/oracle.service
systemctl enable /usr/lib/systemd/system/oracle.service
systemctl is-enabled oracle.service
开机重启看看(在关机之前请先执行systemctl stop oracle,避免Oracle异常关闭导致开机启动异常)
2)如何查看数据库版本
select * from v$version;
3)如何查看用户从那个设备连接的数据库
SELECT DISTINCT machine , terminal FROM V$SESSION;
4)如何查看表结构
方法一、
select * from all_tables where table_name like '%' #查询名为 'YZH_ORACLE' 的表的列信息,包括列名、数据类型、约束等。
select * from all_tab_columns where table_name='table_name' #查询名为 'YZH_ORACLE' 的表的列注释信息。
select * from all_tables where table_name like '%YZH_ORACLE'
select * from all_tab_columns where table_name='YZH_ORACLE'
方法二、
select uc.table_name 表名,
utc.comments 表说明,
uc.column_name 字段名,
ucc.comments 字段说明,
uc.data_type 数据类型,
uc.data_length 长度,
uc.nullable 是否为空,
uc.data_default 默认值
from cols uc, user_col_comments ucc, user_tab_comments utc
where uc.table_name = ucc.table_name
and uc.column_name = ucc.column_name
and uc.table_name = utc.table_name
---- and uc.table_name='XXX(一定要注意表名大写)'
and uc.table_name='YZH_ORACLE'
order by uc.table_name, uc.column_id
5)如何查看最大会话数
SELECT * FROM V$PARAMETER WHERE NAME LIKE 'proc%';
show parameter processes;
数据库记录中曾经最大会话数
select * from v$license;
6)如何查询事务被锁时间
select * from v$locked_object ;
7)如何查询那些用户正在使用数据库
select username from v$session;
8)如何查得数据库的SID、以及是否归档
select * from v$database;
9)如何查询用户权限
SELECT * FROM DBA_SYS_PRIVS;
10)何查询被锁对象
select *from V$LOCKED_OBJECT
select *from V$SESSION
11)如何生成随机数
select DBMS_RANDOM.RANDOM from dual;
12)查询当前用户对象
SELECT * FROM USER_OBJECTS;
SELECT * FROM DBA_SEGMENTS;
13)如何获取错误信息
SELECT * FROM USER_ERRORS;