-- 查询最多可以打开的游标数
show parameter open_cursors;
-- 修改可以最多可以打开的游标数
alter system set open_cursors=300 scope=both;
-- 查询向DB中存储一个汉字,是按照BYTE存,还是CHAR存。
select * from nls_database_parameters;
-- 值可以是'char'或者'byte'。修改DB类型,如VARCHAR2(2),默认是表示2个CHAR还是2个BTYE。
alter system set nls_length_semantics=‘char’;
-- 方式1(指定dmp路径):
imp 用户名/密码 file=D:/aaa.dmp full=y;
-- 方式2(不指定dmp路径,默认用oracle路径,如:D:\oracle\app\admin\orcl\dpdump\aaa.dmp)
impdp 用户名/密码 dumpfile=aaa.dmp full=y;
-- 方式1(指定dmp路径),没试过类比一下导入dmp命令,应该是好用的
exp 用户名/密码 file=D:\aaa.dmp full=y;
-- 方式2(不指定dmp路径,默认用oracle路径,如:D:\oracle\app\admin\orcl\dpdump\aaa.dmp)
expdp 用户名/密码 dumpfile=aaa.dmp full=y;
SELECT table_name
,comments
FROM user_tab_comments
WHERE comments = '用户情报表';
参照博客园博主“Smile”的文章《Oracle删除临时表》
SELECT sid
,serial#
FROM v$session
WHERE sid = (
SELECT sid
FROM v$lock
WHERE id1 = (
SELECT object_id
FROM dba_objects
WHERE object_name = UPPER('表名')
)
);
--把上面SQL查询的结果,代入到下面的'751,16962'中去,执行即可把表解锁。
ALTER system kill session '751,16962';
参照CSDN博主"成明宁杰"的文章《解决Oracle占用磁盘太大的问题》
数据库运行了一段时间后,表空间一直增加,但是实际数据量并没那么大。删除数据或者truncate表并不会降低表空间。这是因为表空间不足时会自动扩容,但是不会自动收缩。
SELECT a.file#
,a.name
,a.bytes/1024/1024 CurrentMB
,ceil(HWM * a.block_size)/1024/1024 ResizeTo
,(a.bytes - HWM * a.block_size)/1024/1024 ReleaseMB
,'alter database datafile '''||a.name||''' resize '|| ceil(HWM * a.block_size/1024/1024) || 'M;' ResizeCMD
FROM v$datafile a
,(
SELECT file_id,max(block_id+blocks-1) HWM
FROM dba_extents
GROUP BY file_id
) b
WHERE a.file# = b.file_id(+)
AND (a.bytes - HWM *block_size) > 0;
--上面SQL执行后,会生成多条类似下面的SQL,执行即可压缩表数据文件的空间
alter database datafile 'D:\ORACLE\ORADATA\ADMIN\SYSTEM01.DBF' resize 1000M;
alter database datafile 'D:\ORACLE\ORADATA\ADMIN\USERS01.DBF' resize 1000M;
alter database datafile 'D:\ORACLE\ORADATA\ADMIN\LOG.DBF' resize 1000M;
--等等SQL
参照CSDN博主"成明宁杰"的文章《解决Oracle占用磁盘太大的问题》
SELECT *
FROM (
SELECT SEGMENT_NAME -- 段的名称(如果有)
,SUM(BYTES) / 1024 / 1024 MB
FROM DBA_SEGMENTS -- 描述为数据库中所有段分配的存储
WHERE TABLESPACE_NAME = upper('用户名') -- 包含段的表空间的名称
GROUP BY SEGMENT_NAME
ORDER BY 2 DESC
)
WHERE ROWNUM < 10;
参照CSDN博主"成明宁杰"的文章《解决Oracle占用磁盘太大的问题》
SELECT t.segment_name
,t.segment_type
,sum(t.bytes / 1024 / 1024) "占用空间(M)"
FROM dba_segments t
WHERE t.segment_type='TABLE'
AND t.segment_name='表名'
GROUP BY OWNER
,t.segment_name
,t.segment_type;
-- 查询所有用户的表,视图等
SELECT * FROM ALL_TAB_COMMENTS;
-- 查询本用户的表,视图等
SELECT * FROM USER_TAB_COMMENTS;
-- 查询所有用户的表的列名和注释
SELECT * FROM ALL_COL_COMMENTS;
-- 查询本用户的表的列名和注释
SELECT * FROM USER_COL_COMMENTS;
-- 查询所有用户的表的列名等信息
SELECT * FROM ALL_TAB_COLUMNS;
-- 查询本用户的表的列名等信息
SELECT * FROM USER_TAB_COLUMNS;