.
1.oracle开机启动流程
su - oracle
lsnrctl start
lsnrctl status
sqlplus / as sysdba
startup
2、如何查看数据库版本
select * from v$version;
3.如何查看用户从那个设备连接的数据库
SELECT DISTINCT machine , terminal FROM V$SESSION;
4.如何查看表结构
select * from all_tables where table_name like '%'
select * from all_tab_columns where table_name='table_name'
select * from all_tables where table_name like '%YZH_ORACLE'
select * from all_tab_columns where table_name='YZH_ORACLE'
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;
14.如何获取链接状况
SELECT * FROM DBA_DB_LINKS;
15.如何查看数据库字符状况
SELECT * FROM NLS_DATABASE_PARAMETERS;
SELECT * FROM V$NLS_PARAMETERS;
16.如何查询表空间信息
SELECT * FROM DBA_DATA_FILES;
17.如何给表、列加注释
comment on table STUDENT is '学生信息表'; --comment on table 表 is '表注释';
comment on column 表.列 is '列注释'; --comment on column 表.列 is '列注释';
18.如何查看各个表空间占用磁盘情况
select b.file_id 文件ID号,
b.tablespace_name 表空间名,
b.bytes 字节数,
(b.bytes - sum(nvl(a.bytes, 0))) 已使用,
sum(nvl(a.bytes, 0)) 剩余空间,
sum(nvl(a.bytes, 0)) / (b.bytes) * 100 剩余百分比
from dba_free_space a, dba_data_files b
where a.file_id = b.file_id
group by b.tablespace_name, b.file_id, b.bytes
order by b.file_id
19. 如何才能得知系统当前的SCN号
select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;
20. 如何在字符串里加回车
select 'Welcome to visit'||chr(10)||'www.liuxiaobin.NET' from dual ;
21. 如何修改oracel数据库的默认日期
select sysdate from dual;
alter session set nls_date_format='yyyymmddhh24miss';
22.如何使select语句使查询结果自动生成序号
select rownum,2 from dual; --select rownum,COL_name from table_name;
23.如何知道数据库中某个表所在的tablespace?
--select tablespace_name from user_tables where table_name='表名';
select tablespace_name from user_tables where table_name='STUDENT';
24.如何快速做一个和原表一样的备份表?
--create table new_table as (select * from old_table);
create table BSYEARnew as (select * from BSYEAR);
25.如何查看数据库的状态
ps -ef | grep ora
26.如何查看表空间数据文件位置
select t1.name, t2.name
from v$tablespace t1
inner join v$datafile t2
on t1.ts# = t2.ts#;
26.如何修改表空间数据文件大小
alter database datafile '/opt/oracle/oradata/ORCLCDB/YZH.dbf' resize 300M;
27.如何查看ORACLE中有哪些程序在运行之中
select *from v$session;
28.如何看数据库有多少个tablespace
select * from dba_tablespaces;
29.查询SPFILE文件路劲
show parameter spfile;
30.如何查看哪些用户拥有SYSDBA、SYSOPER权限
select * from V_$PWFILE_USERS;
31.如何单独备份一个或多个表
方案1
--备份create table table_new as select * from table_old;
--恢复truncate table org_group;
--insert into org_group select * from table_new ;
create table "C##ROOTUSER".BSYEARNEWG as select * from "C##ROOTUSER".BSYEARNEW;
truncate table "C##ROOTUSER".BSYEARNEW;
insert into "C##ROOTUSER".BSYEARNEW select * from "C##ROOTUSER".BSYEARNEWG ;
32.查询一下当前用户下的所有空表
select table_name from user_tables where NUM_ROWS=0;
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
33.如何显示当前连接用户
SHOW USER
34.如何查看数据文件放置的路径
select tablespace_name, file_id, bytes / 1024 / 1024, file_name
from dba_data_files
order by file_id;
35.如何查看现有回滚段及其状态
SELECT SEGMENT_NAME, TABLESPACE_NAME, SEGMENT_ID, FILE_ID, STATUS
FROM DBA_ROLLBACK_SEGS
36、Oracle常用视图
A、DBA视图
(1)指定表空间的数据文件及所在的路径
select * from dba_data_files;
(2)指定表空间的剩余空间
select * from dba_free_space
(3)找出当前数据库实例中的所有用户
select * from dba_users
(4)找出当前数据库实例中的所有对象的物理信息
select * from dba_segments
(5)指定所有表对应的列名
select * from dba_tab_columns
(6)指定所有列的注释信息
select * from dba_col_comments
(7)列出所有的表空间及相关信息
select * from dba_tablespaces
(8) 所有表分区的信息
select * from dba_tab_partitions
(9)显示所有的有索引的列
select * from dba_ind_columns
(10)显示所有的索引信息
select * from dba_indexes
(11)显示所有的job信息
select * from dba_jobs
select * from dba_jobs_running
B、V$视图
(1)查看当前进程信息
select * from v$PROCESS
(2)查看当前锁信息
select * from v$lock
(3)查看当前会话信息
select * from v$session
(4)数据库的基本信息
select * from v$database
(5)数据文件信息
select * from v$datafile
(6)日志文件信息
select * from v$logfile
(7)控制文件信息
select * from v$controlfile
(8)参数信息
select * from v$parameter;
(9)查备份以及恢复
select *from V$BACKUP_SYNC_IO
select *from V$BACKUP_ASYNC_IO
(10)查询数据库坏块
select *from V$DATABASE_BLOCK_CORRUPTION
(11)查询那个事务在使用回滚段
select *from V$TRANSACTION
(12)当前实例中undo空间以及事务如何运行。并统计undo空间开销,事务开销以及实例可用的查询长度
select *from V$UNDOSTAT
(13)实列信息
SELECT * FROM V$INSTANCE;
37.如何快速清空一个大表
--truncate table table_name;
truncate table "C##ROOTUSER".YZH_ORACLE;
38、如何查询数据库有多少表?
select * from all_tables;
39、 如何测试SQL语句执行所用的时间?
SET TIMING ON;
-- 在这里执行你的SQL语句
select * from tablename;
SET TIMING OFF;
40.CHR()的反函数是?
SELECT CHR(65) FROM DUAL;
SELECT ASCII('A') FROM DUAL;
41.字符串的连接
--SELECT CONCAT(COL1,COL2) FROM TABLE ;
--SELECT COL1||COL2 FROM TABLE ;
SELECT OWNER||OBJECT_NAME FROM TEST t ;
42、怎么把select出来的结果导到一个文本文件中
--https://blog.csdn.net/zxljsbk/article/details/103478915/
spool /tmp/sqlplus.output.txt
select * from dual;
spool off --(只有关闭输出,才会在输出文件中看到输出的内容)
43、 怎样估算SQL执行的I/O数
SQL>SET AUTOTRACE ON ;
SQL>SELECT * FROM TABLE_name;
SQL>SELECT * FROM v$filestat;
44.如何在sqlplus下改变字段大小
--改大行,改小不行(除非都是空的).
--alter table table_name modify (field_name varchar2(100));
alter table "C##ROOTUSER".STUDENTNEW modify (SNAME varchar2(100));
45、sql 语句如何插入全年日期?
create table BSYEAR (d date);
insert into BSYEAR
select to_date('20230101','yyyymmdd')+rownum-1
from all_objects
where rownum <= to_char(to_date('20231231','yyyymmdd'),'ddd');
select *from BSYEAR
46、 如果修改表名
--alter table old_table_name rename to new_table_name;
alter table BSYEAR rename to newBSYEAR;
47、 如何统计两个表的记录总数?
--select (select count(id) from aa)+(select count(id) from bb) 总数 from dual;
select (select count(OWNER) from "C##ROOTUSER".TEST)+(select count(IDS) from "C##ROOTUSER".USERINFO) 总数 from dual;
48.怎样用Sql语句实现查找一列中第N大值
--方法一
create table test_max(id number, value number);
insert into test_max values(1,12);
insert into test_max values(2,100);
insert into test_max values(3,55);
insert into test_max values(4,100);
insert into test_max values(5,50);
commit;
select t.*, rowid from test_max t;
select t.* from (select t.*, rank() over(order by value desc) rk from test_max t) t where rk = 1;
49.如何在给现有的日期加上2年
select add_months(sysdate,24) from dual;
50. 返回当前月的最后一天
--方法一
SELECT TRUNC(ADD_MONTHS(SYSDATE, 1), 'MONTH') - 1 AS "The Last Day of this month" FROM dual;
--方法二
select sysdate 当前日期,last_day(sysdate) 最后一天日期 from dual
51.获取每个月最后一个工作日的ORACLE SQL查询
SELECT
to_char(last_day(add_months(SYSDATE,LEVEL-12)),'YYYY-MM-DD') AS Last_Workday_In_Month
FROM
dual
WHERE
to_char(last_day(add_months(SYSDATE,LEVEL-12)),'D') NOT IN (1,7)
CONNECT BY
LEVEL <= 12;
52.当前日期的月份第一天
select trunc(sysdate,'MM') from dual;
53.当前日期的年份第一天
select trunc(sysdate,'y') FROM DUAL;
select trunc(sysdate,'yy') FROM DUAL;
select trunc(sysdate,'yyy') FROM DUAL;
select trunc(sysdate,'yyyy') FROM DUAL;
54. 如何找数据库表的主键字段的名称
SELECT * FROM user_constraints WHERE CONSTRAINT_TYPE='P' and table_name='TABLE_NAME';
55.取时间点的年份的写法
--取时间点的年份的写法
SELECT TO_CHAR(sysdate,'YYYY') FROM DUAL;
--取时间点的月份的写法
SELECT TO_CHAR(sysdate,'mm') FROM DUAL;
--取时间点的日的写法
SELECT TO_CHAR(sysdate,'DD') FROM DUAL;
--取时间点的时的写法
SELECT TO_CHAR(sysdate,'HH24') FROM DUAL;
--取时间点的分的写法
SELECT TO_CHAR(sysdate,'MI') FROM DUAL;
--取时间点的秒的写法
SELECT TO_CHAR(sysdate,'SS') FROM DUAL;
--取时间点的日期的写法
SELECT TRUNC(sysdate) FROM DUAL;
--取时间点的时间的写法
SELECT TO_CHAR(sysdate,'HH24:MI:SS') FROM DUAL;
--返回参数的星期几的写法:
SELECT TO_CHAR(sysdate,'D') FROM DUAL;
--返回参数一年中的第几天的写法
SELECT TO_CHAR(sysdate,'DDD') FROM DUAL;
--返回参数中一年的第几周的写法
SELECT TO_CHAR(SYSDATE,'WW') FROM DUAL;
56.ROWID
SELECT ROWID,IDS, ACTIVITY_NAME, INTRACTIVE_TYPE, EMAIL, MOBILE, USERAGENT, EMAIL_TITLE, LABEL, CATEGORY1, "TIME", TIME1
FROM "C##ROOTUSER".USERINFO WHERE ids=10000425;
57.Oracle中时分秒数据格式转换技巧
--假设有一个名为“TEST”表,其中包含一个名为“DATETIME”的字段,其数据类型为TIMESTAMP。假设数据已存---储在表中,我们需要将时间戳数据格式转换为不同的格式。
--以下是一些代码示例:
–-转换为字符型格式:
SELECT TO_CHAR(SYSDATE , 'YYYY-MM-DD HH24:MI:SS') FROM dual;
SELECT TO_DATE(TO_CHAR(SYSDATE, 'YYYY-MM-DD'), 'YYYY-MM-DD') FROM dual;
SELECT TO_CHAR(SYSDATE , 'YYYY-MM-DD HH:MI:SS AM') FROM DUAL ;
SELECT CAST(SYSDATE AS TIMESTAMP) FROM DUAL ;
58.如何查询做比较大的排序的进程
SELECT b.tablespace, b.segfile#, b.segblk#, b.blocks, a.sid, a.serial#,
a.username, a.osuser, a.status
FROM v$session a,v$sort_usage b
WHERE a.saddr = b.session_addr
ORDER BY b.tablespace, b.segfile#, b.segblk#, b.blocks ;
59.如何查找重复记录
SELECT * FROM TABLE_NAME
WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D
WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);
60.如何删除重复记录?
DELETE FROM TABLE_NAME
WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D
WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);