`
yanhail
  • 浏览: 11891 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

linux创建lvm裸设备 安装 oracle

阅读更多

引用http://bluewind.oracle.com.cn/viewthread.php?tid=156445&extra=page%3D3

下面是在虚拟机上添加一块新硬盘,并创建lvm裸设备给oracle使用的过程,和大家一起学习,有不正确的地方希望指导,谢谢。
linux系统是 AS4 update 7
实验前,先了解一些基本概念,如下:
LVM(Logicl Volume Manager),逻辑卷管理器,通过使用逻辑卷管理器对硬盘存储设备进行管理,可以实现硬盘空间的动态划分和调整。
一、 基本概念
1、 物理卷-----PV(Physical Volume)
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘。
2、 卷组--------VG(Volumne Group)
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
3、 逻辑卷-----LV(Logical Volume)
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。
4、 物理区域--PE(Physical Extent)
物理区域是物理卷中可用于分配的最小存储单元,物理区域的大小可根据实际情况在建立物理卷时指定。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致。
5、 逻辑区域—LE(Logical Extent)
逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
6、 卷组描述区域-----(Volume Group Descriptor Area)
卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中的逻辑卷及逻辑卷中物理区域的分配等所有信息,卷组描述区域是在使用pvcreate建立物理卷时建立的。
二、实战操作
1.在虚拟机上添加一块硬盘,进入系统创建分区
[root@rles ~]# fdisk -l  --查看现在有分区
Disk /dev/hda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1        1912    15358108+  83  Linux
/dev/hda2            1913        2173     2096482+  82  Linux swap
/dev/hda3            2174        2610     3510202+  83  Linux
Disk /dev/hdb: 2147 MB, 2147483648 bytes                --可以看到这个设备还没有分区
16 heads, 63 sectors/track, 4161 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Disk /dev/hdb doesn't contain a valid partition table
[root@rles ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda1              15G  7.5G  6.3G  55% /
none                  553M     0  553M   0% /dev/shm
/dev/hda3             3.3G   98M  3.1G   4% /tmp
[root@rles ~]# 
[root@rles ~]# 
[root@rles ~]# 
[root@rles ~]# fdisk /dev/hdb                --为设备分区,下面是分区的过程
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
The number of cylinders for this disk is set to 4161.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)
Command (m for help): l                -输入字母L查看分区类型
0  Empty           1e  Hidden W95 FAT1 75  PC/IX           be  Solaris boot   
1  FAT12           24  NEC DOS         80  Old Minix       bf  Solaris        
2  XENIX root      39  Plan 9          81  Minix / old Lin c1  DRDOS/sec (FAT-
3  XENIX usr       3c  PartitionMagic  82  Linux swap      c4  DRDOS/sec (FAT-
4  FAT16 <32M      40  Venix 80286     83  Linux           c6  DRDOS/sec (FAT-
5  Extended        41  PPC PReP Boot   84  OS/2 hidden C:  c7  Syrinx         
6  FAT16           42  SFS             85  Linux extended  da  Non-FS data    
7  HPFS/NTFS       4d  QNX4.x          86  NTFS volume set db  CP/M / CTOS / .
8  AIX             4e  QNX4.x 2nd part 87  NTFS volume set de  Dell Utility   
9  AIX bootable    4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         
a  OS/2 Boot Manag 50  OnTrack DM      93  Amoeba          e1  DOS access     
b  W95 FAT32       51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
c  W95 FAT32 (LBA) 52  CP/M            9f  BSD/OS          e4  SpeedStor      
e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
f  W95 Ext'd (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  EFI GPT        
10  OPUS            55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
11  Hidden FAT12    56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
12  Compaq diagnost 5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
14  Hidden FAT16 <3 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
16  Hidden FAT16    63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fd  Linux raid auto
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fe  LANstep        
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid ff  BBT            
1c  Hidden W95 FAT3
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)                --这里让输入主分区或者扩展分区,我输入p,表示主分区
p
Partition number (1-4): 4
First cylinder (1-4161, default 1):                 --第几个主分区,这里应该输入1,不过测试也没关系
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-4161, default 4161): 
Using default value 4161
Command (m for help): w                        --这里输入w表示write table to disk and exit
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
2.查看系统信息,并创建pv
[root@rles ~]# fdisk -l
Disk /dev/hda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1        1912    15358108+  83  Linux
/dev/hda2            1913        2173     2096482+  82  Linux swap
/dev/hda3            2174        2610     3510202+  83  Linux
Disk /dev/hdb: 2147 MB, 2147483648 bytes
16 heads, 63 sectors/track, 4161 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/hdb4               1        4161     2097112+  83  Linux
[root@rles ~]# pvcreate /dev/hdb4    --创建pv
  Physical volume "/dev/hdb4" successfully created
[root@rles ~]# pvdisplay /dev/hdb4    --查看pv信息
  "/dev/hdb4" is a new physical volume of "2.00 GB"
  --- NEW Physical volume ---
  PV Name               /dev/hdb4
  VG Name               
  PV Size               2.00 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               SPLedg-E05Q-nmXf-kwz9-Wbd9-Ci0a-0gwliT
   
[root@rles ~]# ls -l /dev/hdb4
brw-rw----  1 root disk 3, 68 Jun  5 20:48 /dev/hdb4
3.创建vg
[root@rles ~]# vgcreate oradata /dev/hdb4
  Volume group "oradata" successfully created
[root@rles ~]# ls -l /dev/hdb4           
brw-rw----  1 root disk 3, 68 Jun  5 20:48 /dev/hdb4
[root@rles ~]# 
4.创建lv
[root@rles ~]# lvcreate -n system01 -L 2040M oradata
  Logical volume "system01" created
[root@rles ~]# ls -l /dev/hdb4
brw-rw----  1 root disk 3, 68 Jun  5 20:48 /dev/hdb4
[root@rles ~]# ls -l /dev/oradata/
total 0
lrwxrwxrwx  1 root root 28 Jun  5 22:54 system01 -> /dev/mapper/oradata-system01
[root@rles ~]# 
[root@rles ~]# lvremove /dev/oradata/system01   --删除lv
Do you really want to remove active logical volume "system01"? [y/n]: y
  Logical volume "system01" successfully removed
[root@rles ~]# 
[root@rles ~]# ls -l /dev/oradata/            
ls: /dev/oradata/: No such file or directory
[root@rles ~]# lvcreate -n system01 -L 2040M oradata
  Logical volume "system01" created
[root@rles ~]# ls -l /dev/oradata/                  
total 0
lrwxrwxrwx  1 root root 28 Jun  5 22:55 system01 -> /dev/mapper/oradata-system01
[root@rles ~]# 
[root@rles ~]# 
5.绑定裸设备
[root@rles oradata]# raw /dev/raw/raw1 /dev/mapper/oradata-system01 --注意,之前是没有/dev/raw目录的,执行后会自动创建
/dev/raw/raw1:  bound to major 253, minor 0
[root@rles oradata]# 
[root@rles oradata]# ls -l /oradata/
total 4
drwxr-xr-x  2 root root 4096 Jun  5 23:21 system01
[root@rles oradata]# raw -qa  --查询裸设备
/dev/raw/raw1:  bound to major 253, minor 0
6.为了保证重启后,可以挂载裸设备,修改下面文件,添加内容
[root@rles oradata]# cat /etc/sysconfig/rawdevices 
# This file and interface are deprecated.
# Applications needing raw device access should open regular
# block devices with O_DIRECT.
# raw device bindings
# format:  <rawdev> <major> <minor>
#          <rawdev> <blockdev>
# example: /dev/raw/raw1 /dev/sda1
#          /dev/raw/raw2 8 5
/dev/raw/raw1 /dev/mapper/oradata-system01
7.重启裸设备服务,验证是否能挂载
[root@rles oradata]# /etc/init.d/rawdevices restart  --重启裸设备服务
Assigning devices: 
           /dev/raw/raw1  -->   /dev/mapper/oradata-system01
/dev/raw/raw1:  bound to major 253, minor 0
done
[root@rles oradata]# 
[root@rles oradata]# ls -l /dev/mapper/
total 0
crw-------  1 root root  10, 63 Jun  5 23:24 control
brw-rw----  1 root disk 253,  0 Jun  5 23:24 oradata-system01
[root@rles oradata]# 
8.切换到oracle用户,测试在是否能在裸设备上创建表空间
[root@rles oradata]# su - oracle
[oracle@rles ~]$ sqlplus '/as sysdba'
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 5 23:41:39 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area  159383552 bytes
Fixed Size                  1218268 bytes
Variable Size             142608676 bytes
Database Buffers           12582912 bytes
Redo Buffers                2973696 bytes
Database mounted.
Database opened.
SQL> set linesize 121
SQL> select * from v$tablespace;
       TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
         0 SYSTEM                         YES NO  YES
        11 UNDOTBS01                      YES NO  YES
         2 SYSAUX                         YES NO  YES
         4 USERS                          YES NO  YES
         6 EXAMPLE                        YES NO  YES
        19 DEMO                           YES NO  YES
         8 STATSPACK                      YES NO  YES
         3 TEMP                           NO  NO  YES
        25 TESTING_LMT_ASSM               YES NO  YES
         9 TEST                           YES NO  YES
        27 TEST_UNIFORM                   YES NO  YES
11 rows selected.
SQL> create tablespace raw datafile '/dev/mapper/oradata-system01';                --这里看来不能用这个名字
create tablespace raw datafile '/dev/mapper/oradata-system01'
                  *
ERROR at line 1:
ORA-02216: tablespace name expected
SQL> create tablespace raw_test datafile '/dev/mapper/oradata-system01';  --这里报错可以看到是权限不足,下面我们修改权限
create tablespace raw_test datafile '/dev/mapper/oradata-system01'
*
ERROR at line 1:
ORA-01119: error in creating database file '/dev/mapper/oradata-system01'
ORA-27041: unable to open file
Linux Error: 13: Permission denied
Additional information: 1
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[oracle@rles ~]$ exit
logout
[root@rles oradata]#
9.给新创建的裸设备增加权限,以使oracle能使用
[root@rles oradata]# cd /dev/mapper/
[root@rles mapper]# ls -l
total 0
crw-------  1 root root  10, 63 Jun  5 23:24 control
brw-rw----  1 root disk 253,  0 Jun  5 23:24 oradata-system01
[root@rles mapper]# ls -l /dev/raw
total 0
crw-rw----  1 root disk 162, 1 Jun  5 23:34 raw1
[root@rles mapper]# chown -R oracle:oinstall /dev/mapper/oradata-system01 
[root@rles mapper]# ls -l
total 0
crw-------  1 root   root      10, 63 Jun  5 23:24 control
brw-rw----  1 oracle oinstall 253,  0 Jun  5 23:24 oradata-system01
[root@rles mapper]# ls -l /dev/raw
total 0
crw-rw----  1 root disk 162, 1 Jun  5 23:34 raw1
[root@rles mapper]# 
[root@rles mapper]# su - oracle
[oracle@rles ~]$ sqlplus '/as sysdba'
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 5 23:48:50 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> set linesize 121
SQL> create tablespace raw_test datafile '/dev/mapper/oradata-system01';  --有了权限后,可以创建了
Tablespace created.
SQL> 
SQL> col file_name format a50
SQL> col tablespace_name format a15
SQL> select file_name,tablespace_name,bytes/1024/1024 "TBS_Size" from dba_data_files where tablespace_name='RAW_TEST';
FILE_NAME                                          TABLESPACE_NAME   TBS_Size
-------------------------------------------------- --------------- ----------
/dev/mapper/oradata-system01                       RAW_TEST        2039.99219
SQL> 
SQL> select * from v$tablespace;
       TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
         0 SYSTEM                         YES NO  YES
        11 UNDOTBS01                      YES NO  YES
         2 SYSAUX                         YES NO  YES
         4 USERS                          YES NO  YES
         6 EXAMPLE                        YES NO  YES
        19 DEMO                           YES NO  YES
         8 STATSPACK                      YES NO  YES
         3 TEMP                           NO  NO  YES
        25 TESTING_LMT_ASSM               YES NO  YES
        30 RAW_TEST                       YES NO  YES
         9 TEST                           YES NO  YES
       TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
        27 TEST_UNIFORM                   YES NO  YES
12 rows selected.
SQL> drop tablespace raw_test;  --裸设备上drop表空间,不需要带including ... and ... ,否则会连裸设备也删除了
Tablespace dropped.
SQL> select * from v$tablespace;
       TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
         0 SYSTEM                         YES NO  YES
        11 UNDOTBS01                      YES NO  YES
         2 SYSAUX                         YES NO  YES
         4 USERS                          YES NO  YES
         6 EXAMPLE                        YES NO  YES
        19 DEMO                           YES NO  YES
         8 STATSPACK                      YES NO  YES
         3 TEMP                           NO  NO  YES
        25 TESTING_LMT_ASSM               YES NO  YES
         9 TEST                           YES NO  YES
        27 TEST_UNIFORM                   YES NO  YES
11 rows selected.
SQL> 

 

上面例子在重启后,raw权限会失效,下面是解决方法
下面主要修改了两个文件:
1./etc/rc.local
2./etc/udev/permissions.d/50-udev.permissions
[root@rles ~]# raw -qa
/dev/raw/raw1:  bound to major 3, minor 68
[root@rles ~]# raw /dev/raw/raw1 0 0                --取消绑定
/dev/raw/raw1:  bound to major 0, minor 0
[root@rles ~]# 
[root@rles ~]# raw -qa
[root@rles ~]# 
[root@rles ~]# raw /dev/raw/raw1 /dev/mapper/oradata-system01 
/dev/raw/raw1:  bound to major 253, minor 0
[root@rles ~]# /etc/init.d/rawdevices restart
Assigning devices: 
           /dev/raw/raw1  -->   /dev/mapper/oradata-system01
/dev/raw/raw1:  bound to major 253, minor 0
done
[root@rles ~]# cat /etc/sysconfig/rawdevices |grep system01
/dev/raw/raw1 /dev/mapper/oradata-system01 
[root@rles ~]# raw -qa
/dev/raw/raw1:  bound to major 253, minor 0
[root@rles ~]# 
[root@rles permissions.d]# cat 50-udev.permissions | grep raw/        --这一步使 /dev/raw/raw1 在重启后权限不变
raw/*:oracle:oinstall:0660
[root@rles mapper]# raw -qa
/dev/raw/raw1:  bound to major 253, minor 0
[root@rles mapper]# vgdisplay 
  --- Volume group ---
  VG Name               oradata
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               2.00 GB
  PE Size               4.00 MB
  Total PE              511
  Alloc PE / Size       510 / 1.99 GB
  Free  PE / Size       1 / 4.00 MB
  VG UUID               RkMm1h-oDyk-14E5-VmB5-24Vn-3VTY-46AjFe
   
[root@rles mapper]# lvdisplay 
  --- Logical volume ---
  LV Name                /dev/oradata/system01
  VG Name                oradata
  LV UUID                WWtAI3-Jn1o-kGG0-n8dL-3guH-Zk1j-jXOViT
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                1.99 GB
  Current LE             510
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
   
[root@rles mapper]# ls -l /dev/mapper/
total 0
crw-------  1 root   root      10, 63 Jun  7 19:04 control
brw-rw----  1 oracle oinstall 253,  0 Jun  7 19:04 oradata-system01
[root@rles mapper]# ls -l /dev/oradata/
total 0
lrwxrwxrwx  1 root root 28 Jun  7 19:04 system01 -> /dev/mapper/oradata-system01
[root@rles mapper]# ls -l /dev/raw
total 0
crw-rw----  1 oracle oinstall 162, 1 Jun  7 19:29 raw1
[root@rles mapper]# 
[root@rles mapper]# chown oracle:oinstall /dev/mapper/oradata-system01 
[root@rles mapper]# ls -l /dev/mapper/
total 0
crw-------  1 root   root      10, 63 Jun  7 19:04 control
brw-rw----  1 oracle oinstall 253,  0 Jun  7 19:04 oradata-system01
[root@rles mapper]# su - oracle
[oracle@rles ~]$ sqlplus '/as sysdba'
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jun 7 19:43:10 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> create tablespace raw_test datafile '/dev/mapper/oradata-system01';
Tablespace created.
SQL> drop tablespace raw_test;
Tablespace dropped.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
--下面修改/etc/rc.local文件,修改后如下
[root@rles ~]# cat /etc/rc.local | grep system
chown oracle:oinstall /dev/mapper/oradata-system01
[root@rles ~]# 
--下面重启测试权限问题是否解决
[root@rles ~]# su - oracle
[oracle@rles ~]$ sqlplus '/as sysdba'
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jun 7 19:53:27 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[oracle@rles ~]$ exit
logout
[root@rles ~]# reboot
Broadcast message from root (pts/0) (Mon Jun  7 19:54:38 2010):
The system is going down for reboot NOW!
[root@rles permissions.d]# ls -l /dev/mapper/                --查看权限
total 0
crw-------  1 root   root      10, 63 Jun  7 19:56 control
brw-rw----  1 oracle oinstall 253,  0 Jun  7 19:56 oradata-system01
[root@rles permissions.d]# ls -l /dev/oradata/        --查看权限,说明这个对使用没有影响
total 0
lrwxrwxrwx  1 root root 28 Jun  7 19:56 system01 -> /dev/mapper/oradata-system01
[root@rles permissions.d]# 
[root@rles permissions.d]# su - oracle
[oracle@rles ~]$ sqlplus '/as sysdba'
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jun 7 20:01:31 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area  159383552 bytes
Fixed Size                  1218268 bytes
Variable Size             142608676 bytes
Database Buffers           12582912 bytes
Redo Buffers                2973696 bytes
Database mounted.
Database opened.
SQL> 
SQL> create tablespace raw_test datafile '/dev/mapper/oradata-system01';
Tablespace created.
SQL> col file_name format a40
SQL> 
SQL> select file_name,bytes/1024/1024 from dba_data_files where tablespace_name='RAW_TEST';
FILE_NAME                                BYTES/1024/1024
---------------------------------------- ---------------
/dev/mapper/oradata-system01                  2039.99219
SQL> 
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics