2.26笔记

1,SELECT username, account_status, default_tablespace FROM dba_users;

通过该指令可以查询到所有用户的信息,发现scott用户状态显示为EXPIRED & LOCKED(TIMED)

这意味着该用户已过期并被锁定。

ALTER USER scott identified by 2001729; 改密码

ALTER USER scott ACCOUNT UNLOCK; 解锁用户scott

ALTER USER scott PASSWORD EXPIRE; 将用户scott的密码设置成已过期

connect  scott/2001729;直接切换用户

2,listener.ora 和 tnsnames.ora 两个文件 比较重要

        前一个管理了basic连接方式下 选择使用SID进行连接,后一个管理TNS连接方式的一些参数,比如协议可以选择TCP。

        listener.ora文件:

        listener.ora是tnslsnr进程的配置文件,监听的参数都是从该配置文件中读取,该文件位于服务端。

#这是一个名为 LISTENER1 的监听器
#监听的协议是TCP协议
#监听的主机IP是127.0.0.1
#监听的端口是1521端口
LISTENER1 = #别名
 (DESCRIPTION_LIST =
    (DESCRIPTION =#监听的通信三元组
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)
    )
 )

#记录了监听器LISTENER1服务的全局数据库名、数据库路径和数据库实例名
SID_LIST_LISTENER1 =
    (SID_LIST =
        (SID_DESC =
            (GLOBAL_DBNAME = ORCL) #数据库全局名称,select * from global_name
            (ORACLE_HOME = C:\Oracle11g\product\11.2.0\dbhome_1) #oracle软件的根目录
            (SID_NAME = ORCL) #监听库的SID实例名
        )
    )
tnsnames.ora:这是客户端的配置文件,用于配置客户端连接到数据库实例的信息。

listener.ora 是在数据库服务器端配置的,而 tnsnames.ora 是在客户端配置的。

 

3,scott拥有create table的权利,其只能在scott模式下创建表,在其他模式下(如A)创建表会显示权限不足的问题。

    可以通过create any table来赋予用户可以在其他模式下创建表的权力,显示执行成功,不过在navicat上不能发现模式A下有刚刚创建的表,找到原因为 并没有赋予scott对模式A的查询权限,即使在模式A上创建了表 ,也看不到,要将模式A的查询权限也赋给scott。

        如果像下面这种授权方式行不通,在 Oracle 中,不能直接使用通配符 * 来授予模式中所有表的权限。

GRANT SELECT ON A.* TO scott > ORA-00903: 表名无效

以下是解决方法,使用 PL/SQL 循环来动态地为模式中的每个表授予权限,这样用户scott建立的查询就能查询到模式A中的表了

BEGIN
  FOR tbl IN (SELECT table_name FROM all_tables WHERE owner = 'A') LOOP
    EXECUTE IMMEDIATE 'GRANT SELECT ON A.' || tbl.table_name || ' TO scott';
  END LOOP;
END;
/

 

DEMO2是用户scott(角色是DEFAULT) 通过SID进行的连接

4,leetcode 239 滑动窗口最大值

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        vector<int>ans;
        priority_queue<pair<int,int>>qwe;
        for(int i=0;i<k;i++){
            qwe.emplace(nums[i],i);
        }
        ans.push_back(qwe.top().first);
        for(int i=k;i<nums.size();i++){
            qwe.emplace(nums[i],i);
            while(qwe.top().second<i-k+1){
                qwe.pop();
            }
            ans.push_back(qwe.top().first);
        }
        return ans;
    }
};

关键在于用一个二维数组的优先队列,把下标也存进去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值