England, without Roy’s regular opening partner Alex Hales at the top of the order after he injured his back fielding at The Oval, faced a Duckworth-Lewis target of 308 from 42 overs against Sri Lanka.
But Roy and Joe Root (65) took advantage of an outstanding surface, after the early loss of Moeen Ali, to ease England ahead of the rate for the second-highest ODI run chase in their history.
Sri Lanka had overcome a two-hour stoppage for rain to finish on 305 for five – thanks to Kusal Mendis (77), Danushka Gunathilaka (62), Dinesh Chandimal (63) and Angelo Mathews (67no).
But Roy’s second hundred in under a week, from 74 balls, put that total into context.
It seemed a second record in the space of six days, after his share in England’s highest stand at Edgbaston on Friday, would also be his until he was bowled by Nuwan Pradeep just short of Robin Smith’s 167 23 years ago.
Moeen had edged Pradeep behind on the back foot, and then Roy had a narrow lbw escape on 16 when Mathews nipped one back and went to DRS but was denied by impact just outside off-stump.
But Root, and especially Roy, responded with a partnership which demonstrated that there was precious little margin for error for bowlers on this pitch.
Roy raced to the fastest 50 of the match, from 39 balls, only for Root to equal him on that score.
They benefited from contrasting styles, the former advancing to the seamers and his partner hanging back and punishing any over-compensation.
Root eventually swept Gunathilaka’s off-spin to short fine-leg.
Roy’s luck was in on 51, surviving despite hotspot indicating caught-behind down the leg-side off Pradeep, and on 133 when Suranga Lakmal dropped a return chance.
He lost Eoin Morgan to a breathtaking one-handed catch at point by Gunathilaka – but by the time he was done, with 13 fours and three sixes to his name, England needed only another 27 runs.
After Morgan had put the tourists in on an already cool and showery afternoon, 21-year-old Mendis was the driving force in a second-wicket stand of 128 with Gunathilaka.
It was Sri Lanka’s first century partnership of what, thanks to the weather, has become a stop-start series – albeit one sold out throughout.
They have previously relied heavily on the middle-order powerhouse of Mathews and Chandimal.
That seemed likely again, when Kusal Perera was run out by a prowling Jonny Bairstow, but Gunathilaka and Mendis got Sri Lanka past 50 for the loss of less than two wickets for the first time in four matches.
Mendis has impressed sporadically this summer, and his second successive half-century – his third in ODIs – contained nine boundaries.
They were very well-timed, and placed, including five in nine balls off David Willey and Chris Woakes.
Mendis pressed on to his highest score in any white-ball innings, either internationally or domestically.
But on the resumption, Adil Rashid broke the stand and doubled up with the wicket of the second batsman too.
He was helped by two good catches, Liam Plunkett running in from long-off to see off Mendis and Moeen safe at mid-off too when Gunathilaka made room to hit inside out.
Chandimal and Mathews had the opportunity to take over after all – and they did not miss their cue, in a stand of 87.
Chandimal’s share brought him his third consecutive 50, completed with an audacious ramp over third-man off Plunkett for his third six.
Willey bowled him round his legs sweeping as he searched for new methods, with Jos Buttler standing up to keep him in his crease.
Mathews, with his third half-century in four innings, ensured a late surge of 55 from the last five overs which put the onus on England – yet ultimately simply brought the very best out of Roy.
The second-wicket stand of 149 put England in a position from which victory came with six wickets and 11 balls to spare to make it 2-0 with just the last match to come in Cardiff.