首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何解决ORA-27106:系统页不可用来分配内存?

ORA-27106错误是Oracle数据库中的一个常见错误,它表示系统无法为进程分配内存页。解决这个错误可以采取以下几个步骤:

  1. 检查系统内存:首先,确保系统有足够的可用内存来分配给Oracle进程。可以使用命令free -m来查看系统的可用内存情况。如果可用内存不足,可以尝试释放一些不必要的内存或增加系统的物理内存。
  2. 调整共享内存参数:ORA-27106错误通常与共享内存参数设置有关。可以通过修改/etc/sysctl.conf文件来调整这些参数。具体来说,可以尝试增加shmmaxshmall参数的值。例如,可以将shmmax设置为较大的值(例如1GB),将shmall设置为较大的页数(例如65536)。修改完参数后,可以使用sysctl -p命令使其生效。
  3. 检查用户权限:确保Oracle用户具有足够的权限来分配内存页。可以通过检查用户的ulimit设置来确认。可以使用ulimit -a命令查看当前用户的限制。如果限制太低,可以通过修改/etc/security/limits.conf文件来增加限制。例如,可以将oracle soft memlock unlimitedoracle hard memlock unlimited添加到文件中,然后重新登录以使其生效。
  4. 重启Oracle服务:如果以上步骤都没有解决问题,可以尝试重启Oracle服务。可以使用service oracle restart命令来重启服务。

总结起来,解决ORA-27106错误的关键是确保系统有足够的可用内存,并调整共享内存参数和用户权限。如果问题仍然存在,可以考虑重启Oracle服务。请注意,以上解决方案仅供参考,具体操作可能因系统环境而异。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云主机:https://cloud.tencent.com/product/cvm
  • 腾讯云数据库:https://cloud.tencent.com/product/cdb
  • 腾讯云云服务器:https://cloud.tencent.com/product/cvm
  • 腾讯云云原生应用引擎:https://cloud.tencent.com/product/tke
  • 腾讯云云安全中心:https://cloud.tencent.com/product/ssc
  • 腾讯云音视频处理:https://cloud.tencent.com/product/mps
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网:https://cloud.tencent.com/product/iot
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobdev
  • 腾讯云对象存储:https://cloud.tencent.com/product/cos
  • 腾讯云区块链:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/mu
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Linux 内核 内存管理】内存管理系统调用 ③ ( mmap 创建内存映射原理 | 分配虚拟内存 | 物理地址与虚拟地址进行映射 | 并分配物理内存 | mmap 库函数与内核系统调用函数 )

文章目录 一、mmap 创建内存映射原理 ( 分配虚拟内存 | 物理地址与虚拟地址进行映射 | 产生缺页异常并分配物理内存 ) 1、分配虚拟内存 2、物理地址与虚拟地址进行映射 3、产生缺页异常并分配物理内存...二、mmap 库函数与 mmap 内核系统调用函数 一、mmap 创建内存映射原理 ( 分配虚拟内存 | 物理地址与虚拟地址进行映射 | 产生缺页异常并分配物理内存 ) ---- 1、分配虚拟内存...分配 虚拟内存 : 应用进程 调用 mmap 函数后 , 在 Linux 系统中 创建 " 内存映射 “ 时 , 会在 ” 用户虚拟地址空间 “ 中 , 分配一块 ” 虚拟内存区域 " ; 此处调用的...物理内存 , 而是产生一个 ” 缺页异常 " ; 分配 物理内存 : 缺页异常后的 2 种处理策略 ; 文件映射 : 对于 " 文件映射 " , 遇到 " 缺页异常 " 后 , 会 分配 " 物理内存..." 映射到 ” 物理内存 " ; 二、mmap 库函数与 mmap 内核系统调用函数 ---- 注意区分下 用户空间 的 mmap 库函数 , 与 内核空间 的 mmap 系统调用函数 ; mmap

2.2K10

伙伴系统的概述

Linux内核内存管理的一项重要工作就是如何在频繁申请释放内存的情况下,避免碎片的产生。Linux采用伙伴系统解决外部碎片的问题,采用slab解决内部碎片的问题,在这里我们先讨论外部碎片问题。...显然,前者不能成为解决问题的普遍方法,一来用来映射非连续内存线性地址空间有限,二来每次映射都要改写内核的表,进而就要刷新TLB,这使得分配的速度大打折扣,这对于要频繁申请内存的内核显然是无法忍受的。...2^1=2个最小内存块,由于系统中正好存在一个order 1的内存块,所以直接用来分配 4 程序C申请一块大小为35K的内存,对应的order为0,同样由于系统中正好存在一个order 0的内存块,直接用来分配...图中一共有32个,只分配出了4个框,但是能够分配的最大连续内存也只有8个框(因为伙伴系统分配出去的内存必须是2的整数次幂个框),内核解决这种问题的办法就是将不同类型的进行分组。...将可回收不可移动分开,这样虽然在不可移动的区域当中无法分配大块的连续内存,但是可回收的区域却没有受其影响,可以分配大块的连续内存

91220

伙伴系统之避免碎片--Linux内存管理(十六)

1 前景提要 1.1 碎片化问题 分页与分段 是信息的物理单位, 分页是为了实现非连续分配, 以便解决内存碎片问题, 或者说分页是由于系统管理的需要....反碎片的工作原理如何? 为理解该方法,我们必须知道内核将已分配页划分为下面3种不同类型。 页面类型 描述 举例 不可移动内存中有固定位置, 不能移动到其他地方....这马上引出了另一个问题 : 内核如何在两个竞争的内存域之间分配可用的内存? 这显然对内核要求太高,因此系统管理员必须作出决定。...毕竟,人可以更好地预测计算机需要处理的场景,以及各种类型内存分配的预期分布. 3.2 数据结构 kernelcore参数用来指定用于不可移动分配内存数量, 即用于既不能回收也不能迁移的内存数量。...谈到从物理内存域提取多少内存用于ZONE_MOVABLE的问题, 必须考虑下面两种情况 用于不可移动分配内存会平均地分布到所有内存结点上 只使用来自最高内存域的内存

3.2K30

内存管理两部曲之物理内存管理

非连续分配管理方式 可以看出来,连续的内存分配具有易理解、访问效率高等优点。但是,由于其要求把作业(进程)放在内存的一片连续区域中,很容易出现大段的连续内存空间因为不足够容纳作业或进程而不可用。...图片来源《现代操作系统 - 第 3 版》 前文说过,指令真正执行的时候会将虚拟地址最终转换为物理地址。 那么,式管理中是如何将虚拟地址(页面)和物理地址(框)进行映射的呢?...换句话说,如何根据虚拟地址计算得到物理地址? 为此,操作系统为每个进程建立了一张表,这是一个十分重要的数据结构!表通常存在进程控制块(PCB)中。...式管理中的两个重要问题 在任何分页式系统中,都不可避免地要考虑下面这两个问题: 问题 1:如何保证虚拟地址到物理地址的转换足够快 — 使用快表解决 问题 2:如何解决虚拟地址空间大,表也会很大的问题...我们假设系统中只有一个表,那即使我们使用的只是虚拟地址空间中的一小部分,也总是需要一整个表全部驻留在内存中。 用来压缩表的常用方法就是使用层次结构的表。

86210

Thunk程序的实现原理以及在iOS中的应用(二)

本文将重点介绍如何通过编译时的静态代码来实现thunk程序的方法,以便解决上一篇文章对于iOS系统下指令动态构造的约束限制的问题。...否则就会产生系统崩溃,这也就是说我们不可以在具有可读写权限的内存区域中(比如堆内存或者栈内存空间)动态的构造出指令来供CPU执行。...上面的例子中进程1的第5和进程2的第7共享相同的物理内存第9。 操作系统还会维持一个全局物理空闲信息表,用来记录当前未被分配的物理内存。...vm_allocate可以用来实现虚拟内存分配,malloc也可以用来实现堆内存分配,这两者之间有什么关系呢?...进一步来说,我们可以在运行时分配2虚拟内存,当分配完成后,将第1虚拟内存地址remap到上述那部分代码所在的内存地址,而将第2分配的虚拟内存用来存放指令中所指定偏移的数据。

1.1K20

Linux性能及调优指南(翻译)之Linux内存架构

图1-11 32位和64位架构的虚拟内存地址布局 1.2.2 虚拟内存管理 操作系统的物理内存架构对于应用和用户来说通常是不可见的,因为操作系统会把任何的物理内存都映射到虚拟内存中。...swap空间被使用时并不意味着出现内存的瓶颈,它恰恰证明了Linux管理系统资源如何的有效。详见“帧回收”。 帧的分配是一组连续线性的物理内存帧)或虚拟内存。...Linux内存知道可用的内存的数量及位置。 伙伴系统 Linux内核通过一种被称作伙伴系统的机制管理空闲。伙伴系统管理空闲并尽力为分配请求分配页。它尽最大努力保持内存区域的连续。...如果不考虑分散的小,将会导致内存碎片,并导致在连续区域内申请一大段的变得困难。它将导致效率低下的内存使用和性能下降。 图1-13说明了伙伴系统如何分配页。 ?...帧回收 当一个进程请求一定数量的的映射时,如果不可用,Linux内核新的请求尝试通过释放某些(先前使用过但现在不再使用,但基于某些原则仍然被标记为活动状态的)并分配内存给该进程。

1.9K50

内存问题探微(2020 TechDay 分享实录)

虚拟内存与物理内存 首先我们来先看看虚拟内存与物理内存,虚拟内存和物理内存的关系印证了一句名言,「操作系统中的任何问题都可以通过一个抽象的中间层来解决」,虚拟内存正是如此。...为了解决这个问题,人们使用了 level 的概念,表的结构分为多级,表项的大小只与虚拟内存空间中真正使用的多少有关。...Arena 的出现首先用来解决多线程下全局锁的问题,它的思路是尽可能的让一个线程独占一个 Arena,同时一个线程会申请一个或多个堆,释放的内存又会进入回收站,Arena 就是用来管理这些堆和回收站的。...它的实现也非常简单,先申请一块 64M 大小的不可不可不可执行(PROT_NONE)的内存区域,需要内存时使用 mprotect 把一块内存区域的权限改为可读可写(R+W)即可,这块内存区域就可以分配给上层应用了...这中间的两块内存区域是属于一个子堆,它们加起来的大小是 64M,然后其中有一块 1.3M 大小的内存区域就是使用 mprotrect 分配出去的,剩下的 63M 左右的区域,是不可不可不可执行的待分配区域

41020

Linux 内核 VS 内存碎片 (上)

(外部)内存碎片是一个历史悠久的 Linux 内核编程问题,随着系统的运行,页面被分配给各种任务,随着时间的推移内存会逐步碎片化,最终正常运行时间较长的繁忙系统可能只有很少的物理页面是连续的。...,比如通过块分配分配结构体对象 (在内核态很常见且频繁的操作),或对不支持 scatter/gather 模式的 DMA 缓冲器的操作等,会引起频繁的直接内存回收/规整,导致系统性能出现较大的波动,或分配失败...如果内核编程不再依赖线性地址空间的高阶物理内存分配,那么内存碎片问题就从根本上解决了,但对于 Linux kernel 这样庞大的工程来说,这样的修改显然是不可能的,所以从 Linux 2.x 版本至今...本文将重点描述当前常用的 3.10 版本内核在伙伴分配器的预防内存碎片的扩展,内存规整原理,如何查看碎片指数,以及如何量化内存规整带来的延迟开销等。...Per-CPU pageset 是用来优化单分配的,可以减少处理器之间的锁竞争。和反碎片化没有关系,因此在本文不做详细介绍。 根据迁移类型进行分组是我们要详细介绍的反碎片方法。

3.5K40

内存问题探微

虚拟内存与物理内存 首先我们来先看看虚拟内存与物理内存,虚拟内存和物理内存的关系印证了一句名言,「操作系统中的任何问题都可以通过一个抽象的中间层来解决」,虚拟内存正是如此。 ?...为了解决这个问题,人们使用了 level 的概念,表的结构分为多级,表项的大小只与虚拟内存空间中真正使用的多少有关。...Arena 的出现首先用来解决多线程下全局锁的问题,它的思路是尽可能的让一个线程独占一个 Arena,同时一个线程会申请一个或多个堆,释放的内存又会进入回收站,Arena 就是用来管理这些堆和回收站的。...它的实现也非常简单,先申请一块 64M 大小的不可不可不可执行(PROT_NONE)的内存区域,需要内存时使用 mprotect 把一块内存区域的权限改为可读可写(R+W)即可,这块内存区域就可以分配给上层应用了...这中间的两块内存区域是属于一个子堆,它们加起来的大小是 64M,然后其中有一块 1.3M 大小的内存区域就是使用 mprotrect 分配出去的,剩下的 63M 左右的区域,是不可不可不可执行的待分配区域

86040

操作系统内存管理

3.连续分配内存      内存通常分为两个区域,分别驻留操作系统和用户进程。由于中断向量通常位于低内存,操作系统也放在低内存。...在可变分区方案里,系统中有一个表用来记录那些内存占用还是未占用。当有新进程需要内存时,为该内存寻找足够大的孔,从这个孔中为该进程分配所需的内存,孔内未分配内存可为其他进程所用。...当进程需要执行时,根据进程的大小计算页数n,从而内存中也应该至少有n个帧用来分配给新进程。进程的第一装入一个分配的帧,帧号放入进程的表中。       如下图所示 ?      ...这种情况下,表本身非常大。我们并不可能在内存中连续的分配这个表。一个简单方法是将表划分为更小部分。       一种方法是使用两级分页算法,将表在分页。以一个4kb大小的32位系统为例。...这可能消耗大量物理内存。为解决这个问题,可以使用反向表。 6.分段       采用分页内存管理有一个不可避免的问题:用户视角的内存和实际内存的分离。

88310

经典面试题(一)之服务器内存碎片

如果使用valgrind这样的内存泄露工具排查却发现并无内存泄露,其根本原因是内存碎片造成的。这也是我们在开发高性能服务器需要解决的一个问题,那如何解决这个问题呢?请听我慢慢道来。...现在memory2内存不需要了,我们想还给内存,但是遇到问题了——如果我们改变brk指针,那么memory1也会被还给系统,这样是不可行的。...我们有两种解决方案:一是将memory2内存中的数据复制到memory1中,但是这样一来,所有的内存地址都会发生变化,是不可行的;二是将memory2的内存缓存下来,下一次用户申请内存时我们不需要直接使用系统调用...大对象的分配简单得多,直接从heap free list分配4n KB大小的空闲块即可,如果heap free list不存在该大小的空闲块,通过系统调用分配连续的内存。...图10 内存分配示意图 其中,上面一块是元数据区域,用来记录我们的内存分配信息,元数据区域中最重要的是一个链表,这个链表维护了我们所使用的内存数据。

5.6K111

Linux 性能优化的全景指南,可能都在这里了,建议收藏~

性能报告显示确实时stress占用了大量的CPU,通过修复权限问题来优化解决即可。 系统中出现大量不可中断进程和僵尸进程怎么办?...当进程访问的虚拟地址在表中查不到时,系统会产生一个缺页异常,进入内核空间分配物理内存,更新进程表,再返回用户空间恢复进程的运行。 MMU以为单位管理内存大小4KB。...为了解决表项过多问题Linux提供了多级表和HugePage的机制。...通过调用栈看到是 fibonacci 函数分配内存没有释放。定位到源码后查看源码来修复增加内存释放函数即可。 为什么系统的 Swap 变高 系统内存资源紧张时通过内存回收和OOM杀死进程来解决。...如何“快准狠”找到系统内存存在的问题 内存性能指标 系统内存指标 已用内存/剩余内存 共享内存 (tmpfs实现) 可用内存:包括剩余内存和可回收内存 缓存:磁盘读取文件的缓存,slab分配器中的可回收部分

2K21

架构必知:Linux性能优化全景指南(建议收藏)

性能报告显示确实时stress占用了大量的CPU,通过修复权限问题来优化解决即可. 系统中出现大量不可中断进程和僵尸进程怎么办?...当进程访问的虚拟地址在表中查不到时,系统会产生一个缺页异常,进入内核空间分配物理内存,更新进程表,再返回用户空间恢复进程的运行。 MMU以为单位管理内存大小4KB。...为了解决表项过多问题Linux提供了多级表和HugePage的机制。...通过调用栈看到是fibonacci函数分配内存没有释放。定位到源码后查看源码来修复增加内存释放函数即可. 为什么系统的Swap变高 系统内存资源紧张时通过内存回收和OOM杀死进程来解决。...如何“快准狠”找到系统内存存在的问题 内存性能指标 系统内存指标 已用内存/剩余内存 共享内存 (tmpfs实现) 可用内存:包括剩余内存和可回收内存 缓存:磁盘读取文件的缓存,slab分配器中的可回收部分

1.5K30

Linux性能优化

性能报告显示确实时stress占用了大量的CPU,通过修复权限问题来优化解决即可. 系统中出现大量不可中断进程和僵尸进程怎么办?...当进程访问的虚拟地址在表中查不到时,系统会产生一个缺页异常,进入内核空间分配物理内存,更新进程表,再返回用户空间恢复进程的运行。 MMU以为单位管理内存大小4KB。...为了解决表项过多问题Linux提供了多级表和HugePage的机制。...通过调用栈看到是fibonacci函数分配内存没有释放。定位到源码后查看源码来修复增加内存释放函数即可. 为什么系统的Swap变高 系统内存资源紧张时通过内存回收和OOM杀死进程来解决。...如何“快准狠”找到系统内存存在的问题 内存性能指标 系统内存指标 已用内存/剩余内存 共享内存 (tmpfs实现) 可用内存: 包括剩余内存和可回收内存 缓存:磁盘读取文件的缓存,slab分配器中的可回收部分

2.7K20

Android内存管理(四)Linux的内存管理机制

虚拟地址空间 为了解决上述的一些问题,linux系统引入了虚拟空间的概念,虚拟化的出现和硬件有密不可分的联系,可以说是软硬件组合的结果,虚拟地址空间就是在程序和物理空间所增加的中间层,这也是内存管理的重点...物理内存内存碎片 ---- 前面说的段管理机制算是虚拟空间的部分,然而linux内存管理的另外一个重要部分就是物理内存的管理了,也就是如何分配和回收物理内存,这就涉及到一些内存分配算法和分配器。...物理内存分配分配器和分配算法就像公司财务,内存就像公司资金,如何把资金合理使用是财务的本职工作,如何把物理内存合理使用是分配器的分内之事。 ?...buffers与cached都是从物理内存中分离出来的,主要用于实现磁盘缓存,用来保存系统曾经打开过的文件以及文件属性信息,这样当操作系统需要读取某些文件时,会首先在buffers与cached内存区查找...buffers是用来缓冲块设备做的,它只记录文件系统的元数据(metadata)以及 tracking in-flight pages,而cached是用来给文件做缓冲。

2.6K10

Java面试集锦(一)之操作系统

虚拟内存的使用可以带来以下好处: 在内存中可以保留多个进程,系统并发度提高 解除了用户与内存之间的紧密约束,进程可以比内存的全部空间还大 Windows下的内存如何管理的?...Windows提供了3种方法来进行内存管理: 虚拟内存,最适合用来管理大型对象或者结构数组; 内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行多个进程之间共享数据; 内存堆栈...如何解决冲突?   每个进程中访问临界资源的那段程序称为临界区,每次只准许一个进程进入临界区,进入后不允许其他进程进入。   ...7、说说分段和分页   是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。   ...11.OS如何实现内存的管理? 虚拟内存 内存 1. 并发 并发是指宏观上在一段时间内能同时运行多个程序,而并行则指同一时刻能运行多个指令。

39730

带你通过字节跳动面试---操作系统复习

线程锁通常用来实现线程的同步和通信,在单核机器上仍然存在线程同步的问题。在抢占式操作系统中,通常为每个线程分配一个时间片,当某个线程时间片耗尽以后,操作系统会把它挂起,然后运行另一个线程。...死锁发生的条件以及如何解决死锁 死锁是指两个或者两个以上进程在执行过程中,因为争夺资源而造成相互等待的现象。 四个发生条件分别为: 互斥条件。进程分配到的资源不允许其他进程同时访问。...不可剥夺条件。进程获得的资源在使用完成之前不可被剥夺,只能自己使用完后释放。 循环等待条件。发生死锁时,一定存在一个 进程——资源 的循环链。 解决死锁的方法: 破坏请求和保持条件。...操作系统中的缺页中断 通过 分配内存时,只是分配了虚拟内存而不是实际的物理地址,进程访问时也是访问的虚拟地址而不是物理地址。 在请求分页系统中,可以查询表的状态来确定要访问的表是否在内存中。...如何避免僵尸进程 外部解决 通过 消灭产生僵尸进程的进程,那么僵尸进程就变成了孤儿进程,由 进程处理。

1.3K20

总结(三) 操作系统

内存分页 为了解决分段的两个缺点(碎片问题和内存交换效率低)。 实现:将虚拟内存和实际内存分割成一小片,这片称为。Linux中的大小是4k。 再把表和物理内存映射起来。...如何解决碎片问题和内存交换效率低的问题? 碎片问题: 因为是通过映射的方式,所以不会出现进程无法使用的内存块,每个释放的都能被重新使用。...内存交换: 遇到不常使用的内存空间时,不需要像分段一样传递整个程序的占用内存,只需要传递几个到磁盘,这样效率就很高。 如何实现 表内有虚拟页号和物理页号(对应的块号)。...转换到物理地址的过程: 将虚拟地址转换成页号和内偏移量 拿着页号去表查询物理页号 物理页号加偏移量就是物理地址 缺点 1,简单分页的情况下,因为操作系统运行的进程很大,那么就意味着表占用内存也特别大...共享内存 拿出一块虚拟内存,映射到相同的物理地址。 缺点:并发问题。 信号量 为了防止共享内存出现的竞争问题,推出机制信号量。 信号量用来表示资源的互斥与同步。

50281

操作系统面试题汇总

内存映射文件 内存堆栈 中断和轮询 中断的定义 轮询的定义 临界区和冲突解决 临界资源的定义 临界区的定义 解决冲突 缓冲区溢出 缓冲区溢出的定义 缓冲区溢出的危害 缓冲区溢出的原因 死锁 死锁的定义...进程是系统进行资源分配和调度的一个独立单位 线程的定义 线程是进程的一个实体,是CPU调度和分派的基本单位 两者关系 一个进程可以有多个线程,多个线程也可以并发执行 线程同步的方式 互斥量、信号量、...windows内存管理 虚拟内存 最适合用来管理大型对象或者结构数组 内存映射文件 最适合用来管理大型数据流以及在单个计算机上运行多个进程之间共享数据 内存堆栈 最适合用来管理大量的小对象...死锁的条件 互斥、不可抢占、占有并等待、环形等待 避免死锁 对资源的分配要给予合理的规划 处理死锁 鸵鸟策略、预防策略、避免策略、检测与恢复策略 分页和分段 的定义 用户程序的地址空间被划分成若干固定大小的区域...段的大小不固定,有它所完成的功能决定;大大小固定,由系统决定 段向用户提供二维地址空间;向用户提供的是一维地址空间 段是信息的逻辑单位,便于存储保护和信息的共享,的保护和共享受到限制

2.1K80

操作系统基础-内存虚拟化

然而这种模式有很严重的问题: 这个地址空间太小,虽然我们可以放大这个地址空间(比如说640K……),但无论如何不能超过物理内存的大小 更严重的是,堆和栈之间有一大片分配了却没有使用的地址,地址空间越大,...但是段式寻址没有解决根本问题,假如一个进程申请了一个巨大的堆,比如说1GB,然后释放了这1GB里面大部分的空间,只留下开头和结尾各1KB的空间,这同样导致的浪费。我们需要更精细的内存分配手段。...Pagetable 解决这个问题的思路是每次只分配一小片内存,按需分配,这一小片内存的大小通常为4KB,称之为一(page)。...后来x86_64中添加了禁止执行位(No-Execute bit,或NX)来解决这个问题。 有些硬件采用了讨厌的段式的混合寻址,现代操作系统已经不用这种模式了。...图7 - 线性表(左边)和多级表(右边) 那么多级表是如何节省空间的呢?

1.2K10
领券