Oracle 常用运维SQL整理,改字段类型改表名创建基础用户授权等

1. 批量生成【表名转大写】SQL(仅生成,不执行)

sql 复制代码
-- 批量修改表名为大写(生成SQL,手动执行更安全)
SELECT 'ALTER TABLE "' || TABLE_NAME || '" RENAME TO ' || UPPER(TABLE_NAME) || ';' AS 修改SQL
FROM USER_TABLES
WHERE TABLE_NAME != UPPER(TABLE_NAME);

2. 批量执行【所有表字段名转大写】(自动执行)

sql 复制代码
-- 批量修改所有表的字段名为大写(直接运行即可)
BEGIN
    -- 遍历当前用户所有表
    FOR tab IN (SELECT table_name FROM user_tables) LOOP
        -- 遍历表中小写/混合大小写字段
        FOR col IN (SELECT column_name 
                    FROM user_tab_columns 
                    WHERE table_name = tab.table_name 
                      AND column_name != UPPER(column_name)
                    ORDER BY column_id)
        LOOP
            -- 动态修改字段名为大写
            EXECUTE IMMEDIATE 
                'ALTER TABLE ' || tab.table_name || 
                ' RENAME COLUMN "' || col.column_name || '" TO ' || UPPER(col.column_name);
        END LOOP;
    END LOOP;
END;
/

3. 刷新Oracle缓存

sql 复制代码
-- 刷新共享池、数据缓冲区(解决缓存导致的查询异常)
ALTER SYSTEM FLUSH SHARED_POOL;
ALTER SYSTEM FLUSH BUFFER_CACHE;

4. 查看当前连接的PDB/CDB名称

sql 复制代码
-- 查看当前容器名(PDB/CDB)
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') AS 当前容器名 FROM DUAL;

5. 创建表空间(规范完整版)

sql 复制代码
-- 创建自定义表空间(修改 表空间名、文件路径 即可使用)
CREATE TABLESPACE 表空间名
DATAFILE 'D:\oracle\oradata\ORCL\orclpdb\表空间名.dbf'
SIZE 1G 
AUTOEXTEND ON NEXT 100M 
MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL 
SEGMENT SPACE MANAGEMENT AUTO;

6. 基础权限授权

sql 复制代码
-- 给用户授予基础权限(连接、建表、序列、视图、无限表空间)
GRANT CREATE SESSION TO 用户名;
GRANT CREATE TABLE, CREATE SEQUENCE, CREATE VIEW TO 用户名;
GRANT UNLIMITED TABLESPACE TO 用户名;

-- 如需存储过程、触发器,追加:
-- GRANT CREATE PROCEDURE, CREATE TRIGGER TO 用户名;

7. 【指定单张表】字段名转大写

sql 复制代码
-- 仅修改指定表的字段为大写(替换 表名 为大写)
BEGIN
    FOR rec IN (SELECT column_name 
                FROM user_tab_columns 
                WHERE table_name = '表名'  -- 表名必须大写
                  AND column_name != UPPER(column_name)
                ORDER BY column_id)
    LOOP
        EXECUTE IMMEDIATE 'ALTER TABLE 表名 RENAME COLUMN "' || rec.column_name || '" TO ' || UPPER(rec.column_name);
    END LOOP;
END;
/

8. 安全修改字段类型(字符串转数字,无数据丢失)

sql 复制代码
-- 字段类型安全改造: VARCHAR2 → NUMBER(18,4)
-- 1. 新增目标类型字段
ALTER TABLE 表名 ADD 字段名_new NUMBER(18,4);

-- 2. 数据迁移(空值自动转0)
UPDATE 表名 SET 字段名_new = NVL(TO_NUMBER(TRIM(原字段名)), 0);
COMMIT;

-- 3. 旧字段备份
ALTER TABLE 表名 RENAME COLUMN 原字段名 TO 原字段名_old;

-- 4. 新字段替换为正式字段
ALTER TABLE 表名 RENAME COLUMN 字段名_new TO 原字段名;

-- 5. 刷新表统计信息
ANALYZE TABLE 表名 COMPUTE STATISTICS;

9. 解锁用户账号

sql 复制代码
-- 解锁账号(通用语法)
ALTER USER 用户名 ACCOUNT UNLOCK;

-- 示例:解锁system账号
ALTER USER system ACCOUNT UNLOCK;

10. 完整创建【表空间 + 用户 + 授权】

sql 复制代码
-- 1. 创建表空间
CREATE TABLESPACE 表空间名
DATAFILE 'D:\ORACLE\ORADATA\ORCL\ORCLPDB\表空间名.dbf'
SIZE 500M
AUTOEXTEND ON NEXT 100M
MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;

-- 2. 创建用户(指定默认表空间)
CREATE USER 用户名 IDENTIFIED BY "密码"
DEFAULT TABLESPACE 表空间名
TEMPORARY TABLESPACE TEMP;

-- 3. 基础授权
GRANT CREATE SESSION TO 用户名;
GRANT CREATE TABLE, CREATE SEQUENCE, CREATE VIEW TO 用户名;
GRANT UNLIMITED TABLESPACE TO 用户名;

11. 批量执行【指定多张表】表名转大写

sql 复制代码
-- 批量修改指定表名为大写(IN中填写需要修改的表名)
BEGIN
    FOR t IN (
        SELECT TABLE_NAME 
        FROM USER_TABLES 
        WHERE TABLE_NAME IN ('表名1','表名2','表名3') -- 填写目标表名
    ) LOOP
        EXECUTE IMMEDIATE 'ALTER TABLE "'||t.TABLE_NAME||'" RENAME TO '||UPPER(t.TABLE_NAME);
    END LOOP;
END;
/

重要使用说明

  1. 表名/字段名大小写 :Oracle 元数据默认全大写,小写表/字段必须加双引号,建议统一转大写避免报错。
  2. 执行注意 :修改表名、字段、类型属于DDL操作,会自动提交事务,生产环境建议先备份。
  3. PDB环境 :12c+版本必须切换到PDB内执行表空间、用户、表相关操作。
  4. 结尾 / :PL/SQL块(BEGIN-END)结尾必须加 / 才能执行。

总结

这份整理好的SQL覆盖了表/字段大小写转换、表空间创建、用户授权、字段类型修改、账号解锁 等高频运维场景,直接替换中文占位符即可使用,语法规范无错误,适配Oracle 11g/12c/19c主流版本。

相关推荐
NoSi EFUL18 分钟前
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
android·数据库·mysql
河阿里20 分钟前
SQL数据库:五大范式(NF)
数据库·sql·oracle
l1t1 小时前
DeepSeek总结的PostgreSQL 19查询提示功能
数据库·postgresql
chenxu98b3 小时前
MySQL如何执行.sql 文件:详细教学指南
数据库·mysql
刘晨鑫13 小时前
MongoDB数据库应用
数据库·mongodb
梦想的颜色4 小时前
mongoTemplate + Java 增删改查基础介绍
数据结构·数据库·mysql
小小小米粒4 小时前
redis命令集合
数据库·redis·缓存
Irene19915 小时前
SQL 中日期的特殊性总结(格式符严格要求全大写)
sql
herinspace5 小时前
管家婆实用贴-如何分离和附加数据库
开发语言·前端·javascript·数据库·语音识别
花椒技术5 小时前
从区间锁到行锁:一次高并发写入死锁治理实战
后端·sql