oracle学习笔记1

记录1

#一定要在 oracle用户下执行
source /home/oracle/.bash_profile
sqlplus / as sysdba

1.查看Oracle运行状态的精简Shell命令
命令说明:
ps -ef - 列出所有进程
grep -E 'ora_|asm_' - 查找Oracle相关进程(包括ASM)
grep -v grep - 排除grep自身进程
|| echo "Oracle进程未运行" - 如果没有找到相关进程则显示提示信息

ps -ef | grep -E 'ora_|asm_' | grep -v grep || echo "Oracle进程未运行"

替代方案(如果配置了ORACLE_HOME):
$ORACLE_HOME/bin/lsnrctl status | grep -q "STATUS" && echo "Oracle监听运行中" || echo "Oracle监听未运行"



2.查看Oracle安装位置的最简Shell命令
ps -ef | grep pmon | grep -v grep | awk '{print $NF}' | sed 's/^ora_pmon_//;s/$//' | xargs -I {} grep -h "^ORACLE_HOME" /etc/oratab /var/opt/oracle/oratab $HOME/.oratab 2>/dev/null | cut -d: -f2 | head -1

但是实际没有啥反应哈哈

[root@localhost ~]# cat /proc/$(pgrep -f pmon)/environ 2>/dev/null | tr '\0' '\n' | grep ORACLE_HOME | cut -d= -f2
/u01/app/oracle/product/11.2.0

oratab文件不存在或位置不对:
[root@localhost ~]# ls -l /etc/oratab /var/opt/oracle/oratab ~/.oratab 2>/dev/null
-rw-rw-r--. 1 oracle oinstall 716 4月  11 14:22 /etc/oratab

查看对应的权限问题
[root@localhost ~]# sudo ls -l /etc/oratab
-rw-rw-r--. 1 oracle oinstall 716 4月  11 14:22 /etc/oratab

更可靠的替代方案:
# 方法1:直接查找Oracle二进制文件
find / -name "sqlplus" -type f -executable 2>/dev/null | head -1 | xargs dirname | xargs dirname

# 方法2:检查运行中的Oracle进程环境变量
cat /proc/$(pgrep -f pmon)/environ 2>/dev/null | tr '\0' '\n' | grep ORACLE_HOME | cut -d= -f2

# 方法3:查找所有可能的oratab文件
find / -name "oratab" 2>/dev/null | xargs grep "^ORACLE_HOME" | head -1 | cut -d: -f2
该命令不行 没有反应


3.查看 oracle的版本信息
[oracle@localhost root]$ $ORACLE_HOME/OPatch/opatch lsinventory | grep "Oracle Database" | head -1
Oracle Database 11g                                                  11.2.0.1.0
[root@localhost ~]# sqlplus -v


4.查看当前运行中的SQL会话  
会话出现死锁的情况下
SELECT 
    s.sid, 
    s.serial#, 
    s.username, 
    s.status, 
    s.machine, 
    s.program,
    s.sql_id,
    sq.sql_text,
    s.blocking_session,
    s.seconds_in_wait,
    s.event,
    s.wait_class
FROM 
    v$session s
JOIN 
    v$sql sq ON s.sql_id = sq.sql_id
WHERE 
    s.status = 'ACTIVE'
    AND s.type = 'USER'
ORDER BY 
    s.seconds_in_wait DESC;
    
ALTER SYSTEM DISCONNECT SESSION '141,112' POST_TRANSACTION;


5.
唯一可信记录:2003年叙利亚海关曾使用Oracle 9i(通过黎巴嫩代理商进口)
国内替代Oracle的核心路径是:

短期:通过PostgreSQL/MySQL生态过渡,利用兼容工具降低迁移成本。
长期:采用国产分布式数据库(如OceanBase、TiDB、GaussDB)实现自主可控。
云化:借助阿里云、腾讯云等托管服务减少运维压力。
随着信创政策的推进和国产数据库技术的成熟,Oracle在国内市场的份额将持续下降,但完全替代仍需时间(尤其在高端企业场景)


6.列出所有以ora_开头的进程,这些进程通常是Oracle数据库的后台进程。
ps -ef | grep ora_ | grep -v grep


7.查看所有安装的组件
SELECT comp_name, status, version FROM dba_registry;
--下面是18个相关的组件信息
OWB
Oracle Application Express
Oracle Enterprise Manager   #生成AWR报告
OLAP Catalog
Spatial
Oracle Multimedia
Oracle XML Database
Oracle Text
Oracle Expression Filter
Oracle Rules Manager
Oracle Workspace Manager
Oracle Database Catalog Views
Oracle Database Packages and Types
JServer JAVA Virtual Machine
Oracle XDK
Oracle Database Java Packages
OLAP Analytic Workspace
Oracle OLAP API

8.通过网页访问Oracle的AWR报告
Oracle Enterprise Manager   #生成AWR报告

http://<数据库服务器IP>:<端口>/em
http://192.168.188.132:5500/em
root用户  确保防火墙允许访问 5500 端口
iptables -I INPUT -p tcp --dport 5500 -j ACCEPT

cat $ORACLE_HOME/em/emctl/config/emctl.config

sqlplus / as sysdba
@$ORACLE_HOME/rdbms/admin/awrrpt.sql
/home/shelloracle/awrrpt_1_7_22.html
--之前没有权限 root用户下建立的/home/shelloracle
sudo chown oracle:oinstall /home/shelloracle


模拟生成AWR报告的场景
-- 生成起始快照
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
-- 执行模拟负载操作...
-- 创建测试表(约消耗1GB空间)
CREATE TABLE test_cpu_load AS 
SELECT LEVEL AS id, 
       RPAD('CPU_STRESS', 1000, 'X') AS data 
FROM DUAL 
CONNECT BY LEVEL <= 1000000;

-- 执行全表扫描+聚合计算(触发CPU消耗)
SELECT COUNT(*) FROM (
  SELECT t1.id, t2.data 
  FROM huang.test_cpu_load t1, huang.test_cpu_load t2 
  WHERE t1.id = t2.id 
  AND ROWNUM <= 100000
);


-- 创建测试表(初始数据)
CREATE TABLE huang.test_io_load (
  id NUMBER PRIMARY KEY,
  data CLOB
);

-- 插入大量LOB数据(每次插入1MB数据,共100次)
DECLARE
  v_clob CLOB := RPAD('X', 1024*1024, 'Y'); -- 1MB数据
BEGIN
  FOR i IN 1..100 LOOP
    INSERT INTO huang.test_io_load VALUES (i, v_clob);
    COMMIT;
  END LOOP;
END;
/

-- 更新所有记录触发物理写入
UPDATE huang.test_io_load SET data = RPAD(data, 1024*1024, 'Z');
COMMIT;

-- 生成结束快照
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值